去除text中颜色标记方法 :NGUITools.StripSymbols(showText);
字符串是 :我是<item 82000001>火凤凰</item>!
解析结果: 我是火凤凰! 这个火凤凰的id 是 82000001!
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using System;
using System.Text;
using CommonEnum;
/// <summary>
/// 超链接信息类
/// </summary>
public class ParseStringInfo
{
string _Str;// 内容
int _Id;// id
ParseStringType _Type;// tips的类型 (item 打开tips hero打开图鉴的hero)
public ParseStringInfo(){}
public ParseStringInfo (string str,int id)
{
_Str = str;
_Id = id;
HeroData _HeroData = HeroDataProvider.GetInstance().GetHeroDataByID(id);
if (_HeroData != null)
{
_Type = ParseStringType.Hero;
return;
}
ItemIconInfo _ItemIconInfo = ItemWrap.GetItemIconInfo(id);
if (_ItemIconInfo != null && _ItemIconInfo._Icon != null)
{
_Type = ParseStringType.Item;
return;
}
_Type = ParseStringType.UnKnown;
}
public ParseStringType GetType()
{
return _Type;
}
public int GetId()
{
return _Id;
}
public string GetStr()
{
return _Str;
}
}
// 我是<item id=82000001>超人</item>!
public class ParseStringCtr {
/// <summary>
/// 文本构造器
/// </summary>
private static StringBuilder s_TextBuilder = new StringBuilder();
/// <summary>
/// 超链接正则
/// </summary>
private static Regex s_HrefRegex =
new Regex(@"<item id=([^>\n\s]+)>(.*?)(</item>)", RegexOptions.Singleline);
/// <summary>
/// 获取超链接解析后的最后输出文本
/// </summary>
/// <returns></returns>
public static ParseStringInfo GetOutputText(string text)
{
int Id = -1;
s_TextBuilder.Length = 0;
int indexText = 0;
foreach (Match match in s_HrefRegex.Matches(text))
{
s_TextBuilder.Append(text.Substring(indexText, match.Index - indexText));
//s_TextBuilder.Append("[FF0000]"); // 超链接颜色
int.TryParse(match.Groups[1].Value,out Id);
s_TextBuilder.Append(match.Groups[2].Value);
//s_TextBuilder.Append("[-]");
indexText = match.Index + match.Length;
}
s_TextBuilder.Append(text.Substring(indexText, text.Length - indexText));
string str = s_TextBuilder.ToString();
ParseStringInfo _ParseStringInfo = new ParseStringInfo (str,Id);
return _ParseStringInfo;
}
}
监听点击事件
上面解析字符串就需要处理下,格式改成 [url=http://www.baidu.com/][u]百度[/u][/url] 链接
改成这样:
// [url=http://www.baidu.com/][u]百度[/u][/url] 链接
/// <summary>
/// 获取超链接解析后的最后输出文本 [u] 下划线开始
/// </summary>
/// <returns></returns>
public static ParseStringInfo GetOutputText(string text)
{
int Id = -1;
s_TextBuilder.Length = 0;
int indexText = 0;
foreach (Match match in s_HrefRegex.Matches(text))
{
s_TextBuilder.Append(text.Substring(indexText, match.Index - indexText));
//s_TextBuilder.Append("[FF0000]"); // 超链接颜色
//s_TextBuilder.Append("[u]"); // 超链接下划线
int.TryParse(match.Groups[1].Value,out Id);
String valu = string.Format("[url={0}][u]{1}[/u][/url]",Id,match.Groups[2].Value);
s_TextBuilder.Append(valu);
//s_TextBuilder.Append("[-]");
//s_TextBuilder.Append("[/u]");
indexText = match.Index + match.Length;
}
s_TextBuilder.Append(text.Substring(indexText, text.Length - indexText));
string str = s_TextBuilder.ToString();
long Guid = -1;
s_TextBuilder.Length = 0;
indexText = 0;
foreach (Match match in s_HrefRegex_playerguid.Matches(str))
{
s_TextBuilder.Append(str.Substring(indexText, match.Index - indexText));
//s_TextBuilder.Append("[FF0000]"); // 超链接颜色
//s_TextBuilder.Append("[u]"); // 超链接下划线
long.TryParse(match.Groups[1].Value,out Guid);
String valu = string.Format("[url={0}][u]{1}[/u][/url]",Guid,match.Groups[2].Value);
s_TextBuilder.Append(valu);
//s_TextBuilder.Append("[-]");
//s_TextBuilder.Append("[/u]");
indexText = match.Index + match.Length;
}
s_TextBuilder.Append(str.Substring(indexText, str.Length - indexText));
string strstr = s_TextBuilder.ToString();
ParseStringInfo _ParseStringInfo = new ParseStringInfo (strstr,(int)Guid);
return _ParseStringInfo;
}
事件监听!
using UnityEngine;
using System.Collections;
public class UIPressChatItemTips : MonoBehaviour {
ParseStringInfo _ParseStringInfo;
UIEventListener _Listener = null;
bool mFirst = false;
void Init()
{
if (mFirst) return;
mFirst = true;
_Listener = gameObject.GetComponent<UIEventListener>();
if (_Listener != null)
{
_Listener.onPress = onItemPress;
}
}
void Clear()
{
_ParseStringInfo = null;
}
public void SetData(ParseStringInfo info)
{
Init();
Clear();
if (info == null)
return;
_ParseStringInfo = info;
}
void onItemPress(GameObject go,bool ispress)
{
if (!ispress)
{
GameUIManager.GetInstance().ClosePanel(UIName.UIGameTips);
return;
}
if (_ParseStringInfo == null)
return;
if (ispress)
{
UILabel lb1 = this.gameObject.GetComponent<UILabel>();
if (lb1 != null)
{
//获取鼠标点击点
Vector3 position = UICamera.lastWorldPosition;
//取到当前私聊对象id
string url = lb1.GetUrlAtPosition(position);
//Debug.Log("Clicked on: " + url);
if (!string.IsNullOrEmpty(url))
{
int itemid = -1;
if (int.TryParse(url,out itemid))
{
HeroData _HeroData = HeroDataProvider.GetInstance().GetHeroDataByID(itemid);
if (_HeroData != null)
{
UIUtil.ShowHeroCard(true,itemid);
return;
}
ItemIconInfo info = ItemWrap.GetItemIconInfo(itemid);
if (info != null && string.IsNullOrEmpty(info._Icon)==false)
{
UIUtil.ShowGameTips(position,ItemWrap.GetItemIconInfo(itemid));
return;
}
}
long guid = -1;
if(long.TryParse(url,out guid))
{
if (guid <= 0)
return;
long selfguid = PlayerManager.GetInstance().GetPlayerId();
bool isself = selfguid == guid;
if (isself == true)
return;
NetWorkManager.GetInstance().SendGetOtherRoleInfo(guid);
return;
}
}
}
}
}
}