Example #1
0
        // 剛体の生成
        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);
 }
Example #3
0
        // 剛体の値を代入する
        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);
                }
            }
        }
Example #4
0
        // 非衝突剛体の設定
        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);
        }
Example #5
0
        // 剛体の生成
        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);
        }
Example #6
0
	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;
	}