// 剛体の生成 GameObject[] CreateRigids(GameObject[] bones) { PMDFormat.RigidbodyList list = format_.rigidbody_list; // 剛体の登録 GameObject[] rigid = new GameObject[list.rigidbody_count]; for (int i = 0; i < list.rigidbody_count; i++) { rigid[i] = new GameObject("r" + list.rigidbody[i].rigidbody_name); //rigid[i].AddComponent<Rigidbody>(); // 剛体本体にはrigidbodyは適用しない // 各種Colliderの設定 Collider collider = null; switch (list.rigidbody[i].shape_type) { case 0: collider = EntrySphereCollider(list.rigidbody[i], rigid[i]); break; case 1: collider = EntryBoxCollider(list.rigidbody[i], rigid[i]); break; case 2: collider = EntryCapsuleCollider(list.rigidbody[i], rigid[i]); break; } // マテリアルの設定 collider.material = CreatePhysicMaterial(list.rigidbody[i]); } return(rigid); }
private PMDFormat.RigidbodyList ReadRigidbodyList() { PMDFormat.RigidbodyList result = new PMDFormat.RigidbodyList(); result.rigidbody_count = binary_reader_.ReadUInt32(); result.rigidbody = new PMDFormat.Rigidbody[result.rigidbody_count]; for (int i = 0; i < result.rigidbody_count; i++) { result.rigidbody[i] = ReadRigidbody(); } return(result); }
// 剛体の値を代入する void SetRigidsSettings(GameObject[] bones, GameObject[] rigid) { PMDFormat.RigidbodyList list = format_.rigidbody_list; for (int i = 0; i < list.rigidbody_count; i++) // iは剛体番号 { // 剛体の関連ボーンのインデックス int rigidRefIndex = list.rigidbody[i].rigidbody_rel_bone_index; // ローカル座標の確定 Vector3 localPos = list.rigidbody[i].pos_pos * scale_; // - rigid[i].transform.position; // ここで位置の決定 if (rigidRefIndex >= ushort.MaxValue) { // 関連ボーン無し if (rigid[i].GetComponent <Rigidbody>() == null) { rigid[i].AddComponent <Rigidbody>(); } UnityRigidbodySetting(list.rigidbody[i], rigid[i]); rigid[i].transform.localPosition = localPos; // 関連ボーンなしの剛体はセンターボーンに接続している rigid[i].transform.position = localPos + format_.bone_list.bone[0].bone_head_pos * scale_; // 回転の値を決める Vector3 rot = list.rigidbody[i].pos_rot * Mathf.Rad2Deg; rigid[i].transform.rotation = Quaternion.Euler(rot); } else // 関連ボーン有り { // とりあえずここで剛体を追加・設定 if (bones[rigidRefIndex].GetComponent <Rigidbody>() == null) { bones[rigidRefIndex].AddComponent <Rigidbody>(); } UnityRigidbodySetting(list.rigidbody[i], bones[rigidRefIndex]); rigid[i].transform.localPosition = localPos; // 回転の値を決める Vector3 rot = list.rigidbody[i].pos_rot * Mathf.Rad2Deg; rigid[i].transform.rotation = Quaternion.Euler(rot); } } }
// 非衝突剛体の設定 List <int>[] SettingIgnoreRigidGroups(GameObject[] rigids) { // 非衝突グループ用リストの初期化 const int MaxGroup = 16; // グループの最大数 List <int>[] ignoreRigid = new List <int> [MaxGroup]; for (int i = 0; i < 16; i++) { ignoreRigid[i] = new List <int>(); } // それぞれの剛体が所属している非衝突グループを追加していく PMDFormat.RigidbodyList list = format_.rigidbody_list; for (int i = 0; i < list.rigidbody_count; i++) { ignoreRigid[list.rigidbody[i].rigidbody_group_index].Add(i); } return(ignoreRigid); }
// 剛体の生成 GameObject[] CreateRigids(GameObject[] bones) { PMDFormat.RigidbodyList list = format_.rigidbody_list; if (!System.IO.Directory.Exists(System.IO.Path.Combine(format_.folder, "Physics"))) { AssetDatabase.CreateFolder(format_.folder, "Physics"); } // 剛体の登録 GameObject[] rigid = new GameObject[list.rigidbody_count]; for (int i = 0; i < list.rigidbody_count; i++) { rigid[i] = new GameObject("r_" + list.rigidbody[i].rigidbody_name); //rigid[i].AddComponent<Rigidbody>(); // 剛体本体にはrigidbodyは適用しない // 各種Colliderの設定 Collider collider = null; switch (list.rigidbody[i].shape_type) { case 0: collider = EntrySphereCollider(list.rigidbody[i], rigid[i]); break; case 1: collider = EntryBoxCollider(list.rigidbody[i], rigid[i]); break; case 2: collider = EntryCapsuleCollider(list.rigidbody[i], rigid[i]); break; } // マテリアルの設定 collider.material = CreatePhysicMaterial(list.rigidbody[i]); } return(rigid); }
private PMDFormat.RigidbodyList ReadRigidbodyList() { PMDFormat.RigidbodyList result = new PMDFormat.RigidbodyList(); result.rigidbody_count = binary_reader_.ReadUInt32(); result.rigidbody = new PMDFormat.Rigidbody[result.rigidbody_count]; for (int i = 0; i < result.rigidbody_count; i++) { result.rigidbody[i] = ReadRigidbody(); } return result; }