关于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的引用缓存起来而不是用到的时候再调,这一点可以参考这个