예제 #1
0
        // Sphere Colliderの設定
        Collider EntrySphereCollider(PMDFormat.Rigidbody rigid, GameObject obj)
        {
            SphereCollider collider = obj.AddComponent <SphereCollider>();

            collider.radius = rigid.shape_w * scale_;
            return(collider);
        }
 private static PMXFormat.Rigidbody ConvertRigidbody(PMDFormat pmd, int rigidbody_index)
 {
     PMXFormat.Rigidbody result        = new PMXFormat.Rigidbody();
     PMDFormat.Rigidbody pmd_rigidbody = pmd.rigidbody_list.rigidbody[rigidbody_index];
     result.name                   = pmd_rigidbody.rigidbody_name;
     result.english_name           = "";
     result.rel_bone_index         = (uint)pmd_rigidbody.rigidbody_rel_bone_index;
     result.group_index            = pmd_rigidbody.rigidbody_group_index;
     result.ignore_collision_group = pmd_rigidbody.rigidbody_group_target;
     result.shape_type             = (PMXFormat.Rigidbody.ShapeType)pmd_rigidbody.shape_type;
     result.shape_size             = new Vector3(pmd_rigidbody.shape_w, pmd_rigidbody.shape_h, pmd_rigidbody.shape_d);
     result.collider_position      = pmd_rigidbody.pos_pos;
     if (pmd_rigidbody.rigidbody_rel_bone_index < pmd.bone_list.bone.Length)
     {
         result.collider_position += pmd.bone_list.bone[pmd_rigidbody.rigidbody_rel_bone_index].bone_head_pos;
     }
     else
     {
         result.collider_position += pmd.bone_list.bone[0].bone_head_pos;
     }
     result.collider_rotation = pmd_rigidbody.pos_rot;
     result.weight            = pmd_rigidbody.rigidbody_weight;
     result.position_dim      = pmd_rigidbody.rigidbody_pos_dim;
     result.rotation_dim      = pmd_rigidbody.rigidbody_rot_dim;
     result.recoil            = pmd_rigidbody.rigidbody_recoil;
     result.friction          = pmd_rigidbody.rigidbody_friction;
     result.operation_type    = (PMXFormat.Rigidbody.OperationType)pmd_rigidbody.rigidbody_type;
     return(result);
 }
예제 #3
0
        // Capsule Colliderの設定
        Collider EntryCapsuleCollider(PMDFormat.Rigidbody rigid, GameObject obj)
        {
            CapsuleCollider collider = obj.AddComponent <CapsuleCollider>();

            collider.radius = rigid.shape_w * scale_;
            collider.height = (rigid.shape_h + rigid.shape_w * 2) * scale_;
            return(collider);
        }
예제 #4
0
        // Box Colliderの設定
        Collider EntryBoxCollider(PMDFormat.Rigidbody rigid, GameObject obj)
        {
            BoxCollider collider = obj.AddComponent <BoxCollider>();

            collider.size = new Vector3(
                rigid.shape_w * 2f * scale_,
                rigid.shape_h * 2f * scale_,
                rigid.shape_d * 2f * scale_);
            return(collider);
        }
예제 #5
0
        // 物理素材の定義
        PhysicMaterial CreatePhysicMaterial(PMDFormat.Rigidbody rigid)
        {
            PhysicMaterial material = new PhysicMaterial(format_.name + "_r" + rigid.rigidbody_name);

            material.bounciness      = rigid.rigidbody_recoil;
            material.staticFriction  = rigid.rigidbody_friction;
            material.dynamicFriction = rigid.rigidbody_friction;

            return(material);
        }
예제 #6
0
        // 物理素材の定義
        PhysicMaterial CreatePhysicMaterial(PMDFormat.Rigidbody rigid)
        {
            PhysicMaterial material = new PhysicMaterial(format_.name + "_r" + rigid.rigidbody_name);

            material.bounciness      = rigid.rigidbody_recoil;
            material.staticFriction  = rigid.rigidbody_friction;
            material.dynamicFriction = rigid.rigidbody_friction;

            AssetDatabase.CreateAsset(material, format_.folder + "/Physics/" + GetFilePathString(material.name) + ".asset");
            return(material);
        }
