Unity编辑器功能Inspector快捷自动填充数据和可视化调试

我们有时候可能需要在面板增加一些引用,可能添加脚本后要手动拖动,这样如果有大量的脚本拖动也是不小的工作量

实例

例如:我的脚本需要添加一个Bone的列表,一个个拖动很麻烦。

实现脚本

我们可以用这样的脚本来实现。

csharp 复制代码
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画各种图形

csharp 复制代码
 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);
    }
}
相关推荐
烂蜻蜓7 小时前
Node.js入门教程(二十三):全局对象
node.js·编辑器·vim
_ZHOURUI_H_11 小时前
Unity TCP底层极限拆解:粘包、半包、CRC、序列号、双缓冲到底怎么一起工作的?
网络·网络协议·tcp/ip·游戏·unity·游戏引擎·游戏开发
KindSuper_liu15 小时前
Unity 游戏网络基础:从 TCP、UDP 到 HTTP、TLS 与 Best HTTP
网络·游戏·unity
qq_1702647516 小时前
unity里GameObject和Texture的内存归属
java·unity·游戏引擎
weixin_4046793118 小时前
godot + vscode ai开发
ide·vscode·编辑器·游戏引擎·godot
我一定会有钱18 小时前
vscode system下载安装
ide·vscode·编辑器
2401_858286111 天前
VSCODE远程链接错误: 无法建立链接,过程试图写入的管道不存在的解决方法
ide·vscode·编辑器
一朵好运莲1 天前
Turbo Console Log插件VSCode更改log快捷键教程
ide·vscode·编辑器
还是大剑师兰特1 天前
Unity3D(Unity)完整详细介绍
unity·游戏引擎
ellis19702 天前
u3d插件xLua[七]例6 Coroutine
unity