Unity-EmojiUI更新

2023-05-16

    项目中可能会用到emoji表情,所以这几天针对这个模块进行了制作和整理。

    首先,在网上进行简单的搜索查找现成方案,主要搜索结果为textmeshpro和github上的一些emoji项目,因为闭源的关系,这里先跳过textmeshpro(暂时不想反编译╮(╯▽╰)╭)。所以目标定为github上的emoji项目,看到了这个项目:https://github.com/coding2233/TextInlineSprite。看到了上面的示意图片,感觉基本够了,so下载下来看了看,运行了example,觉得基本也差不多,然后依赖文件不多,非常轻量,遂决定查看下代码,然后可怕的事情就发生了~:

    在代码中我发现了这个:


大哥 - -,这么多foreach 你让低版本的unity开发者用了怎么玩啊,,然后清空的previousdata的时候每次new一个,而不循环复用?,那你gc可真的是很棒棒哟。。

Next:


每次都new新对象,搞个pool不是更好?还有坐标系转换的一些问题,这里也不做阐述,类似的性能问题非常严重。。代码结构问题也就不说了。。

    所以直接使用它的代码是我所不能接受的,所以改!

    然而改代码就需要理解原作者的思路,并没有看他的博客什么的,从源代码进行分析,思路如下:使用richtext中的quad为表情占位(这里使用预先生成好的spriteasset中存的数据信息),然后使用spritegraphic来渲染,渲染方式则是创建mesh,刷新verts,uv,triangle信息,通过调用canvasrender的接口进行渲染(注意这里并不是常规渲染方案)。基本思路明确之后进行了代码重构和优化:

    放出目前的小结果:https://github.com/cjsjy123/TextInlineSprite(从原始项目fork的项目,已经提交一个小版本给主分支,如果持续不接受,可能我会新开个项目,同时更新这个链接,存放这些代码 - -原始项目并没有开源证书信息。)

    后续版本更新思路如下:

    1.放弃richtext的quad占位思路,不用richtext,直接缓存一个空格的vert信息,使用多空格的方式代替quad占位。

    2.目前渲染方式为两种:unit和group:unit为在每个inlinetext对象下存放渲染体,来渲染emoji,group则是将同图集的emoji放置在一个渲染体中渲染。但是这里就是需要深度思考的地方了,优化!culling!mask类型的组件,要么使用cull接口要么使用stencil,来剔除超出范围的ui,但是渲染体中拿到是整个mesh,需要对culling和ui是否超出屏幕进行判断,然后进行剔除。这里并没有想到一个特别完善和方便的方案,最初设想是将一个canvas下一组渲染体就足够了,但是由于mask等一些组件的存在,必须进行调整,至于我说的culling问题,目前暂时可以通过将inlinemanager挂在mask类型组件之下进行解决,让mask帮我们进行culling。如果你有好的想法,欢迎讨论。

    最终我们和大boss :textmeshpro进行比较:

    比较结果也在这里:https://github.com/cjsjy123/TextInlineSprite

    ╮(╯▽╰)╭ Over

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity-EmojiUI更新 的相关文章

  • 【Unity2d】带你制作一款类似于金山打字的小游戏

    博主大概08年开始接触电脑游戏 当时玩的是我哥的电脑 那时候家里没网 只可以玩电脑上自带的单机游戏 比如扫雷 蜘蛛纸牌等等 当然还有红色警戒 冰封王座 星际争霸 帝国崛起等等 这些大概是我哥当时在大学下载的 也是那个时候对游戏充满了兴趣 记
  • Unity用Vuforia做AR实现脱卡效果

    有时在识别目标丢失后我们仍希望虚拟物体能够出现在摄像机前 或者到一个特定的位置 我们能对其进行操作 这就是脱卡功能 自带的脱卡功能应该是ExtendedTracking 允许模型在识别图丢失的时候还存在 位置不变 在丢失的时候的位置 这样也
  • Unity—UGUI

    每日一句 读数 学习 去更远的地方 才能摆脱那些你不屑一顾的圈子 目录 InputFiled输入框 例 用户名和密码 Toggle组件 案例 冷却效果 InputFiled输入框 Text Component 输入文本组件 Text输入内容
  • unity game界面按下play会不断闪烁,按下暂停键(pause)或者中止/下一步(step),game界面的画面会接连变化

    没找到答案 改了两个下午的程序 改完还是这样 后来发现是FixedUpdate Update与OnDrawGizmos的问题 OnDrawGizmos是每帧都会绘制 用FixedUpdate理所当然就那啥了 分析的时候 就突然想到是不是这俩
  • Unity WebGL错误集锦

    ips 0 Unity的PlayerSettings的otherSettings或者Publish Settings里面的Enable Exceptions里面选择Full StackTrace 可以在打出的包中的浏览器的webgl打印出错
  • 蒙特卡洛积分、重要性采样、低差异序列

    渲染公式 渲染的目标在于计算周围环境的光线有多少从表面像素点反射到相机视口中 要计算总的反射光 每个入射方向的贡献 必须将他们在半球上相加 为入射光线 与法线 的夹角 为方便计算可以使用法线向量和入射向量 单位化 的乘积表示 对于基于图像的
  • 【Unity&C#&随机数】随机数

    一个简单的随机数获得 0或1 使用了这样的代码 想要获得0或者1 if Input anyKeyDown float i 1 if i 1 i Random Range 0 Rang i i lt 0 5 0 1 Debug Log Cou
  • Unity动画系统详解

    目录 动画编辑器 编辑器面板 动画复用 前言 人形重定向动画 Humanoid 通用动画 Generic 旧版本动画 Legacy 动画控制器 系统状态 切换条件 状态机脚本 IK动画 反向动力学 BlendTree 混合树 Animato
  • UnityVR--组件3--Line Renderer--线性渲染

    目录 线性渲染组件简介 绘制线条Line Renderer组件介绍 绘制拖尾Trail Renderer组件介绍 应用1 使用Line Renderer绘制线段 应用1实现 使用系统工具或自定义工具绘制线段 应用2 Trail Render
  • unity中创建询问弹出窗口

    在开发过程中进程会遇到需要弹出一个窗口询问用户是否进行的操作 今天就来制作一个这样弹出窗口 然后根据弹出窗口的选择内容不同进行不同的操作 本例中主要是为了删除一个数据 而在删除数据操作前需要得到用户的一个确认操作 这里面主要用到了Notif
  • unity3d大型互动照片墙

    1 本次应客户需求 制作一个大型照片墙互动 输出分辨率为9600 4320 注 unity3d官方推荐最大分辨率为8192 3686 4 经过现场长达24小时暴力测试中途未发生问题 姑且判定可以达到正常标准 废话不多说 先上效果 unity
  • unity: C#的Action Event Delegate的异同

    目录 一 Action 二 Event 三 Action和Event区别 四 Delegate 总结 Action Event Delegate的异同 前言 Action Event和Delegate都是C 语言中的重要概念 分别用于管理函
  • VLC for unity 插件如何使用

    VLC for unity 插件如何使用 先去下载一个VLC播放器 安装完成后 然后导入插件链接https download csdn net my 这个插件我的另一个上传资源里有 或者到商店去下载 这个插件链接下载完是一个txt文档 里面
  • unity实现鼠标右键控制视角

    主要实现的功能是相机跟随主角 鼠标右击移动后 相机的视角会旋转 思路 在主角里创建空的子物体 把相机绑在空物体上 通过旋转空物体来实现视角的旋转 要把相机调整到适当位置 代码如下 public float rotateSpeed 100 设
  • 【Unity步步升】监控与检测物体的各种方案,如:射线、碰撞、挂载等...

    在制作AR模型数值控制方案的时候遇到了检测的问题 学习过程受益匪浅 故今天为大家整理带来一篇监控与检测物体的参考方案集合 目录 一 射线检测 二 物体存在检测 三 碰撞检测 一 射线检测 单射线检测 首先完成搭建场景如下图1 1 我这里用到
  • Unity旋转以及万向锁问题

    我之前研读了一些关于unity旋转相关的博客 一直想抽个时间写个总结 但是由于实习太忙一直没有写 趁着今天请了假晚上有时间把这段时间一些学习心得写出来 Unity inspector面板中的Rotation 在unity中 想必大家最先接触
  • unity小球跟随音乐节奏放大缩小和改变颜色

    放在小球身上 设置对应组件即可 using System Collections using System Collections Generic using Unity VisualScripting using UnityEngine
  • 【Unity】运行时创建曲线(贝塞尔的运用)

    Unity 运行时创建线 贝塞尔的运用 1 实现的目标 在运行状态下创建一条可以使用贝塞尔方法实时编辑的网格曲线 2 原理介绍 2 1 曲线的创建 unity建立网格曲线可以参考 Unity程序化网格体 的实现方法 主要分为顶点 三角面 U
  • Unity学习笔记

    一 旋转欧拉角 四元数 Vector3 rotate new Vector3 0 30 0 Quaternion quaternion Quaternion identity quaternion Quaternion Euler rota
  • 游戏开发常用实践操作之按动任意键触发

    接下来一些笔记会对于一些大大小小的实践操作进行记录 希望对你有所帮助 在游戏中 我们经常会遇到一些按动任意键触发的操作 接下来展示核心代码 以下是对于Unity中的操作 使用的UI是NGUI 对于核心操作没有影响 你可以自己置换 void

