您好,欢迎来到Unity之家!   unity.jb51.net 
  • 首 页
  • 你问我答
  • 当前位置:首页 > 程序开发 > 开发经验 >
    Unity3D使用和优化心得
    时间:2015-02-13 09:34 来源:互联网 作者:网络 浏览:收藏 挑错 推荐 打印

    Unity3D使用和优化心得


    有两段代码,循环执行两个比较耗时的方法,假设语言和编译器相同,哪一段会比较快? 
    for (int i = 0; i < 100; i++) 

        DoSomethingA(); 
        DoSomethingB(); 

    和 
    for (int i = 0; i < 100; i++) 
        DoSomethingA(); 
    for (int i = 0; i < 100; i++) 
        DoSomethingB(); 

    第一眼看起来认为第一段更快点。但实际上是第二段快。原因如下: 
    在这里性能的瓶颈不是循环本身。而是里面的方法。 
    如果重复执行一个方法,那么CPU的寄存器、一级、二级缓存都很容易命中,比起到内存拿数据快多了。 
    如果执行完一个执行另一个,那么缓存很可能就被替换掉了,只能到内存拿,甚至内存不够,要到硬盘上的虚拟内存拿。 

    缓存组件查找

    这种优化需要一些代码并且不是总有必要。但是如果你的代码真的很大,并且你需要尽可能的性能提升,它会是很好的优化。 

    当你通过GetComponent获取一个组件或一个变量时,Unity必须从游戏物体里找到正确的组件。这时你便能通过一个缓存组件引用到一个私有变量。 
    将: 

    void Update () { 
        transform.Translate(new Vector3(0, 0, 5)); 


    转换为: 
    private Transform myTransform ; 
    void Awake () { 
        myTransform = transform; 


    void Update () { 
        myTransform.Translate(new Vector3(0, 0, 5)); 


    后面的代码运行较快,因为Unity不用在每一帧寻找变换组件。同样,支持脚本组件。你可以使用GetComponent获取组件或其他快捷属性。 


    渲染 

    一个Mesh 建议使用的面数在1500~4000 之间。 
    一个 Mesh 建议只用一个 Material。 
    注意:两个Mesh结合成一个Mesh,但是却使用两个Material,并不会提高效能。 
    如果要提高效能必须把这两个Mesh的Material也合并成一个。 
    换句话说,一个Mesh使用多个Material 和一个Material 使用多个render,其实耗能是差不多的。 
    所以,尽可能的让物件共用相同的Texture 才是提升效能的根本之道。 

    把物体设为static可以提高渲染效率,缺点是不能使用动态uv使用



    (责任编辑:雷霆风)
    免责声明:Unity之家部分内容来源于互联网,如有侵权,请联系我们,本站将立即进行处理。