Unity新手村—開發小技巧記錄(一)
第一篇部落格它來了!學習unity的過程中,總會遇到一些零碎的知識點和技巧,在此整理記錄,方便日後檢視,Unity版本:2018.3.2f1。
因為還是個萌新,如果有寫的不對或不好的地方,敬請諒解。
1.使用RuntimeInitializeOnLoadMethod特性的靜態方法會在場景載入後直接呼叫(這個指令碼不需要掛載到物體上)
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.AfterSceneLoad)] public static void Test() { Debug.Log("start game"); }
2.使用SerializeField將私有變數暴露在檢視面板中,使用HideInInspector特性在檢視面板中隱藏公有變數
[SerializeField] private int PrivateVar; [HideInInspector] public int PublicVar;
3.用以下程式碼獲得一個隨機的布林值
bool x= (Random.value > 0.5f);
4.將動畫的speed屬性設為-1即可倒放動畫
5.如果只是儲存一些變數的話,建議使用結構體而不是類,以減少垃圾回收
6.以下程式碼可以在第一個協程結束時啟動第二個協程
IEnumerator First() { yield return StartCoroutine(Second()); } IEnumerator Second() { yield return 0; }
7.以下程式碼可以讓編輯器暫停,方便除錯
EditorApplication.isPaused = true;
8.可以將資料夾的快捷方式拖入專案,方便開啟
9.使用CompareTag來比較標籤而不是obj.Tag=="player",效率更高
GameObject obj; if (obj.CompareTag("player")) { Debug.Log("Is Player"); }
10.Debug支援一些簡單樣式
Debug.Log("<color=red>Oh!!!</color>");
11.怎麼忽略控制檯警告
先檢視警告中的代號,就是CS之後的數字,這裡是0414,再到指令碼中最上方加上以下程式碼
#pragma warning disable 0414
回到Unity編譯,就不會再彈出警告了
12.不要頻繁使用Camera.main,它其實就是......
Camera.main = GameObject.FindGameObjectWithTag("MainCamera").GetComponent<Camera>();
13.比較距離時不要用Vector3.distance
Vector3.sqrMagnitude用於得到向量長度未開方的值,使用(a - b).sqrMagnitude和距離平方作比較,這樣不用做開方運算,效率更高
Vector3 a; Vector3 b; float distance = 1f; void Update() { if ((a - b).sqrMagnitude < distance * distance) { //todo } }
14.給檢視面板新增一些效果
[Header("等級")]//給變數加上標題文字 public int level; [Space]//空行 [TextArea]//多行輸入框 public string Des; [Range(0,10)]//滑動條 public float Speed=1; [Tooltip("生命值")]//滑鼠移到變數上出現的提示 public int Hp = 100;
15.在專案中搜索同類型資源
在Project檢視上方的搜素欄可以按型別搜尋資源,使用“t:資源型別”,比如t:scene可以搜尋到所有場景,t:script可以搜尋到所有指令碼
還可以在前面加上資源名稱的子字串,比如test t:scene可以搜尋所有名字中帶“test”的場景