예제 #7
0
 // Unity側のRigidbodyの設定を行う
 void UnityRigidbodySetting(PMDFormat.Rigidbody rigidbody, GameObject targetBone, bool setted = false)
 {
     // rigidbodyの調整
     if (!setted)
     {
         targetBone.GetComponent <Rigidbody>().isKinematic = (0 == rigidbody.rigidbody_type);
         targetBone.GetComponent <Rigidbody>().mass        = Mathf.Max(float.Epsilon, rigidbody.rigidbody_weight);
         targetBone.GetComponent <Rigidbody>().drag        = rigidbody.rigidbody_pos_dim;
         targetBone.GetComponent <Rigidbody>().angularDrag = rigidbody.rigidbody_rot_dim;
     }
     else
     {
         // Rigidbodyはボーンに対して適用されるので複数ある場合は平均を取る
         targetBone.GetComponent <Rigidbody>().mass        += rigidbody.rigidbody_weight;
         targetBone.GetComponent <Rigidbody>().drag        += rigidbody.rigidbody_pos_dim;
         targetBone.GetComponent <Rigidbody>().angularDrag += rigidbody.rigidbody_rot_dim;
         targetBone.GetComponent <Rigidbody>().mass        *= 0.5f;
         targetBone.GetComponent <Rigidbody>().drag        *= 0.5f;
         targetBone.GetComponent <Rigidbody>().angularDrag *= 0.5f;
     }
 }
 private PMDFormat.Rigidbody ReadRigidbody()
 {
     PMDFormat.Rigidbody result = new PMDFormat.Rigidbody();
     result.rigidbody_name           = ConvertByteToString(binary_reader_.ReadBytes(20), "");
     result.rigidbody_rel_bone_index = binary_reader_.ReadUInt16();
     result.rigidbody_group_index    = binary_reader_.ReadByte();
     result.rigidbody_group_target   = binary_reader_.ReadUInt16();
     result.shape_type         = binary_reader_.ReadByte();
     result.shape_w            = binary_reader_.ReadSingle();
     result.shape_h            = binary_reader_.ReadSingle();
     result.shape_d            = binary_reader_.ReadSingle();
     result.pos_pos            = ReadSinglesToVector3(binary_reader_);
     result.pos_rot            = ReadSinglesToVector3(binary_reader_);
     result.rigidbody_weight   = binary_reader_.ReadSingle();
     result.rigidbody_pos_dim  = binary_reader_.ReadSingle();
     result.rigidbody_rot_dim  = binary_reader_.ReadSingle();
     result.rigidbody_recoil   = binary_reader_.ReadSingle();
     result.rigidbody_friction = binary_reader_.ReadSingle();
     result.rigidbody_type     = binary_reader_.ReadByte();
     return(result);
 }
예제 #9
0
	private PMDFormat.Rigidbody ReadRigidbody() {
		PMDFormat.Rigidbody result = new PMDFormat.Rigidbody();
		result.rigidbody_name = ConvertByteToString(binary_reader_.ReadBytes(20), "");
		result.rigidbody_rel_bone_index = binary_reader_.ReadUInt16();
		result.rigidbody_group_index = binary_reader_.ReadByte();
		result.rigidbody_group_target = binary_reader_.ReadUInt16();
		result.shape_type = binary_reader_.ReadByte();
		result.shape_w = binary_reader_.ReadSingle();
		result.shape_h = binary_reader_.ReadSingle();
		result.shape_d = binary_reader_.ReadSingle();
		result.pos_pos = ReadSinglesToVector3(binary_reader_);
		result.pos_rot = ReadSinglesToVector3(binary_reader_);
		result.rigidbody_weight = binary_reader_.ReadSingle();
		result.rigidbody_pos_dim = binary_reader_.ReadSingle();
		result.rigidbody_rot_dim = binary_reader_.ReadSingle();
		result.rigidbody_recoil = binary_reader_.ReadSingle();
		result.rigidbody_friction = binary_reader_.ReadSingle();
		result.rigidbody_type = binary_reader_.ReadByte();
		return result;
	}