unity老猿随笔

下面是我最近开始整理的一些unity的基础知识和疑难杂症,如果大家有什么可以分享出来的经验,可以评论区留言,验证后整理进来,全猿学习!如果有不对的地方,也欢迎指正,避免误人子弟!

  1. lua调用c#的过程有什么性能问题?
    lua中调用c#代码,需要先将c#调用对象映射到lua中,过程中需要创建元表,索引以存储c#类的信息
    如果频繁调用方法,需要考虑缓存方式,避免重复映射
  2. UGUI优化
    图集
    动静分离
    动态合批,避免深度嵌套,频繁改变UI元素的属性,布局等
    如果有对象需要频繁显示隐藏,可以考虑通过CanvasGroup控制,不要使用SetActive方法,会触发内存回收问题
  3. AssetBundle和Addressable的区别?
    Addressable是对AssetBundle的封装,是一种资源管理系统,可以更方便、灵活的管理资源,支持异步加载和远程加载
  4. 多个物体使用同一个材质球,当运行时改变其中一个材质的属性,会发生什么?
    正常情况下,通过修改material的属性,会导致当前物体的材质会被克隆出一份,以避免影响其它物体的,这个时候可以看到当前物体的材质后面多了(Instance)标签
    如果是通过sharedMaterial修改材质属性,那么所有共用当前材质的物体都会收到影响
  5. protobuf是如何优化数据量的?
    通过protobuf序列化后的数据,原有数据中的对象名和类型信息会存储到.proto文件中,值会序列化成二级制格式
  6. 工程中的贴图或模型为什么要取消勾选Read/Write?
    Unity中的贴图资源默认情况下其数据存储在显存中,供GPU访问和渲染使用。当贴图设置了Read/Write Enabled属性后,Unity会额外在系统内存中保留一份该贴图的副本,以便CPU可以读取和写入贴图数据。这是因为GPU通常有自己的内存空间(显存),CPU并不能直接访问显存中的数据;而如果要在脚本中修改贴图内容(比如动态生成纹理或使用Compute Shader进行计算写回),就需要这份位于系统内存中的可读写的备份。
  7. ios里关于使用泛型报错的问题?
    AOT(Ahead-of-Time)编译的限制导致的。iOS 不支持 JIT(Just-In-Time)编译,因此需要在编译时生成所有可能的代码路径。
    举例:
css 复制代码
public class DataProcessor
{
    public T ProcessData<T>(T data)
    {
        // 处理数据的逻辑
        Debug.Log($"Processing data of type {typeof(T)}: {data}");
        return data;
    }
}
public class App : MonoBehaviour
{
    void Start()
    {
        var processor = new DataProcessor();
        
        // 正常使用泛型方法
        int result1 = processor.ProcessData<int>(456);
        string result2 = processor.ProcessData<string>("Goodbye, World!");

        Debug.Log($"Result 1: {result1}");
        Debug.Log($"Result 2: {result2}");
    }
}

执行时会报错,为了确保 AOT 编译器生成所有需要的泛型方法实例化版本,我们需要在初始化时显式调用这些方法。

css 复制代码
public class Initialization
{
    public static void Initialize()
    {
        var processor = new DataProcessor();

        // 显式实例化所有可能的泛型类型
        processor.ProcessData<int>(123);
        processor.ProcessData<string>("Hello, World!");
        processor.ProcessData<float>(3.14f);
        processor.ProcessData<double>(3.141592653589793);
        // 根据需要添加更多类型
    }
}
  1. ...
相关推荐
WarPigs14 分钟前
Unity光照笔记
笔记·unity·游戏引擎
gameatp4 小时前
UE RPG游戏开发练手 第二十六课 普通攻击1
游戏引擎·虚幻
神码编程4 小时前
【Unity】 HTFramework框架(六十五)ScrollList滚动数据列表
unity·游戏引擎·ugui
DanmF--5 小时前
Protobuf工具
网络·unity·游戏引擎·游戏程序
敲代码的 蜡笔小新8 小时前
【行为型之迭代器模式】游戏开发实战——Unity高效集合遍历与场景管理的架构精髓
unity·设计模式·c#·迭代器模式
Magnum Lehar21 小时前
3d游戏引擎的math矩阵实现
线性代数·矩阵·游戏引擎
虾球xz1 天前
游戏引擎学习第282天:Z轴移动与摄像机运动
c++·学习·游戏引擎
飞起的猪1 天前
【虚幻引擎】UE5独立游戏开发全流程(商业级架构)
ue5·游戏引擎·游戏开发·虚幻·独立开发·游戏设计·引擎架构
敲代码的 蜡笔小新1 天前
【行为型之命令模式】游戏开发实战——Unity可撤销系统与高级输入管理的架构秘钥
unity·设计模式·架构·命令模式
Tech Synapse1 天前
数字孪生工厂实战指南:基于Unreal Engine/Omniverse的虚实同步系统开发
游戏引擎·linq·虚幻