unity 保存实例到新预制,保存实例到原预制

avatar
作者
猴君
阅读量:0

保存预制,很简单的功能,但是走了弯路,记录一下吧

private void SavePrefab(Transform root) {     PrefabInstanceStatus status = PrefabUtility.GetPrefabInstanceStatus(Root.gameObject);      if (status == PrefabInstanceStatus.NotAPrefab)     {         // 如果不是预制件,创建一个新的预制件         string path = EditorUtility.SaveFilePanel("Save prefab", "Assets/", Root.name + ".prefab", "prefab");         if (path.Length != 0)         {             bool suc;             PrefabUtility.SaveAsPrefabAssetAndConnect(Root.gameObject, path, InteractionMode.UserAction, out suc);             Debug.Log("suc =" + suc);         }     }     else {         string prefabPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(Root.gameObject);         Debug.Log($"{prefabPath}");         PrefabUtility.SaveAsPrefabAssetAndConnect(Root.gameObject, prefabPath, InteractionMode.UserAction);         //Debug.Log("suc="+ suc);     }    }

如果要保存的Gameobject 本身就是一个预制,不能用下方方法

PrefabUtility.SavePrefabAsset(GameObject root) 这个不是实例才生效,否则报错:

ArgumentException: Can't save a Prefab instance

报错的原因:只要物体拖到场景里,就是一个实例了,所以这个只能用不是实例的物体才可以用

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!