文章目录

  • 一、前言
  • 二、最终效果
  • 三、具体使用
    • 1、导入表情素材
    • 2、设置图片格式
    • 3、生成表情图集
    • 4、UI-EmojiFont.shader
    • 5、材质球
  • 四、测试
  • 五、结束语

一、前言

点关注不迷路,持续输出Unity干货文章。

嗨,大家好,我是新发。
我们在聊天中经常会使用到表情插在文字中的情况,比如下面这样:

我们在Unity中如何实现这种图文混排的效果呢?今天就来介绍下Unity UGUI Text图文混排的实现吧。

二、最终效果


本文Demo工程已上传到CodeChina,感兴趣的同学可自行下载学习。
地址:https://codechina.csdn.net/linxinfa/UnityEmojiTextDemo
注:我使用的Unity版本:2020.2.7f1c1 (64-bit)

注:本工程改版自Github工程:https://github.com/zouchunyi/EmojiText

三、具体使用

1、导入表情素材

将表情图片素材(png格式)导入到Unity工程中的这个目录中:Assets/Emoji/Input
注意图片命名规范:纯字母.png纯字母_数字.png,例:a.png, b_0.pngb_1.png
同一个表情的序列帧图片,以_数字结尾,一个表情最多支持8帧序列帧。
确保所有表情图片的尺寸一致,且是正方形,不要有的大有的小。

2、设置图片格式

设置图片格式为Default,设置Non-Power of 2(2的n次方)为ToNearest,勾选Read/Write Enabled
最后点击Apply按钮。

看下此时单个表情的尺寸,如下,是128*128

3、生成表情图集

点击菜单EmojiText / Open Emoji Build Editor

此时打开窗口如下,填写单个表情图尺寸为128

点击生成图集按钮,生成成功。

可以看到Output目录生成了三个文件。

其中emoji.txt记录了每个表情的数据信息。

会同时自动拷贝一份到Resources文件夹中。

那个emoji_data用于记录序列帧数量,
计算公式:

half frameCount = 1 + sign(data.r) + sign(data.g) * 2 + sign(data.b) * 4;

就是用rbg来存储一个数值,例:
只有1帧,r:0 g:0 b:0,那么就是黑色,
如果有2帧,r:0.5 g:0 b:0,那么就是红色,
如果是4帧,r:0.5 g:0.5 b:0,那么就是军绿色

4、UI-EmojiFont.shader

Shader文件夹中是一个UI-EmojiFont.shadershader代码见Demo工程。

5、材质球

Material文件夹中是一个材质球。

材质球使用上的shader脚本,设置Emoji Texture为表情图集,设置Emoji Data

因为生成的图集的每一行是4个表情,所以设置Emoji count of every line为4,FrameSpeed是每秒播放序列帧数量,设置为4差不多。

四、测试

Canvas子节点下创建一个空物体,挂上EmojiText脚本(脚本代码参加Demo工程)。
设置Material为上面的材质球,Text输入文本,要显示表情,则以[数字]的形式显示。

具体数字表示哪个表情,就是上文说的生成的那个emoji.txt中的key

运行效果如下:


我们可以看到,只需要2个批次即可,效果还是不错的。

五、结束语

完毕。
喜欢Unity的同学,不要忘记点击关注,如果有什么Unity相关的技术难题,也欢迎留言或私信~

