首页 > 解决方案 > 从代码检查并创建丢失的游戏对象(不是在游戏过程中)

问题描述

好的。当我打开我的项目时,如果GameObject找不到某个人(或所有人),那么应该自动创建它。例如,我有SceneBuilderasGameObject并且它包含所有必要的脚本:ObjectsGenerator.csPlayerData.cs。如果以某种方式SceneBuilder消失,它必须从代码中恢复。我怎样才能做到这一点?

ps:我发现只有两种方法:

ps:对不起,如果问题已经出现并且我还没有找到它

updated.

谢谢大家。解决了类似的事情

[InitializeOnLoad]
public class Checker : MonoBehaviour
{
    static Checker()
    {
        CheckAndCreateObj();
        EditorApplication.hierarchyChanged += hierarchyChanged;
    }

    private static void hierarchyChanged()
    {
        CheckAndCreateObj();
    }

    private static void CheckAndCreateObj()
    {
        string objName = "OBJECTNAME";
        GameObject go = GameObject.Find(objName);

        if (go == null)
        {
            Instantiate(new GameObject(objName));
        }
    }
}

https://docs.unity3d.com/Manual/RunningEditorCodeOnLaunch.html

标签: c#unity3d

解决方案


您可以在其他脚本之一中动态检查它。您可以从OnEnableStart函数调用它。你的 MonoBehaviour 必须包含标签[ExecuteInEditMode]它可能是这样的:

[ExecuteInEditMode]
public class YourMonoBehaviour: MonoBehaviour
{
    void OnEnable()
    {
        var myObject = GameObject.Find("GAMEOBJECT_NAME");
        if (myObject == null)
        {
            //Create new GameObject here and add your Component
        }
    }
}

如果您需要通过序列化在游戏对象中保存一些资产链接或数据,您可以创建预制件,将其缓存并从预制件创建对象:

MyObjectType prefabTemplate;

void OnEnable()
{
    if (GameObject.Find("GAMEOBJECT_NAME") == null)
    {
        GameObject.Instantiate(prefabTemplate);
    }
}

推荐阅读