static void Postfix(OcPl __instance) { string playername = Settings.getPlayerName(__instance); if (playername == null) { GameObject obj = new GameObject("Delay_OcPlVRM"); DelayVRM dvm = obj.AddComponent <DelayVRM>(); dvm.StartCheck(__instance); return; } if (!Settings.isUseVRM(__instance)) { return; } if (Settings.ReadBool("DisableStool", false)) { SROptions.Current.DisableStool = true; } GameObject _vrmModel = null; if (playername != null) { if (dic_vrmModel.ContainsKey(playername)) { _vrmModel = dic_vrmModel[playername]; } } if (_vrmModel == null) { // 個別の設定ファイルの有無 var settingsName = Settings.GetAvatarSettingsFileName(playername); if (!string.IsNullOrEmpty(settingsName)) { FileLogger.WriteLine("アバター毎の設定が見つかりました。 " + settingsName + " を使います。"); if (!File.Exists(Path.Combine(Settings.Player2VRMDir, settingsName))) { FileLogger.WriteLine(settingsName + " が見つかりませんでした。settings.txtの設定を使います。"); } else { FileLogger.WriteLine("OK " + settingsName); } } //カスタムモデル名の取得(設定ファイルにないためLogの出力が不自然にならないよう調整) var ModelStr = Settings.ReadSettings(playername, "ModelName"); var path = Environment.CurrentDirectory + @"\Player2VRM\player.vrm"; if (ModelStr != null) { path = Environment.CurrentDirectory + @"\Player2VRM\" + ModelStr + ".vrm"; } try { _vrmModel = ImportVRM(path, playername); } catch { string _settings_path = Settings.FindAvatarSettngs(playername); if (ModelStr != null) { UnityEngine.Debug.LogWarning("VRMファイルの読み込みに失敗しました。" + _settings_path + "内のModelNameを確認してください。"); if (!File.Exists(path)) { UnityEngine.Debug.LogWarning(ModelStr + ".vrm が見つかりませんでした。" + _settings_path + " 内のModelNameを確認してください。"); } } else { UnityEngine.Debug.LogWarning("VRMファイルの読み込みに失敗しました。Player2VRMフォルダにplayer.vrmを配置してください。"); FileLogger.WriteLine("VRMファイルの読み込みに失敗しました。Player2VRMフォルダにplayer.vrmを配置してください。"); } return; } FileLogger.WriteLine(ModelStr + ".vrm の読み込みに成功しました。"); OcPlHeadPrefabSetting hps = __instance.gameObject.GetComponentInChildren <OcPlHeadPrefabSetting>(); if (hps != null) { foreach (var mr in hps.gameObject.GetComponentsInChildren <MeshRenderer>()) { mr.enabled = false; } } var receiveShadows = Settings.ReadBool(playername, "ReceiveShadows"); if (!receiveShadows) { foreach (var smr in _vrmModel.GetComponentsInChildren <SkinnedMeshRenderer>()) { smr.receiveShadows = false; } } // プレイヤースケール調整 { var scale = Settings.ReadFloat(playername, "PlayerScale", 1.0f); __instance.transform.localScale *= scale; _vrmModel.transform.localScale /= scale; } } foreach (var smr in __instance.GetComponentsInChildren <SkinnedMeshRenderer>()) { if (Settings.ReadBool(playername, "UseRealToonShader", false)) { foreach (var mat in smr.materials) { mat.SetFloat("_EnableTextureTransparent", 1.0f); } } smr.enabled = false; Transform trans = smr.transform; while (_vrmModel != null && trans != null) { if (trans.name.Contains(_vrmModel.name)) { smr.enabled = true; break; } trans = trans.parent; } } __instance.Animator.gameObject.GetOrAddComponent <CloneHumanoid>().Setup(_vrmModel, __instance.Animator, __instance is OcPlMaster); if (playername != null) { dic_vrmModel[playername] = _vrmModel; } }
void Awake() { FileLogger.Init("log_" + DateTime.Now.ToString("yyyyMMdd_hhmmss") + ".txt"); // DLL確認 var dlls = new string[] { "DepthFirstScheduler.dll", "MToon.dll", "UniJSON.dll", "MeshUtility.dll", "ShaderProperty.Runtime.dll", "UniHumanoid.dll", "UniUnlit.dll", "VRM.dll", "OVRLipSync.dll", }; foreach (var dll in dlls) { var file = Path.Combine(Settings.ManagedDir, dll); if (!File.Exists(file)) { FileLogger.WriteLine(dll + "が見つかりませんでした。 Craftopia_Data/Managedフォルダに配置してください。"); return; } else { FileLogger.WriteLine("OK " + dll); } } // shader確認 if (!File.Exists(Path.Combine(Settings.PluginsDir, "Player2VRM.shaders"))) { FileLogger.WriteLine("Player2VRM.shaders が見つかりませんでした。 BepInEx/pluginsフォルダに配置してください。"); } else { FileLogger.WriteLine("OK Player2VRM.shaders"); } FileLogger.Init("log_" + DateTime.Now.ToString("yyyyMMdd_hhmmss") + ".txt"); // settings.txtの確認 if (!File.Exists(Settings.SettingsPath)) { FileLogger.WriteLine("settings.txt が見つかりませんでした。Player2VRMフォルダ内に settings.txt を配置してください。"); } else { FileLogger.WriteLine("OK settings.txt"); } // avatars.txtの確認 if (!File.Exists(Settings.AvatarsPath)) { FileLogger.WriteLine("avatars.txt が見つかりませんでした。Player2VRMフォルダ内に avatars.txt を配置してください。"); } else { FileLogger.WriteLine("OK avatars.txt"); } if (!Settings.ReadBool("Enabled", true)) { FileLogger.WriteLine("Player2VRMは現在無効になっています。"); FileLogger.WriteLine("有効にする場合は settings.txt の Enabled を true にしてください。"); return; } FileLogger.WriteLine("Player2VRM Enabled"); if (!Settings.ReadBool("UseRealToonShader", false)) { VRMShaders.Initialize(); } LipSync.OVRLipSyncVRM.Setup(null); var harmony = new Harmony("com.yoship1639.plugins.player2vrm.patch"); harmony.PatchAll(); }