【游戏开发实战】Unity UGUI Text图文混排(聊天文字混表情),支持动态表情,出招吧表情帝相关推荐

  1. 【游戏开发实战】用Go语言写一个服务器,实现与Unity客户端通信(Golang | Unity | Socket | 通信 | 教程 | 附工程源码)

    文章目录 一.前言 二.Go开发环境搭建(Windows系统) 1.安装Go命令行工具 2.创建GoWorkspace目录 3.配置GOPATH环境变量 4.配置GOPROXY代理 5.安装VSCod ...

  2. 【游戏开发实战】Unity从零开发多人视频聊天功能,无聊了就和自己视频聊天(附源码 | Mirror | 多人视频 | 详细教程)

    文章目录 一.前言 二.思考问题与解决方案 1.思考问题 2.解决方案 2.1.Unity中如何开启摄像头并对图像进行采样 2.2.图像如何中转给其他客户端 2.3.如何实现清晰度切换 2.4.客户端 ...

  3. 【游戏开发实战】Unity手游第一人称视角,双摇杆控制,FPS射击游戏Demo(教程 | 含Demo工程源码)

    文章目录 一.前言 二.实现方案 1.无主之地,第一人称视角 2.我之前做的摇杆控制 3.第一人称视角 + 摇杆控制 三.开始实战 1.资源获取:Unity AssetStore 2.Low Poly ...

  4. 《Unity 5.x游戏开发实战》一1.9 添加一个水平面

    本节书摘来异步社区<Unity 5.x游戏开发实战>一书中的第1章,第1.9节,作者: Alan Thorn 译者: 李华峰 责编: 胡俊英,更多章节内容可以访问云栖社区"异步社 ...

  5. 【Unity】动作游戏开发实战详细分析-07-连续技与组合技功能设计

    [Unity]动作游戏开发实战详细分析-07-连续技与组合技功能设计 基本思路 在一些动作游戏中,存在着连续技这一功能,具体来说就是连续按下规定的按键会触发能力的功能,或者是长按触发等等. 实现解析 ...

  6. 《Unity 2D与3D手机游戏开发实战》简介

    #好书推荐##好书奇遇季#<Unity 2D与3D手机游戏开发实战>,京东当当天猫都有发售.彩色印制,定价89元,网店打折销售更便宜.本书配套源码.PPT课件,适合Unity游戏开发初学者 ...

  7. 【Unity】动作游戏开发实战详细分析-16-敌人AI设计

    [Unity]动作游戏开发实战详细分析-16-敌人AI设计 基本思想 本文来实现简单的敌人AI,使用协程来开发AI.如果想要使用行为树插件可自行学习使用. 代码实现 敌人的目标信息结构 用于存储所有的 ...

  8. 【游戏开发实战】教你在Unity中实现模型消融化为灰烬飘散的效果(ShaderGraph | 消融 | 粒子系统 | 特效)

    文章目录 一.前言 二.ShaderGraph环境准备 三.模型准备:原神角色模型 四.实现思路 1.效果一的实现思路 2.效果二的实现思路 五.ShaderGraph具体实现 1.效果一 1.1.创 ...

  9. 【Unity】动作游戏开发实战详细分析-06-技能系统设计

    [Unity]动作游戏开发实战详细分析-06-技能系统设计 基本思想 不同的技能可以设计为技能模版,当角色释放技能时,会通过模版ID将它进行实例化,这个实例技能类可以是一个挂载的MonoBehavio ...

最新文章

  1. Ubuntn删除软件
  2. java common.lang_Java 开源工具 Apache Common Lang
  3. 夜宵虽好,可不要贪“杯”哦
  4. python中dir用法_Python内置函数dir详解
  5. 201671010144 2016-2017 《java程序设计》--对象与类!
  6. 解决交通拥堵、监测核辐射、野外搜救…无人机将有哪些神应用?
  7. rtsp直接转http fmp4
  8. table中添加下拉框
  9. IE发现新的零日攻击漏洞 用户可采取缓解措施
  10. 佳能ts9020墨盒不识别_佳能打印机哪一款性价比高 佳能打印机型号推荐【详解】...
  11. ODBC连接达梦数据库配置
  12. 移远M26实现短信接收
  13. origin画图畸变
  14. 【云原生之Docker实战】使用docker部署DokuWiki知识库系统
  15. 揭秘可变剪切研究的本质
  16. 科技服务:当共享单车成为免费使用
  17. 【NodeJs-5天学习】第三天实战篇③ ——基于MQTT的环境温度检测
  18. 谈谈结果导向的做事方式
  19. 了解.net框架 MonoRail
  20. Zhong__Linux系统安装MongoDB数据库

热门文章

  1. java计算机毕业设计老鹳窝旅游网源码+系统+数据库+lw文档+mybatis+运行部署
  2. java 获取上市公司基本信息 代码测试
  3. 金山WPS:云端协同 AI赋能 WPS树起了Office新四大件|企服三会系列报道
  4. 插画怎么构图?小白快速上手教程
  5. Odrive_0.5.5运行代码分析_(三)_GPIO详解
  6. 一个统计Word文档中行数的VBA例程
  7. lv双肩包尺寸对照表_lv双肩包mini尺寸对照表
  8. 怎样做一个企业网站建设规划书?
  9. Unity3D for VR 学习(1): 又一个新玩具 暴风魔镜 4(Android)
  10. Django Admin 上传多张图片并显示缩略图