代码之家  ›  专栏  ›  技术社区  ›  DirtyNative

如何正确装载预制件

  •  2
  • DirtyNative  · 技术社区  · 7 年前

    我想通过名称(和路径)实例化一个预置,它来自我的服务器,来自我的资产文件夹,遇到了一些问题。

    var prefab = Instantiate(Resources.Load("prefabName")) as GameObject;
    

    这是大多数线程建议的,但如前所述 here 你不应该使用它。

    var prefab = Instantiate(UnityEditor.AssetDatabase.LoadAssetAtPath<GameObject>(path));
    

    这是我找到的第二种方法,但这只在编辑器内部工作时有效。例如,将项目构建到WebGl将立即引发构建错误。

    那么,实例化预置的正确方法是什么呢?

    2 回复  |  直到 7 年前
        1
  •  3
  •   Nikaas    7 年前

    为什么不在MonoBehavior中简单地添加一个(可序列化)字段:

    [SerializeField] private GameObject myPrefab;

    public GameObject MyPrefab;

    GameObject clone = Instantiate(myPrefab);

    这种方法的不同之处在于,预置是在内存中预加载的,即当您实例化从内存读取时(与磁盘相反)。

        2
  •  2
  •   Nicolas    7 年前

    您是否正在将资产导入到已构建的游戏中?或者您是指项目中已经存在的资产?

    因为如果你想 运行时导入 你可以使用资产抵押。不幸的是,我不能真正帮助你,因为我没有与他们合作的实际经验,但我在某个地方读到,许多移动开发人员使用他们在游戏发布时分发他们的资产。

    也许是 Asset Bundle Manual 这对你有帮助。

    如果要实例化 已经在您的项目中 你可以用一个 Dictionary<string,GameObject> . 就像这样:

    public Dictionary<string, GameObject> prefabDict = new Dictionary<string, GameObject>();
    
    
    public void SpawnPrefabFromDict(string name)
    {
        Instantiate(prefabDict[name]);
    }
    

    字符串作为键,然后指向它的值-你的预置!

    希望这有帮助! 祝你好运