美文网首页
U3D优化tips

U3D优化tips

作者: 此年此景 | 来源:发表于2017-04-22 18:43 被阅读0次

    关于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)处所实现的代码:

     /// <summary>
        /// 移进移出显示/隐藏
        /// </summary>
        /// <param name="trans">camera所在层级的panel.transform</param>
        /// <param name="go">被操作的物体</param>
        /// <param name="activeFlag">显示/隐藏</param>
        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

          本文链接:https://www.haomeiwen.com/subject/azvszttx.html