void OnGUI() { scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); PrefabData.SetCloth(EditorGUILayout.ObjectField(I18N.Instance().Get("option.input.cloth"), PrefabData.GetCloth(), typeof(GameObject), true) as GameObject); //prevとの比較が必要な処理: 開始 SetupDiffTexGen(); //prevとの比較が必要な処理: 終了 prevClothPrefab = PrefabData.GetCloth(); DiffTexOnGUI(); EditorGUILayout.EndScrollView(); }
void SetupDiffTexGen() { if (PrefabData.GetCloth() == null) { return; } if (prevClothPrefab == PrefabData.GetCloth()) { return; } LoadDiffTexture(); I18N.Instance().LoadLanguage(clothPrefabParentPath); }
public void UpdateClothPrefab() { isLoadExpandGUI = false; if (PrefabData.GetCloth() != null) { clothPrefabParentPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(PrefabData.GetCloth()); LoadExpandFileVersion(); I18N.Instance().LoadLanguage(clothPrefabParentPath); LoadExpandOption(); } else { clothPrefabParentPath = ""; } }
public static void UnpackPrefabOnPrefabData() { //Assetから直接D&Dだったらインスタンス化 if (AssetDatabase.GetAssetPath(PrefabData.GetAvatar()) != "") { PrefabData.SetAvatar(PrefabUtility.InstantiatePrefab(PrefabData.GetAvatar()) as GameObject); } //Assetから直接D&Dだったらインスタンス化 if (AssetDatabase.GetAssetPath(PrefabData.GetCloth()) != "") { PrefabData.SetCloth(PrefabUtility.InstantiatePrefab(PrefabData.GetCloth()) as GameObject); } UnpackPrefab(PrefabData.GetAvatar()); UnpackPrefab(PrefabData.GetCloth()); }
void OnGUI() { if (clothUnInstaller == null) { clothUnInstaller = new ClothUnInstaller(); } GUILayout.Space(2); GUILayout.Label("Cloth UnInstaller", styleTitleStyle); GUIUtil.RenderLabel(I18N.Instance().Get("cloth_uninstaller.description")); GUILayout.Space(8); PrefabData.SetAvatar(EditorGUILayout.ObjectField(I18N.Instance().Get("option.input.avatar"), PrefabData.GetAvatar(), typeof(GameObject), true) as GameObject); PrefabData.SetCloth(EditorGUILayout.ObjectField(I18N.Instance().Get("option.input.cloth"), PrefabData.GetCloth(), typeof(GameObject), true) as GameObject); if (prevCloth != PrefabData.GetCloth()) { clothUnInstaller.UpdateClothPrefab(); prevCloth = PrefabData.GetCloth(); } //Setuper V2以上必須 if (clothUnInstaller.GetExpandOptionVersion() <= 1 && PrefabData.GetCloth() != null) { GUILayout.Space(4); GUIUtil.RenderLabel(I18N.Instance().Get("cloth_uninstaller.un_support_version")); return; } if (PrefabData.GetAvatar() == null || PrefabData.GetCloth() == null) { return; } GUILayout.Space(12); if (GUILayout.Button(I18N.Instance().Get("cloth_uninstaller.uninstall_button"))) { string id = clothUnInstaller.GetExpandOptionID(); if (id == "") { return; } clothUnInstaller.UnInstall(PrefabData.GetAvatar().transform, id); } }
//ExpandOptionのバージョンをロードする private void LoadExpandFileVersion() { expandOptionVersion = null; if (PrefabData.GetCloth() == null) { return; } isLoadExpandGUI = true; if (clothPrefabParentPath != "") { //プレハブ直下もしくは"RiClothesSetuper/" にOptionPathのjsonファイルを置くパターン string basePath = Path.GetDirectoryName(clothPrefabParentPath) + "/"; OptionPath optionPath = OptionPath.LoadOptionPathFromBaseDir(basePath); if (optionPath != null) { if (optionPath.option_json_path != null && optionPath.option_json_path != "") { //プレハブからの相対パス expandJsonPath = FileUtil.GetPathFromRelative(basePath, optionPath.option_json_path); expandOptionVersion = FileUtil.LoadJsonFile <ExpandOptionVersion>(expandJsonPath); } else if (optionPath.base_path != null && optionPath.base_path != "") { string optionBasePath = FileUtil.GetPathFromRelative(basePath, optionPath.base_path); LoadOptionVersionJsonOnBasePath(optionBasePath); } } //この時点でexpandOptionに中身が入っていたら終了する if (expandOptionVersion != null) { return; } //プレハブ直下もしくは"RiClothesSetuper/"にOption.jsonを置くパターン if (clothPrefabParentPath != "") { LoadOptionVersionJsonOnBasePath(basePath); } } }
private void SetupExpandOption() { if (setuperExpandOption == null) { setuperExpandOption = new SetuperExpandOption(); } if (setuperExpandOption != null) { //prevの服プレハブが現在の服プレハブが違ったらSetuperExpandOptionの服プレハブを更新 if (prevClothPrefab != PrefabData.GetCloth()) { setuperExpandOption.UpdateClothPrefab(); } setuperExpandOption.OnExpandGUI(); } }
public void LoadLanguage(string clothPrefabParentPath) { I18N.Instance().ResetText(); if (PrefabData.GetCloth() == null) { return; } bool isLoadLanguage = false; if (clothPrefabParentPath != "") { //プレハブ直下もしくは"RiClothesSetuper/" にOptionPathのjsonファイルを置くパターン string basePath = Path.GetDirectoryName(clothPrefabParentPath) + "/"; OptionPath optionPath = OptionPath.LoadOptionPathFromBaseDir(basePath); if (optionPath != null) { if (optionPath.language_dir_path != null && optionPath.language_dir_path != "") { string languageDirPath = FileUtil.GetPathFromRelative(basePath, optionPath.language_dir_path); I18N.Instance().LoadTextFile(languageDirPath, true); isLoadLanguage = true; } else if (optionPath.base_path != null && optionPath.base_path != "") { string languageBasePath = FileUtil.GetPathFromRelative(basePath, optionPath.base_path); I18N.Instance().LoadTextFile(languageBasePath, false); isLoadLanguage = true; } } //この時点でロードできていたら終了 if (isLoadLanguage) { return; } I18N.Instance().LoadTextFile(basePath, false); return; } }
void OnAdvancedOptionGUI() { if (PrefabData.GetCloth() == null) { return; } GUILayout.Space(4); showAdvancedOption = GUILayout.Toggle(showAdvancedOption, I18N.Instance().Get("option.toggle.show_advanced_option")); GUILayout.Space(2); if (!showAdvancedOption) { return; } isRemoveMissingScript = GUILayout.Toggle(isRemoveMissingScript, I18N.Instance().Get("option.toggle.is_remove_missing_script")); GUIUtil.RenderLabel(I18N.Instance().Get("option.toggle.is_remove_missing_script.description")); GUILayout.Space(2); setuperExpandOption.OnExpandAdvancedOptionGUI(); }
void LoadDiffTexture() { ClearDiffTexture(); if (PrefabData.GetCloth() == null) { return; } clothPrefabParentPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(PrefabData.GetCloth()); if (clothPrefabParentPath == "") { return; } string basePath = FileUtil.GetBasePath().Replace("Assets/", "") + Path.GetDirectoryName(clothPrefabParentPath) + "/"; OptionPath optionPath = OptionPath.LoadOptionPathFromBaseDir(basePath); TryLoadV2(basePath, optionPath); //V2の読み込みができていたら終了 if (V2DiffTextGen != null) { return; } //プレハブ直下もしくは"RiClothesSetuper/" にOptionPathのjsonファイルを置くパターン if (optionPath != null) { //DiffText V1の読み込み if (optionPath.option_json_path != null && optionPath.option_json_path != "") { string optionJsonPath = ""; optionJsonPath = FileUtil.GetPathFromRelative(basePath, optionPath.option_json_path); V1.ExpandOption expandOption = FileUtil.LoadJsonFile <V1.ExpandOption>(optionJsonPath); string outputPath = basePath; if (optionPath.base_path != null && optionPath.base_path != "") { outputPath = FileUtil.GetPathFromRelative(basePath, optionPath.base_path); } if (expandOption != null) { V1DiffTextGen = new V1.DiffTexGeneratorProcess(expandOption.difference_textures, outputPath); } } else if (optionPath.base_path != null && optionPath.base_path != "") { string optionBasePath = FileUtil.GetPathFromRelative(basePath, optionPath.base_path); LoadDiffTexOnBasePath(optionBasePath); } } //この時点でロードできていたら終了 if (V1DiffTextGen != null) { return; } //プレハブ直下もしくは"RiClothesSetuper/"にOption.jsonを置くパターン if (clothPrefabParentPath != "") { LoadDiffTexOnBasePath(basePath); } }
void OnDestroy() { PrefabData.ClearPrefabData(); I18N.Instance().ResetText(); }
public SetuperExpandOption() { if (PrefabData.GetCloth() != null) { clothPrefabParentPath = PrefabUtility.GetPrefabAssetPathOfNearestInstanceRoot(PrefabData.GetCloth()); } }
// RiClothes SetuperのGUIを描画 void OnGUI() { scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); PrefabData.SetAvatar(EditorGUILayout.ObjectField(I18N.Instance().Get("option.input.avatar"), PrefabData.GetAvatar(), typeof(GameObject), true) as GameObject); PrefabData.SetCloth(EditorGUILayout.ObjectField(I18N.Instance().Get("option.input.cloth"), PrefabData.GetCloth(), typeof(GameObject), true) as GameObject); //prevとの比較が必要な処理: 開始 SetupExpandOption(); //prevとの比較が必要な処理: 終了 //prev更新 prevAvatarPrefab = PrefabData.GetAvatar(); prevClothPrefab = PrefabData.GetCloth(); OnAdvancedOptionGUI(); //上から16のマージン GUILayout.Space(16); if (GUILayout.Button(I18N.Instance().Get("option.button.change_cloth"))) { if (PrefabData.GetAvatar() == null || PrefabData.GetCloth() == null) { return; } //両方とも同じプレハブが入っているときは処理しないように if (PrefabData.GetAvatar() == PrefabData.GetCloth()) { return; } PrefabUtil.UnpackPrefabOnPrefabData(); //ボーンを移動する前に実行されるオプション setuperExpandOption.BeforeMoveArmature(); SetupArmature(PrefabData.GetAvatar().transform.Find("Armature"), PrefabData.GetCloth().transform.Find("Armature")); //ボーンを移動した後に実行されるオプション setuperExpandOption.AfterMoveBone(); MoveClothObject(); //Setuper側の処理が終わったあとに実行 setuperExpandOption.AfterSetuperProcess(); //残った服の残骸(プレハブ)を消す GameObject.DestroyImmediate(PrefabData.GetCloth()); //Missing Scriptを削除するオプションが有効のときMissing Scriptを削除する if (isRemoveMissingScript) { SetuperMissingRemover.Remove(PrefabData.GetAvatar()); } #if UNITY_2018 //シリアライズオブジェクトを編集した場合一回実行しないとUnityを閉じるときにクラッシュするのを対策 EditorApplication.ExecuteMenuItem("Edit/Play"); #endif Close(); } EditorGUILayout.EndScrollView(); }