我们有时候可能需要在面板增加一些引用,可能添加脚本后要手动拖动,这样如果有大量的脚本拖动也是不小的工作量
实例
例如:我的脚本需要添加一个Bone的列表,一个个拖动很麻烦。
实现脚本
我们可以用这样的脚本来实现。
public class FingerDyBone : MonoBehaviour
{
public DynamicBoneCollider[] boneArray = null;
#if UNITY_EDITOR
[ContextMenu("加入所有碰撞体")]
private void MenuAddBone()
{
boneArray = GetComponentsInChildren<DynamicBoneCollider>();
UnityEditor.EditorUtility.SetDirty(this);
}
void OnValidate()
{
Debug.Log("OnValidate");
if (boneArray == null) MenuAddBone();
}
#endif
}
ContextMenu是菜单,添加这个可以手动调用函数。
如果手动麻烦还可以自动添加,那么可以借助OnValidate函数,在添加脚本或者改变属性的时候会自动执行。解决这个原理就可以在添加脚本的时候自动添加。
最终效果
那么这样就比较事半功倍了。
调试显示
我们还可以通过OnDrawGizmos显示一些常用的图形
例如:
通过OnDrawGizmos方法,使用Gizmos画各种图形
void OnDrawGizmos()
{
Transform[] bornPoint = GetComponentsInChildren<Transform>();
for (int i = 0; i < bornPoint.Length; i++)
{
Gizmos.color = Color.yellow;
Gizmos.DrawWireSphere(bornPoint[i].position, 0.15f);
Gizmos.color = Color.white;
Gizmos.DrawLine(bornPoint[i].position, bornPoint[i].position + Vector3.up);
Gizmos.color = Color.blue;
Gizmos.DrawLine(bornPoint[i].position, bornPoint[i].position + Quaternion.Euler(bornPoint[i].eulerAngles) * Vector3.forward * 0.5f);
}
}