c# - 编辑器脚本所附的Unity Access脚本

原文 标签 c# unity3d

我正在为某种类型的组件脚本创建编辑器脚本,我想访问由该编辑器脚本实例引用的特定组件脚本。例如,目标返回编辑器附加到的游戏对象,但我想在其中获取实际的脚本组件。游戏对象可能具有这种类型的多个组件,因此需要获取特定的组件。

[CustomEditor(typeof(CameraCutscene))] //Attaches to the CameraCutscene script
public class CutsceneEditor : Editor
{
    private CameraCutscene cameraCutscene;

    private void OnEnable()
    {
        Debug.Log(target.name);
        cameraCutscene = (CameraCutscene)target; //Attempt to cast to the script type but target returns the actual game object
    }
}

最佳答案

target变量是UnityEditor.Object的类型。要从附加的脚本访问组件,请将UnityEditor.Object强制转换为MonoBehaviour并使用GetComponent函数获取组件。

MonoBehaviour monoBev = (MonoBehaviour)target;
CameraCutscene cameraCutscene = monoBev.GetComponent<CameraCutscene>();



  游戏对象可能具有此类型的多个组件,因此需要
  得到一个具体的。


如果您需要访问附加到相同目标的CameraCutscene脚本的多个实例,请使用GetComponents,它返回附加到目标的组件的数组。注意其中的“ s”。请注意,它们返回的顺序没有记录。

MonoBehaviour monoBev = (MonoBehaviour)target;
CameraCutscene []cameraCutscene = monoBev.GetComponents<CameraCutscene>();

相关文章:

c# - 使用带有偏移量的Raycast命中点移动对象

c# - 在统一C#中更改运行时动画的速度

c# - 处理从数据库返回的空日期

c# - 使用HtmlAgilityPack C#检索特定的URL

c# - MVVM在 View 中动态添加字段

c# - 播放器摄像机瞄准/锁定另一个对象

c# - move 播放器,然后更改场景

c# - 这个nameof()确实是递归调用吗?

c# - 如何将值四舍五入到仅3个小数点?

c# - 名称IEnumerator在当前上下文中不存在