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);
}
}