const 与 constexpr
const 与 constexpr 的区别
如下图:
主要是用于区分只读变量和常量
只读变量:运行时确定
常量:编译时确定
性能方面:常量 > 只读变量
常见的常量表达式
字面值(如 42)
用常量表达式初始化的对象
一个对象(或表达式)是否是常量表达式取决于类型和初始值,如下:
12345int i1 = 42; // i1 不是常量表达式:初始值 42 是字面值,但 i1 不是 const / constexpr 类型const int i2 = i1; // i2 不是常量表达式:初始值 i1 不是常量表达式const int i3 = 42; // i3 是常量表达式:用字面值 42 初始化的 const 对象const int i4 = i3 + 1; // i4 是常量表达式:用常量表达式 i3 + 1 初始化的 const 对象const int i5 = getValue(); // 如果 getValue() 是普通函数,则 i5 值要到运行时才能确定,则不是常量表达式。相反,如果 getValue() 是 ...
将纹理批量转换成Json文件
TextureToJson
主要涉及以下知识点:
EditorWindow中如何显示例如List这样的数据结构;
如何正确的使用JsonUtility.ToJson(), 即如何解决输出的Json文件内容为空;
获取纹理的字节数据(Texture => byte[])。
1. EditorWindow中如何显示例如List这样的数据结构123456789101112131415161718public sealed class TextureToJson : EditorWindow{ public List<Texture2D> textures2D = new List<Texture2D>(); SerializedProperty texturesProperty; SerializedObject texturesObject; void OnEnable() { texturesObject = new SerializedObject(this); textu ...
纹理工具
纹理工具前言
Unity Texture 基础
如何正确序列化Texture
Texture(UI)和Sprite(UI)的区别
Texture是一张独立的图片,不依托于任何图集,这张Texture有自己的材质和Shader,每一个Texture都将消耗一个DrawCall去渲染,每一个Texture都将独立进行加载。
Texture作为低层次的图像数据结构,需要考虑的是如何高效地存储和访问像素数据。它需要支持各种图像处理操作和着色器操作,因此其设计更为通用。
Sprite是为2D图形和UI设计的图像类型,提供了丰富的2D图形处理功能,如九宫格切片和填充模式。是Unity为拓展Texture的功能而创造的一种格式。
Sprite作为高层次的2D图形结构,需要支持一系列2D图形特性,如九宫格切片(9-slicing)、动画、多帧处理等。这些特性是为2D渲染和UI优化设计的,使用Sprite可以更高效地进行2D渲染和批处理。
什么时候使用Texture
当图片过大,不适合合成图集的时候,可以使用Texture,此时要尽量的保证图片的宽高是2的N次方(1. 底层图形学只识别2的N次方的图 ...
矩阵快速幂
快速幂
快速幂是一种高效的指数运算方法,通过指数折半或二进制位运算减少计算次数。
如下:快速计算base的power次方
123456789101112131415161718192021222324252627// base:底数,power:指数long long FastPower(int base, int power){ long long result = 1; while (power) { // 表示按位与操作,相当于power % 2 if (power & 1) result *= base; // 右移运算符,相当于 power /= 2 power >>= 1; base *= base; } return result;}// 快速幂取模运算long long FastPower(int base, int power, int model){ long long result = 1 ...
LQA全流程自动化
LQA
LQA测试包括常见的超框,漏译,漏key,以及语义问题,LQA测试涉及游戏所有语种,所有文本,每增加一个语种都会让测试量加倍。此外游戏从翻译,到语义测试都需要专业团队来操作,整体流程非常冗长
而LQA自动化测试方法,无需出多语言包即可自动化,且工作量与多少语种无关。此外还通过自训练模型进行翻译,以及语义测试,将整个LQA从翻译到测试行程完整的研发内自动化闭环。为项目节省了极大的时间成本和经济成本。
LQA全流程自动化游戏本地化测试
游戏LQA(本地化测试)是针对游戏出海场景中出现的超框,漏译,漏Key,翻译错误等问题进行的测试
超框检查
检查项: 翻译后文字过长、个别语种字形问题导致的字体截断、超框、重合
漏译
检查项: 游戏文本中key值缺失,导致文本出现默认文本
语义检查
检查项: 翻译语义是否准确、译文是否符合游戏场景
面临的挑战
多语种,涉及游戏所有文本,动辄几十上百万文字,测试工作量非常庞大,任务工时消耗非常高。
翻译合入通常到版本末期,测试任务时间相对集中,不能达到长期CI运行自动化检测的状态,发现问题相对滞后,经常需要热更发很多翻译问题。
目前 ...
Unity 全局控制 UI 点击事件(拓展:全局控制其它涉及到 EventSystem 的事件(输入、射线投射和发送事件))
全局控制 UI 点击事件
Unity 点击事件都是基于 IPointerClickHandler 接口,凡是实现了该接口的对象都会触发点击事件
1234public interface IPointerClickHandler : IEventSystemHandler{ void OnPointerClick(PointerEventData eventData);}
继续查在哪调用的,从 EventSystem 里面找到了 BaseInputModule
1private BaseInputModule m_CurrentInputModule;
它就是跟 EventSystem 挂载一起的 StandaloneInputModule 继承的基类
然后看 StandaloneInputModule 里面的代码,全局查找 IPointerClickHandler
123456789101112131415161718192021222324252627282930313233private void ReleaseMouse(PointerEven ...