internal static bool CreateSceneCachePlayerAndPrefab(string sceneCacheFilePath, string prefabPath, string assetsFolder, out SceneCachePlayer player, out GameObject prefab) { player = null; prefab = null; GameObject go = new GameObject(); go.name = Path.GetFileNameWithoutExtension(sceneCacheFilePath); player = AddSceneCachePlayer(go, sceneCacheFilePath, assetsFolder); if (null == player) { Object.DestroyImmediate(go); return false; } //Optimize serialization by ensuring to serialize the key values at the end player.EnableKeyValuesSerialization(false); prefab = player.gameObject.SaveAsPrefab(prefabPath); if (null == prefab) { Object.DestroyImmediate(go); return false; } player.EnableKeyValuesSerialization(true); PrefabUtility.ApplyPrefabInstance(player.gameObject, InteractionMode.AutomatedAction); Undo.RegisterCreatedObjectUndo(go, "SceneCachePlayer"); return true; }