Unity引擎一些不容易發現的小技巧
1. transform可以直接遍歷
之前我只知道可以通過GetChild來遍歷tranform,但不知道可以直接遍歷。
// 通過GetChild遍歷
for (var i = 0; i < transform.childCount; ++i) {
var child = transform.GetChild(i);
Debug.Log(child.name);
}
// 直接遍歷,更方便
foreach (var child in transform) {
Debug.Log(child.name);
}
2. 延遲Destroy
但簡單實用的技巧,一直沒有發現。。
// 延遲2秒Destroy
GameObject.Destroy(gameObject, 2f);
3. 讓SceneView的鏡頭跟蹤指定GameObject
在運行時選中一個GameObject,按f可以讓SceneView的鏡頭聚焦到這個GameObject,再按2下f可以讓SceneView的鏡頭一直跟蹤它。
這個技巧我在Unity2019.2.6裏測試失敗了,可能已經不支持了,大家可以試下自己的版本支不支持。
4. Layer的名字也支持用/分割。
如Actor/Monster,會顯示如下:
5. Inspector裏的數字框支持輸入數學表達式
如在transform的Position裏輸入1+1,按回車後會自動變成2。
6. 同時查看2個GameObject的Inspector
點擊Inspector右上角的?可以鎖定Inspector,這時再選中其他物體,Inspector也不會改變。
同時可以打開一個新的沒鎖定的Inspector(通過?右邊的小按鈕),這樣就可以同時打開2個不同GameObject的Inspector,對比着修改參數。
7. Debug.Log可以加上一個Object的參數,這樣打印出來的log點擊後會高亮這個Object。
Debug.Log("pos = " + transform.position, gameObject);
點擊這條log,Hierarchy界面裏對應的gameObject會高亮一下。這樣就能很清晰地知道是哪個GameObject打印的log。
8. 通過AnimationCurve來顯示一個不停改變的值的曲線。
有時我們會在Update裏打印一個數值,來持續觀察這個數值的改變。不過這樣會導致Console界面裏的log太多,而且不容易觀看。
這時可以創建一個AnimationCurve的成員變量,每次將新的值添加到這個變量中,這樣就可以在Inspector裏查看這個值改變的曲線。
public class ExampleScript : MonoBehaviour
{
public AnimationCurve plot = new AnimationCurve();
void Update()
{
var val = Mathf.Sin(Time.time);
plot.AddKey(Time.realtimeSinceStartup, val);
}
}