U3D优化tips

关于unity的log网上也有很多介绍,下面的只是使用的一点心得:

using UnityEngine;
using System.Collections;

public class TestLogger : MonoBehaviour {

    public static int Test()
    {
        Debug.Log("t");
        return 1;
    }
    public static void Log1(int o)
    {
        #if TestLog
        Debug.Log(o);
        #endif
    }
    [System.Diagnostics.Conditional("TestLog")]
    public static void Log2(int o)
    {
        Debug.Log(o);
    }
    void Start () {
        Log1(Test());
        Log2(Test());
    }   
}

如果宏定义中加了TestLog,那么会输出两遍t和1,如果不加宏定义那么Log1执行时会输出一次t,而Log2不会执行,这就是Conditional的好处。
还有一个是关于移进移出Camera视域来达到隐藏显示效果,下面是我在Camera为正交相机size为1且Camera在panel的(0,0,0)处所实现的代码:

 /// 
    /// 移进移出显示/隐藏
    /// 
    /// camera所在层级的panel.transform
    /// 被操作的物体
    /// 显示/隐藏
    public static void ChangeActive(Transform trans,GameObject go,bool activeFlag)
    {
        if (!go.activeSelf)
        {
            go.SetActive(true);
        }
        float distance = Math.Abs(trans.position.x-go.transform.position.x);
        if (distance<=Screen.width)
        {
            go.transform.position += new Vector3(Screen.width, 0, 0);
        }
        else
        {
            go.transform.position -= new Vector3(Screen.width, 0, 0);
        }
    }

虽然达到了效果,但是被大佬教育了,不同的坐标系混用,而且不通用,应该用viewport的位置,Camera有一些函数screenpointtoray之类的,要把Screen坐标转到World的,了解一些3D空间:模型空间、世界空间、投影空间、屏幕空间,看来以后得多学习一些图形学基础知识了==
  还有一点就是通常把GetComponent的引用缓存起来而不是用到的时候再调,这一点可以参考这个

你可能感兴趣的:(U3D优化tips)