【问题标题】:Updating a scene in Unity with a script from Edit Mode使用编辑模式中的脚本更新 Unity 中的场景
【发布时间】:2021-06-27 15:42:30
【问题描述】:

我正在尝试将相同的组件添加到 Unity 场景中的不同游戏对象。为了让它更快,我正在尝试编写一个脚本来为游戏对象列表执行此操作,例如 (enemy1, enemy2, enemy3...)。

我知道添加一个名为 Enemy 的脚本我会这样做:

gameObject.AddComponent<Enemy>();

但问题是一旦我停止播放模式,组件就消失了。有没有办法做到这一点?

【问题讨论】:

    标签: c# unity3d


    【解决方案1】:

    您可以通过按住ctrl直接从层次结构中选择所有游戏对象(您提到的敌人列表),然后在检查器中将脚本Enemy添加到所有对象中。

    但是,如果您想使用脚本来执行此操作,可以在播放模式之外执行,您需要在脚本前添加ExecuteInEditMode,如下所示:

    [ExecuteInEditMode]
    public class TriggerEdit : MonoBehaviour
    {
        // List of GameObjects
        String[] enemyList = {"enemy1", "enemy2", "enemy3"};
        
        void OnEnable()
        {
            foreach(String enemy in enemyList){
                go = GameObject.Find(enemy);
                go.AddComponent<Enemy>();
            }
        }
    }
    

    然后您需要将该脚本添加到场景中的任何游戏对象。每次要触发脚本时,只需在编辑器中禁用和启用脚本TriggerEdit

    这种方法的一个问题是,每次启用脚本时,它都会添加一个新组件,如果游戏对象中已经存在Enemy 类型的组件,那么您最终可能会得到很多@ 987654329@ 组件。您可以尝试在添加任何新内容之前清理场景中的所有Enemy 组件。例如:

    object[] enemiesToDelete = GameObject.FindObjectsOfType<Enemy>();
    
    foreach(UnityEngine.Object enemyComponent in enemiesToDelete)
    {
        DestroyImmediate(enemyComponent);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-21
      • 2020-09-02
      • 2023-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多