예제 #1
0
        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;
            }
        }
예제 #2
0
        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();
        }