聊天系统中难免需要加入动态表情来增加表现力,而使用NGUI中自带的表情系统有些局限:一是只能使用静态表情,二是需要制作字体图集,不能使用动态图集。所以需要另外寻找方法实现聊天文字中插入动态表情的效果。
经过寻找,找到两种实现方法:
一种是继续使用NGUI的Emoji系统,然后同一个表情的每一帧作为一个符号记录到字体图集中,然后用代码动态更换文字,实现表情的动态变化,类似下图:
其中*1,*2,*3,*4分别是一个表情的4帧,然后用脚本动态将输入的文字内容改变来。
这种方法麻烦的地方在于需要手动将每一帧表情输入监视器(当然可以写批处理解决),还需要记录每个表情用了几张图片,对应哪几个文字。需要占用一些字符。最重要的问题是不支持动态字体。
另外一种方法是不使用NGUI自带的表情系统,自己编写脚本将对应表情的文字替换成空格,在空格部分放上自己做的动态表情。
这种方法自由度比较大,而且还可以使用动态字体。搜索到了一篇文章:原文地址
原文中只贴了核心代码,我这边修改了一些,将完整的代码贴出来,可以直接使用,注意m_chatInput之类的引用我是在编辑器中设置的。里面还用到了上一篇文章中的动态表情脚本:链接地址
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
public class ChatTest : MonoBehaviour
{
public GameObject button;
//输入框
public UIInput m_chatInput;
//文字模板
public GameObject textObj;
//表情模板
public GameObject emojiObj;
private string space = " ";
//标准行宽度
private float BASELINEWIDTH = 350;
//显示的内容
private List<string> lineList;
//表情位置
private List<Vector3> eList;
//某行是否有表情
private