// PMDファイルをUnity形式に変換 void BurnUnityFormatForPMD(MMD.PMD.PMDFormat format) { format.fst = this.fst; obj = new GameObject(format.name); format.caller = obj; format.shader_type = this.shader_type; MMD.PMD.PMDConverter conv = new MMD.PMD.PMDConverter(); this.mesh = conv.CreateMesh(format); // メッシュの生成・設定 this.materials = conv.CreateMaterials(format); // マテリアルの生成・設定 this.bones = conv.CreateBones(format); // ボーンの生成・設定 // バインドポーズの作成 conv.BuildingBindpose(format, this.mesh, this.materials, this.bones); obj.AddComponent <Animation>(); // アニメーションを追加 MMDEngine engine = obj.AddComponent <MMDEngine>(); // IKの登録 if (this.use_ik) { engine.ik_list = conv.EntryIKSolver(format, this.bones); } // 剛体関連 if (this.rigidFlag) { try { this.rigids = conv.CreateRigids(format, bones); conv.AssignRigidbodyToBone(format, this.bones, this.rigids); conv.SetRigidsSettings(format, this.bones, this.rigids); conv.SettingJointComponent(format, this.bones, this.rigids); // 非衝突グループ List <int>[] ignoreGroups = conv.SettingIgnoreRigidGroups(format, this.rigids); int[] groupTarget = conv.GetRigidbodyGroupTargets(format, rigids); MMDEngine.Initialize(engine, groupTarget, ignoreGroups, this.rigids); } catch { } } #if UNITY_4_0 AvatarSettingScript avt_setting = new AvatarSettingScript(format.caller); avt_setting.SettingAvatar(); #endif var window = LoadedWindow.Init(); window.Text = format.head.comment; CreatePrefab(format); EndOfScript(format); }
/// <summary> /// GameObjectを作成する /// </summary> /// <param name='format'>内部形式データ</param> /// <param name='use_rigidbody'>剛体を使用するか</param> /// <param name='use_mecanim'>Mecanimを使用するか</param> /// <param name='use_ik'>IKを使用するか</param> /// <param name='scale'>スケール</param> private GameObject CreateGameObject_(PMXFormat format, bool use_rigidbody, bool use_mecanim, bool use_ik, float scale) { format_ = format; use_rigidbody_ = use_rigidbody; use_mecanim_ = use_mecanim; use_ik_ = use_ik; scale_ = scale; root_game_object_ = new GameObject(format_.meta_header.name); MMDEngine engine = root_game_object_.AddComponent<MMDEngine>(); //MMDEngine追加 root_game_object_.AddComponent<Animation>(); // アニメーションを追加 MeshCreationInfo[] creation_info = CreateMeshCreationInfo(); // メッシュを作成する為の情報を作成 Mesh[] mesh = CreateMesh(creation_info); // メッシュの生成・設定 Material[][] materials = CreateMaterials(creation_info); // マテリアルの生成・設定 GameObject[] bones = CreateBones(); // ボーンの生成・設定 SkinnedMeshRenderer[] renderers = BuildingBindpose(mesh, materials, bones); // バインドポーズの作成 CreateMorph(mesh, materials, bones, renderers, creation_info); // モーフの生成・設定 // IKの登録 if (use_ik_) { engine.bone_controllers = EntryBoneController(bones); engine.ik_list = engine.bone_controllers.Where(x=>null != x.ik_solver) .Select(x=>x.ik_solver) .ToArray(); } // 剛体関連 if (use_rigidbody_) { GameObject[] rigids = CreateRigids(); AssignRigidbodyToBone(bones, rigids); SetRigidsSettings(bones, rigids); GameObject[] joints = CreateJoints(rigids); GlobalizeRigidbody(joints); // 非衝突グループ List<int>[] ignoreGroups = SettingIgnoreRigidGroups(rigids); int[] groupTarget = GetRigidbodyGroupTargets(rigids); MMDEngine.Initialize(engine, scale_, groupTarget, ignoreGroups, rigids); } // Mecanim設定 (not work yet..) #if UNITY_4_0 || UNITY_4_1 if (use_mecanim_) { AvatarSettingScript avt_setting = new AvatarSettingScript(root_game_object_); avt_setting.SettingAvatar(); } #endif return root_game_object_; }
//-------------------------------------------------------------------------------- // PMDファイルの読み込み // PMDファイルをUnity形式に変換 void BurnUnityFormatForPMD() { MMD.PMD.PMDConverter conv = new MMD.PMD.PMDConverter(); GameObject obj = new GameObject(this.format.name); this.format.fst = this.fst; this.format.caller = obj; this.format.shader_type = this.shader_type; Mesh mesh = conv.CreateMesh(this.format); // メッシュの生成・設定 Material[] materials = conv.CreateMaterials(this.format); // マテリアルの生成・設定 GameObject[] bones = conv.CreateBones(this.format); // ボーンの生成・設定 // バインドポーズの作成 conv.BuildingBindpose(this.format, mesh, materials, bones); obj.AddComponent<Animation>(); // アニメーションを追加 MMDEngine engine = obj.AddComponent<MMDEngine>(); // IKの登録 if (this.use_ik) engine.ik_list = conv.EntryIKSolver(this.format, bones); // 剛体関連 if (this.rigidFlag) { try { var rigids = conv.CreateRigids(this.format, bones); conv.AssignRigidbodyToBone(this.format, bones, rigids); conv.SetRigidsSettings(this.format, bones, rigids); conv.SettingJointComponent(this.format, bones, rigids); // 非衝突グループ List<int>[] ignoreGroups = conv.SettingIgnoreRigidGroups(this.format, rigids); int[] groupTarget = conv.GetRigidbodyGroupTargets(this.format, rigids); MMDEngine.Initialize(engine, groupTarget, ignoreGroups, rigids); } catch { } } // Mecanim設定 (not work yet..) #if UNITY_4_0 || UNITY_4_1 AvatarSettingScript avt_setting = new AvatarSettingScript(this.format.caller); avt_setting.SettingAvatar(); #endif // プレファブに登録 Object prefab = PrefabUtility.CreateEmptyPrefab(this.format.folder + "/" + format.name + ".prefab"); PrefabUtility.ReplacePrefab(this.format.caller, prefab); // アセットリストの更新 AssetDatabase.Refresh(); // 一度,表示されているモデルを削除して新しくPrefabのインスタンスを作る GameObject.DestroyImmediate(obj); PrefabUtility.InstantiatePrefab(prefab); }
/// <summary> /// GameObjectを作成する /// </summary> /// <param name='format'>内部形式データ</param> /// <param name='use_rigidbody'>剛体を使用するか</param> /// <param name='use_mecanim'>Mecanimを使用するか</param> /// <param name='use_ik'>IKを使用するか</param> /// <param name='scale'>スケール</param> private GameObject CreateGameObject_(PMXFormat format, bool use_rigidbody, bool use_mecanim, bool use_ik, float scale) { format_ = format; use_rigidbody_ = use_rigidbody; use_mecanim_ = use_mecanim; use_ik_ = use_ik; scale_ = scale; root_game_object_ = new GameObject(format_.meta_header.name); MMDEngine engine = root_game_object_.AddComponent<MMDEngine>(); //MMDEngine追加 engine.scale = scale_; MeshCreationInfo[] creation_info = CreateMeshCreationInfo(); // メッシュを作成する為の情報を作成 Mesh[] mesh = CreateMesh(creation_info); // メッシュの生成・設定 Material[][] materials = CreateMaterials(creation_info); // マテリアルの生成・設定 GameObject[] bones = CreateBones(); // ボーンの生成・設定 SkinnedMeshRenderer[] renderers = BuildingBindpose(mesh, materials, bones); // バインドポーズの作成 CreateMorph(mesh, materials, bones, renderers, creation_info); // モーフの生成・設定 // BoneController・IKの登録(use_ik_を使った判定はEntryBoneController()の中で行う) { engine.bone_controllers = EntryBoneController(bones); engine.ik_list = engine.bone_controllers.Where(x=>null != x.ik_solver) .Select(x=>x.ik_solver) .ToArray(); } // 剛体関連 if (use_rigidbody_) { GameObject[] rigids = CreateRigids(); AssignRigidbodyToBone(bones, rigids); SetRigidsSettings(bones, rigids); GameObject[] joints = CreateJoints(rigids); GlobalizeRigidbody(joints); // 非衝突グループ List<int>[] ignoreGroups = SettingIgnoreRigidGroups(rigids); int[] groupTarget = GetRigidbodyGroupTargets(rigids); MMDEngine.Initialize(engine, groupTarget, ignoreGroups, rigids); } // Mecanim設定 #if UNITY_4_2 if (use_mecanim_) { //アニメーター追加 AvatarSettingScript avatar_setting = new AvatarSettingScript(root_game_object_, bones); avatar_setting.SettingAvatar(); string path = format_.meta_header.folder + "/"; string name = GetFilePathString(format_.meta_header.name); string file_name = path + name + ".avatar.asset"; avatar_setting.CreateAsset(file_name); } else { root_game_object_.AddComponent<Animation>(); // アニメーション追加 } #else //UNITY_4_2 root_game_object_.AddComponent<Animation>(); // アニメーション追加 #endif //UNITY_4_2 return root_game_object_; }
//-------------------------------------------------------------------------------- // PMDファイルの読み込み // PMDファイルをUnity形式に変換 void BurnUnityFormatForPMD() { MMD.PMD.PMDConverter conv = new MMD.PMD.PMDConverter(); GameObject obj = new GameObject(this.format.name); this.format.fst = this.fst; this.format.caller = obj; this.format.shader_type = this.shader_type; Mesh mesh = conv.CreateMesh(this.format); // メッシュの生成・設定 Material[] materials = conv.CreateMaterials(this.format); // マテリアルの生成・設定 GameObject[] bones = conv.CreateBones(this.format); // ボーンの生成・設定 // バインドポーズの作成 conv.BuildingBindpose(this.format, mesh, materials, bones); obj.AddComponent <Animation>(); // アニメーションを追加 MMDEngine engine = obj.AddComponent <MMDEngine>(); // IKの登録 if (this.use_ik) { engine.ik_list = conv.EntryIKSolver(this.format, bones); } // 剛体関連 if (this.rigidFlag) { try { var rigids = conv.CreateRigids(this.format, bones); conv.AssignRigidbodyToBone(this.format, bones, rigids); conv.SetRigidsSettings(this.format, bones, rigids); conv.SettingJointComponent(this.format, bones, rigids); // 非衝突グループ List <int>[] ignoreGroups = conv.SettingIgnoreRigidGroups(this.format, rigids); int[] groupTarget = conv.GetRigidbodyGroupTargets(this.format, rigids); MMDEngine.Initialize(engine, groupTarget, ignoreGroups, rigids); } catch { } } // Mecanim設定 (not work yet..) #if UNITY_4_0 || UNITY_4_1 AvatarSettingScript avt_setting = new AvatarSettingScript(this.format.caller); avt_setting.SettingAvatar(); #endif // プレファブに登録 Object prefab = PrefabUtility.CreateEmptyPrefab(this.format.folder + "/" + format.name + ".prefab"); PrefabUtility.ReplacePrefab(this.format.caller, prefab); // アセットリストの更新 AssetDatabase.Refresh(); // 一度,表示されているモデルを削除して新しくPrefabのインスタンスを作る GameObject.DestroyImmediate(obj); PrefabUtility.InstantiatePrefab(prefab); }
// PMDファイルをUnity形式に変換 void BurnUnityFormatForPMD(MMD.PMD.PMDFormat format) { format.fst = this.fst; obj = new GameObject(format.name); format.caller = obj; format.shader_type = this.shader_type; MMD.PMD.PMDConverter conv = new MMD.PMD.PMDConverter(); this.mesh = conv.CreateMesh(format); // メッシュの生成・設定 this.materials = conv.CreateMaterials(format); // マテリアルの生成・設定 this.bones = conv.CreateBones(format); // ボーンの生成・設定 // バインドポーズの作成 conv.BuildingBindpose(format, this.mesh, this.materials, this.bones); obj.AddComponent<Animation>(); // アニメーションを追加 MMDEngine engine = obj.AddComponent<MMDEngine>(); // IKの登録 if(this.use_ik) engine.ik_list = conv.EntryIKSolver(format, this.bones); // 剛体関連 if (this.rigidFlag) { try { this.rigids = conv.CreateRigids(format, bones); conv.AssignRigidbodyToBone(format, this.bones, this.rigids); conv.SetRigidsSettings(format, this.bones, this.rigids); conv.SettingJointComponent(format, this.bones, this.rigids); // 非衝突グループ List<int>[] ignoreGroups = conv.SettingIgnoreRigidGroups(format, this.rigids); int[] groupTarget = conv.GetRigidbodyGroupTargets(format, rigids); MMDEngine.Initialize(engine, groupTarget, ignoreGroups, this.rigids); } catch { } } #if UNITY_4_0 AvatarSettingScript avt_setting = new AvatarSettingScript(format.caller); avt_setting.SettingAvatar(); #endif var window = LoadedWindow.Init(); window.Text = format.head.comment; CreatePrefab(format); EndOfScript(format); }