// 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); }
// 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); }
// 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); }
// 物理素材の定義 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); }
// 物理素材の定義 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); }
// 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); }
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; }