public static void LoadModelTest() { var loader = new RagnarokModelLoader(); try { var go = GameObject.Find("ModelTest"); if (go != null) { GameObject.DestroyImmediate(go); } go = new GameObject("ModelTest"); //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\게페니아\대장간.rsm"; //Retarded hammer building //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\유노\유노_나무3.rsm"; //Juno tree //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\게페니아\도구점.rsm"; //geffen windmill //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\유노\유노_과학자건물.rsm"; //alchemist thing? //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\모로코\개미나무.rsm"; //big ass ant //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\모로코\개미지옥나무뿌리.rsm"; //ant hell tree thing //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\니플헤임\니플헤임-무기점.rsm"; //weird skull hatchet house //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\니플헤임\니플헤임-풍차.rsm"; //niflheim windmill //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\프론테라\상점01.rsm"; //fruit cart //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\페이욘\싸리담1.rsm"; //payon fence //var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\알베르타\도구점.rsm"; //alberta pickaxe shop var modelPath = @"G:\Projects2\Ragnarok\Resources\data\model\프론테라\무기점.rsm"; //prontera armory var savePath = DirectoryHelper.GetRelativeDirectory(RagnarokDirectory.GetRagnarokDataDirectory, Path.GetDirectoryName(modelPath)); //loader.LoadModel(@"G:\Projects2\Ragnarok\Resources\data\model\글래스트\글래스트_부서진의자1.rsm"); //Glast\Glast_BrokenChair1 //loader.LoadModel(@"G:\Projects2\Ragnarok\Resources\data\model\내부소품\탁상1.rsm"); //props\desk1 loader.LoadModel(modelPath, savePath); //Glast\Glast_KnightStatue13 var model = loader.Compile(); model.transform.SetParent(go.transform, false); model.transform.localScale = new Vector3(1f, 1f, 1f); } finally { loader.Dispose();; } }
static void ImportFiles() { var files = StandaloneFileBrowser.OpenFilePanel("Open File", RagnarokDirectory.GetRagnarokDataDirectory, "gnd", true); if (files.Length <= 0) { return; } //var saveDir = EditorUtility.SaveFolderPanel("Save Folder", Application.dataPath, ""); var saveDir = Path.Combine(Application.dataPath, "maps").Replace("\\", "/"); //Debug.Log(saveDir); foreach (var f in files) { var lastDirectory = Path.GetDirectoryName(f); var baseName = Path.GetFileNameWithoutExtension(f); Debug.Log(f); var relativeDir = saveDir.Substring(saveDir.IndexOf("Assets/")); var loader = new RagnarokMapLoader(); var data = loader.ImportMap(f, relativeDir); var dataPath = Path.Combine(relativeDir, data.name + ".asset").Replace("\\", "/"); AssetDatabase.CreateAsset(data, dataPath); data = AssetDatabase.LoadAssetAtPath <RoMapData>(dataPath); data.RefreshTextureLookup(); data.RebuildAtlas(); var gatPath = Path.Combine(lastDirectory, baseName + ".gat"); data.WalkData = LoadWalkData(gatPath); var resourcePath = Path.Combine(lastDirectory, baseName + ".rsw"); if (File.Exists(resourcePath)) { var world = RagnarokResourceLoader.LoadResourceFile(resourcePath); world.name = baseName + " world data"; var worldFolder = Path.Combine(relativeDir, "world"); if (!Directory.Exists(worldFolder)) { Directory.CreateDirectory(worldFolder); } var worldAssetPath = Path.Combine(worldFolder, baseName + "_world.asset").Replace("\\", "/"); AssetDatabase.CreateAsset(world, worldAssetPath); foreach (var model in world.Models) { var baseFolder = Path.Combine(RagnarokDirectory.GetRagnarokDataDirectory, "model"); var modelPath = Path.Combine(baseFolder, model.FileName); var relative = DirectoryHelper.GetRelativeDirectory(baseFolder, Path.GetDirectoryName(modelPath)); var mBaseName = Path.GetFileNameWithoutExtension(model.FileName); var prefabFolder = Path.Combine("Assets/models/prefabs/", relative).Replace("\\", "/"); var prefabPath = Path.Combine(prefabFolder, mBaseName + ".prefab").Replace("\\", "/"); if (!Directory.Exists(prefabFolder)) { Directory.CreateDirectory(prefabFolder); } if (!File.Exists(prefabPath)) { var modelLoader = new RagnarokModelLoader(); modelLoader.LoadModel(modelPath, relative); var obj = modelLoader.Compile(); PrefabUtility.SaveAsPrefabAssetAndConnect(obj, prefabPath, InteractionMode.AutomatedAction); var prefabRef = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath); DestroyImmediate(obj); } } //var builder = new RagnarokWorldSceneBuilder(); //builder.Load(data, world); } AssetDatabase.SaveAssets(); EditorUtility.UnloadUnusedAssetsImmediate(); var importer = new RagnarokMapDataImporter(dataPath, baseName); importer.Import(true, true, true, true, true); AssetDatabase.SaveAssets(); } }
private void LoadModels() { var modelContainer = new GameObject("models"); modelContainer.transform.SetParent(baseObject.transform, false); foreach (var model in world.Models) { var baseFolder = Path.Combine(RagnarokDirectory.GetRagnarokDataDirectory, "model"); var modelPath = Path.Combine(baseFolder, model.FileName); var relative = DirectoryHelper.GetRelativeDirectory(baseFolder, Path.GetDirectoryName(modelPath)); var baseName = Path.GetFileNameWithoutExtension(model.FileName); var prefabFolder = Path.Combine("Assets/models/prefabs/", relative).Replace("\\", "/"); var prefabPath = Path.Combine(prefabFolder, baseName + ".prefab").Replace("\\", "/"); if (!Directory.Exists(prefabFolder)) { Directory.CreateDirectory(prefabFolder); } GameObject obj; if (modelCache.ContainsKey(model.FileName)) { //obj = GameObject.Instantiate(modelCache[model.FileName]); obj = PrefabUtility.InstantiatePrefab(modelCache[model.FileName], SceneManager.GetActiveScene()) as GameObject; } else { if (File.Exists(prefabPath)) { var prefabRef = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath); obj = PrefabUtility.InstantiatePrefab(prefabRef, SceneManager.GetActiveScene()) as GameObject; modelCache.Add(model.FileName, prefabRef); } else { var modelLoader = new RagnarokModelLoader(); modelLoader.LoadModel(modelPath, relative); obj = modelLoader.Compile(); PrefabUtility.SaveAsPrefabAssetAndConnect(obj, prefabPath, InteractionMode.AutomatedAction); var prefabRef = AssetDatabase.LoadAssetAtPath <GameObject>(prefabPath); modelCache.Add(model.FileName, prefabRef); } } obj.isStatic = true; obj.name = model.FileName; obj.transform.parent = modelContainer.transform; obj.transform.localPosition = new Vector3(model.Position.x / 5, -model.Position.y / 5, model.Position.z / 5) + new Vector3(0f, 0.01f, 0f); obj.transform.localScale = model.Scale; //model.Scale * 0.2f; var rz = Matrix4x4.Rotate(Quaternion.Euler(0, 0, -model.Rotation.z)); var rx = Matrix4x4.Rotate(Quaternion.Euler(-model.Rotation.x, 0, 0)); var ry = Matrix4x4.Rotate(Quaternion.Euler(0, model.Rotation.y, 0)); var final = rz * rx * ry; var rotation = model.Rotation; obj.transform.rotation = final.rotation; //Quaternion.Euler(rotation); //obj.ChangeStaticRecursive(true); } }
//[MenuItem("Ragnarok/Test Import Model")] static void TestImportModel() { RagnarokModelLoader.LoadModelTest(); }