private void CreateMaterial(string arg) { bool currentFolder = !string.IsNullOrEmpty(arg); ProjectItem parentFolder = currentFolder ? m_folders.FirstOrDefault() : (ProjectItem)m_listBox.SelectedItem; if (parentFolder == null) { return; } IUnityObjectFactory objectFactory = IOC.Resolve <IUnityObjectFactory>(); UnityObject unityObject = objectFactory.CreateInstance(typeof(Material), null); IResourcePreviewUtility resourcePreview = IOC.Resolve <IResourcePreviewUtility>(); byte[] preview = resourcePreview.CreatePreviewData(unityObject); Editor.IsBusy = true; m_project.Save(new[] { parentFolder }, new[] { preview }, new[] { unityObject }, null, (error, assetItems) => { if (!currentFolder) { if (ItemDoubleClick != null) { ItemDoubleClick(this, new ProjectTreeEventArgs(new[] { parentFolder })); } } Editor.ActivateWindow(this); Destroy(unityObject); }); }
private void CreatePrefabWithDependencies(ProjectItem dropTarget, ExposeToEditor dragObject, Action <AssetItem[]> done) { IResourcePreviewUtility previewUtility = IOC.Resolve <IResourcePreviewUtility>(); m_project.GetDependencies(dragObject.gameObject, true, (error, deps) => { object[] objects; if (!deps.Contains(dragObject.gameObject)) { objects = new object[deps.Length + 1]; objects[deps.Length] = dragObject.gameObject; for (int i = 0; i < deps.Length; ++i) { objects[i] = deps[i]; } } else { objects = deps; } IUnityObjectFactory uoFactory = IOC.Resolve <IUnityObjectFactory>(); objects = objects.Where(obj => uoFactory.CanCreateInstance(obj.GetType())).ToArray(); byte[][] previewData = new byte[objects.Length][]; for (int i = 0; i < objects.Length; ++i) { if (objects[i] is UnityObject) { previewData[i] = previewUtility.CreatePreviewData((UnityObject)objects[i]); } } CreatePrefab(dropTarget, previewData, objects, done); }); }
private void CreateAsset(Type type, string defaultName, ProjectItem parentFolder) { IUnityObjectFactory objectFactory = IOC.Resolve <IUnityObjectFactory>(); UnityObject asset = objectFactory.CreateInstance(type, null); asset.name = defaultName; CreateAsset(asset, parentFolder); }
protected virtual void AwakeOverride() { m_shaderUtil = ShaderUtil; m_assetDB = AssetDB; m_typeMap = TypeMap; m_objectFactory = ObjectFactory; m_serializer = Serializer; m_storage = Storage; m_project = Project; }
private void Awake() { m_storage = RTSL2Deps.Get.Storage; m_assetDB = RTSL2Deps.Get.AssetDB; m_typeMap = RTSL2Deps.Get.TypeMap; m_factory = RTSL2Deps.Get.UnityObjFactory; if (m_dynamicPrefabsRoot == null) { m_dynamicPrefabsRoot = transform; } }
private void Awake() { m_storage = IOC.Resolve <IStorage>(); m_assetDB = IOC.Resolve <IAssetDB>(); m_typeMap = IOC.Resolve <ITypeMap>(); m_factory = IOC.Resolve <IUnityObjectFactory>(); if (m_dynamicPrefabsRoot == null) { m_dynamicPrefabsRoot = transform; } }
protected virtual void OnDestroy() { if (this == (MonoBehaviour)Get) { Get = null; m_assetDB = null; m_typeMap = null; m_unityObjFactory = null; m_serializer = null; m_storage = null; m_project = null; } }
protected virtual void Awake() { if (Get != null) { Destroy(((MonoBehaviour)Get).gameObject); Debug.LogWarning("Another instance of RTSL2Deps exist"); } Get = this; m_assetDB = new AssetDB(); m_typeMap = new TypeMap(); m_unityObjFactory = new UnityObjectFactory(); m_serializer = new ProtobufSerializer(); m_storage = new FileSystemStorage(); m_project = FindObjectOfType <Project>(); }
protected virtual void AwakeOverride() { if (gameObject.GetComponent <Dispatcher>() == null) { gameObject.AddComponent <Dispatcher>(); } m_assetBundleLoader = AssetBundleLoader; m_assetDB = AssetDB; m_shaderUtil = ShaderUtil; m_typeMap = TypeMap; m_objectFactory = ObjectFactory; m_serializer = Serializer; m_storage = Storage; m_project = Project; }
private void OnDestroy() { if (m_instance == this) { m_instance = null; } OnDestroyOverride(); m_shaderUtil = null; m_assetDB = null; m_typeMap = null; m_objectFactory = null; m_serializer = null; m_storage = null; m_project = null; }
private void Awake() { if (RTSL2Deps.Get == null) { GameObject deps = new GameObject(); deps.name = "RTSL2Deps"; deps.AddComponent <RTSL2Deps>(); } m_storage = RTSL2Deps.Get.Storage; m_assetDB = RTSL2Deps.Get.AssetDB; m_typeMap = RTSL2Deps.Get.TypeMap; m_factory = RTSL2Deps.Get.UnityObjFactory; if (m_dynamicPrefabsRoot == null) { m_dynamicPrefabsRoot = transform; } }
protected override object WriteToImpl(object obj) { if (Descriptors == null && Data == null) { return(obj); } if (Descriptors == null && Data != null || Data != null && Descriptors == null) { throw new ArgumentException("data is corrupted", "scene"); } if (Descriptors.Length == 0) { return(obj); } if (Identifiers == null || Identifiers.Length != Data.Length) { throw new ArgumentException("data is corrupted", "scene"); } Scene scene = (Scene)obj; GameObject[] rootGameObjects = scene.GetRootGameObjects(); for (int i = 0; i < rootGameObjects.Length; ++i) { GameObject rootGO = rootGameObjects[i]; if (rootGO.GetComponent <RTSLIgnore>()) { continue; } UnityObject.DestroyImmediate(rootGO); } Dictionary <int, UnityObject> idToUnityObj = new Dictionary <int, UnityObject>(); for (int i = 0; i < Descriptors.Length; ++i) { PersistentDescriptor descriptor = Descriptors[i]; if (descriptor != null) { CreateGameObjectWithComponents(m_typeMap, descriptor, idToUnityObj, null); } } UnityObject[] assetInstances = null; if (AssetIdentifiers != null) { IUnityObjectFactory factory = IOC.Resolve <IUnityObjectFactory>(); assetInstances = new UnityObject[AssetIdentifiers.Length]; for (int i = 0; i < AssetIdentifiers.Length; ++i) { PersistentObject asset = Assets[i]; Type uoType = m_typeMap.ToUnityType(asset.GetType()); if (uoType != null) { if (factory.CanCreateInstance(uoType, asset)) { UnityObject assetInstance = factory.CreateInstance(uoType, asset); if (assetInstance != null) { assetInstances[i] = assetInstance; idToUnityObj.Add(AssetIdentifiers[i], assetInstance); } } else { Debug.LogWarning("Unable to create object of type " + uoType.ToString()); } } else { Debug.LogWarning("Unable to resolve unity type for " + asset.GetType().FullName); } } } m_assetDB.RegisterSceneObjects(idToUnityObj); if (assetInstances != null) { for (int i = 0; i < AssetIdentifiers.Length; ++i) { UnityObject assetInstance = assetInstances[i]; if (assetInstance != null) { PersistentObject asset = Assets[i]; asset.WriteTo(assetInstance); } } } RestoreDataAndResolveDependencies(); m_assetDB.UnregisterSceneObjects(); return(scene); }
public static ProjectAsyncOperation CreatePrefab(this IProject project, string folderPath, GameObject prefab, bool includeDeps, Func <UnityObject, byte[]> createPreview = null) { ProjectAsyncOperation ao = new ProjectAsyncOperation(); folderPath = string.Format("{0}/{1}", project.Root.Name, folderPath); ProjectItem folder = project.Root.Get(folderPath, true) as ProjectItem; if (folder is AssetItem) { throw new ArgumentException("folderPath"); } if (includeDeps) { project.GetDependencies(prefab, true, (error, deps) => { object[] objects; if (!deps.Contains(prefab)) { objects = new object[deps.Length + 1]; objects[deps.Length] = prefab; for (int i = 0; i < deps.Length; ++i) { objects[i] = deps[i]; } } else { objects = deps; } IUnityObjectFactory uoFactory = IOC.Resolve <IUnityObjectFactory>(); objects = objects.Where(obj => uoFactory.CanCreateInstance(obj.GetType())).ToArray(); byte[][] previewData = new byte[objects.Length][]; if (createPreview != null) { for (int i = 0; i < objects.Length; ++i) { if (objects[i] is UnityObject) { previewData[i] = createPreview((UnityObject)objects[i]); } } } project.Save(new[] { folder }, previewData, objects, null, (saveErr, assetItems) => { ao.Error = saveErr; ao.IsCompleted = true; }); }); } else { byte[][] previewData = new byte[1][]; if (createPreview != null) { previewData[0] = createPreview(prefab); } project.Save(new[] { folder }, previewData, new[] { prefab }, null, (saveErr, assetItems) => { ao.Error = saveErr; ao.IsCompleted = true; }); } return(ao); }
protected override object WriteToImpl(object obj) { ClearReferencesCache(); Scene scene = (Scene)obj; if (Descriptors == null && Data == null) { DestroyGameObjects(scene); return(obj); } if (Descriptors == null && Data != null || Data != null && Descriptors == null) { throw new ArgumentException("data is corrupted", "scene"); } if (Descriptors.Length == 0) { DestroyGameObjects(scene); return(obj); } if (Identifiers == null || Identifiers.Length != Data.Length) { throw new ArgumentException("data is corrupted", "scene"); } DestroyGameObjects(scene); Dictionary <TID, UnityObject> idToUnityObj = new Dictionary <TID, UnityObject>(); for (int i = 0; i < Descriptors.Length; ++i) { PersistentDescriptor <TID> descriptor = Descriptors[i]; if (descriptor != null) { CreateGameObjectWithComponents(m_typeMap, descriptor, idToUnityObj, null); } } UnityObject[] assetInstances = null; if (AssetIds != null) { IUnityObjectFactory factory = IOC.Resolve <IUnityObjectFactory>(); assetInstances = new UnityObject[AssetIds.Length]; for (int i = 0; i < AssetIds.Length; ++i) { Type uoType; PersistentObject <TID> asset = Assets[i]; if (asset is PersistentRuntimeSerializableObject <TID> ) { PersistentRuntimeSerializableObject <TID> runtimeSerializableObject = (PersistentRuntimeSerializableObject <TID>)asset; uoType = runtimeSerializableObject.ObjectType; } else { uoType = m_typeMap.ToUnityType(asset.GetType()); } if (uoType != null) { if (factory.CanCreateInstance(uoType, asset)) { UnityObject assetInstance = factory.CreateInstance(uoType, asset); if (assetInstance != null) { assetInstances[i] = assetInstance; idToUnityObj.Add(AssetIds[i], assetInstance); } } else { Debug.LogWarning("Unable to create object of type " + uoType.ToString()); } } else { Debug.LogWarning("Unable to resolve unity type for " + asset.GetType().FullName); } } } m_assetDB.RegisterSceneObjects(idToUnityObj); if (assetInstances != null) { for (int i = 0; i < assetInstances.Length; ++i) { UnityObject assetInstance = assetInstances[i]; if (assetInstance != null) { PersistentObject <TID> asset = Assets[i]; asset.WriteTo(assetInstance); } } } RestoreDataAndResolveDependencies(); m_assetDB.UnregisterSceneObjects(); ClearReferencesCache(); return(scene); }