随机推荐

  • 最全面的shsh备份及恢复教程,已更新Win版小雨伞4.33.00

    转自 xff1a http bbs weiphone com read htm tid 2017752 html 很多小白不知道如何备份shsh xff0c 论坛有很多关于备份shsh的帖子 xff0c 但大多都不全面 xff0c 本贴把s
  • C++查看大端序小端序的一些思考

    首先明确一个概念 xff0c 无论是大段序还是小端序 类型指针指向的地址都是该类型所占内存的低地址 明确了这个 xff0c 就好判断大端序和小端序了 这是大端序小端序的介绍链接 下边的是验证系统是大端序还是小端序的程序 span class
  • 设计模式书籍推荐

    1 名称 xff1a Head First Design Patterns 语言 xff1a java 评论 xff1a Jolt大奖得主 xff0c 介绍了常见的十几种模式 我认为最好的模式入门书籍 xff0c 内容生动 xff0c 风格
  • C#如何调用linux so库

    testlib c中的内容 xff1a include lt stdio h gt int sum int a int b return a 43 b int minus int a int b return a b main cs中的内容
  • 电机KV值

    电机 KV 值 xff1a 电机的转速 xff08 空载 xff09 61 KV 值 X 电压 xff1b 例如 KV1000 的电机在 10V 电压下它的转速 xff08 空载 xff09 就是 10000 转 分钟 电机的 KV 值越高
  • 用DD命令制作硬盘镜像

    用DD命令制作硬盘镜像 本文参考http serverfault com questions 4906 using dd for disk cloning写出 xff0c 转载时请说明出处 以下的说明都是针对备份整个硬盘 xff0c 而不是
  • 什么是PID 算法

    PID是工业控制上的一种控制算法 xff0c 其中P表示比例 xff0c I表示积分 xff0c D表示微分 以温度控制的PID程序为例 xff1a P xff08 比例 xff09 表示在温度设定值上下多少度的范围内做比例动作 xff0c
  • html代码向左居右对齐

    刚才居然忘了 现在写出来 lt div align 61 right gt 居右对齐 lt div gt left左 xff0c center中 xff0c right右
  • 出现java.lang.IllegalArgumentException: No configs match configSpec

    模拟器不支持OpenGL ES 2 0 是因为android模拟器不支持OpenGL ES 2 0 xff0c 解决办法 xff1a 创建模拟器时 xff1a GPU emulation选yes xff0c 需要android 4 0以上的
  • [005] [ARM-Cortex-M3/4] 大小端存储

  • Android使用java调用C的方法

    Android使用java调用C的方法 xff1a 要将C语言写的算法需要集成到安卓端 xff0c 因此学习如何从安卓java调用C JNI 1 JNI 提示 Android NDK Android Developers google cn
  • STM32之USART-串口通信(含串口实验详细解析)

    STM32之串口通信 USART xff08 含串口实验详细解析 xff09 开发环境 xff1a Window 10开发工具 xff1a Keil uVision5 MDK硬件 xff1a STM32F103 资料参考 xff1a 正点原
  • 昆仑镜Air530 GPS串口输出

    原理图 Air724UG硬件手册说明 Air724UG模块硬件手册 实际开机后并不是默认打开 pmd手册 LDO VMMC level范围0 15 其中0表示关闭其余值满足下面公式 step 61 9 level 当step大于127时为1
  • 常用bat代码

    清除空文件夹 清理空文件夹 删除空文件夹 64 echo off for f 34 tokens 61 34 i in 39 dir s b ad sort r 39 do rd 34 i 34
  • 如何快速的翻译并阅读外文文献

    本文适用一些想要快速了解文献内容的童鞋 在进行查找文献时 不可避免要查找外文文献 其中以英文居多 当然也有可能涉及到其他语言 像楼主这样学了十几年英语 然而听说读写弱鸡的人 面对英语时 会头痛 要是查到其他语言的文献时 估计要死的心都有了
  • [c/c++ ]字节序与大小端转换

    注明 xff1a 以下内容均为学习内容整理 xff0c 记录 xff0c 便于自己学习 xff0c 并非完全意义上的自产 xff0c 如有感到不适 xff0c 请联系我 一 多字节值及字节序 1 brief 现在有一个数字 65430 xf
  • 5V升压8.4V芯片电路图,5V充电7.4V电池

    两节锂电池串联 xff0c 串联电压相加 xff0c 一般锂电池标称电压3 7V xff0c 3 7V 43 3 7V 61 7 4V xff0c 7 4V锂电池 xff0c 充电充满电压饱和是8 4V 7 4V锂电池放电电压一般是6V 8
  • 浅谈资源加载 -AssetBundleSystem

    AssetBundleSystem Ps 稍微抽点时间写一下这个 xff0c 这个小项目完成度80 左右 xff0c 在年初2月份的时候就完成的差不多了 xff0c 因为各种原因处于半搁浅的阶段 xff0c 现在官方出了Addressabl
  • 地形转网格工具(Terrain2Mesh)

    在游戏开发的制作中可能需要制作地形 xff0c 需要制作的相关的地形工具 xff0c 绝大部分情况下并不会使用unity的terrain xff0c 因为其在移动平台上的表现很差 xff0c 相同顶点甚至更多的mesh性能也比其优秀很多 x
  • Unity-EmojiUI更新

    项目中可能会用到emoji表情 xff0c 所以这几天针对这个模块进行了制作和整理 首先 xff0c 在网上进行简单的搜索查找现成方案 xff0c 主要搜索结果为textmeshpro和github上的一些emoji项目 xff0c 因为闭