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);
    }
}
相关推荐
开发游戏的老王13 小时前
虚幻引擎虚拟制片入门教程目录
游戏引擎·虚幻
lanhuazui1014 小时前
【Vscode】显示多个文件 & 打开多个文件时实现标签栏多行显示
vscode·编辑器
future_studio17 小时前
聊聊 Unity(小白专享、C# 小程序 之 自动更新)
unity·小程序·c#
心疼你的一切17 小时前
Unity开发利器:ScriptableObject的数据容器设计与内存优化原理
microsoft·unity·c#·游戏引擎
至善迎风18 小时前
将跨平台框架或游戏引擎开发的 Windows 应用上架 Microsoft Store
windows·microsoft·游戏引擎
worxfr18 小时前
小游戏引擎架构设计案例分析
游戏引擎
Cool-浩1 天前
【征文计划】Rokid 语音指令开发教程 【包含工程源码 和体验包APK】
unity·ar·语音识别·rokid·语音指令
Brianna Home2 天前
从零到一:用Godot打造2D游戏《丛林探险》
算法·游戏·性能优化·游戏引擎·bug·godot·动画
郭逍遥2 天前
[Godot] C#简单实现2D节点图生成
游戏引擎·godot
小剑修2 天前
2025.10.18 复习
unity