public static Joint AddJointComponent(GameObject go, glTF_VCAST_vci_joint joint, List <Transform> nodes) { var result = GetJoint(go, joint); if (joint.nodeIndex != -1) { var rigidbody = nodes[joint.nodeIndex].GetComponent <Rigidbody>(); if (rigidbody == null) { Debug.LogWarning("AddJointComponent connect RigidBody is not found."); return(null); } result.connectedBody = rigidbody; } // 共通パラメータ result.anchor = new Vector3(joint.anchor[0], joint.anchor[1], joint.anchor[2]).ReverseZ(); result.axis = new Vector3(joint.axis[0], joint.axis[1], joint.axis[2]).ReverseZ(); result.autoConfigureConnectedAnchor = joint.autoConfigureConnectedAnchor; result.connectedAnchor = new Vector3(joint.connectedAnchor[0], joint.connectedAnchor[1], joint.connectedAnchor[2]).ReverseZ(); result.enableCollision = joint.enableCollision; result.enablePreprocessing = joint.enablePreprocessing; result.massScale = joint.massScale; result.connectedMassScale = joint.connectedMassScale; // 個別パラメータ if (result.GetType() == typeof(HingeJoint)) { var hinge = result as HingeJoint; // spring hinge.useSpring = joint.useSpring; hinge.spring = new JointSpring() { spring = joint.spring.spring, damper = joint.spring.damper, targetPosition = joint.spring.targetPosition }; // limits hinge.useLimits = joint.useLimits; hinge.limits = new JointLimits() { min = joint.limits.min, max = joint.limits.max, bounciness = joint.limits.bounciness, bounceMinVelocity = joint.limits.bounceMinVelocity, contactDistance = joint.limits.contactDistance }; } else if (result.GetType() == typeof(SpringJoint)) { var spring = result as SpringJoint; spring.spring = joint.spring.spring; spring.damper = joint.spring.damper; spring.minDistance = joint.spring.minDistance; spring.maxDistance = joint.spring.maxDistance; spring.tolerance = joint.spring.tolerance; } return(result); }
public static void Serialize_vci_joints_ITEM(JsonFormatter f, glTF_VCAST_vci_joint value) { f.BeginMap(); if (!string.IsNullOrEmpty(value.type)) { f.Key("type"); f.Value(value.type); } if (true) { f.Key("nodeIndex"); f.Value(value.nodeIndex); } if (value.anchor != null && value.anchor.Length >= 3) { f.Key("anchor"); Serialize_vci_joints__anchor(f, value.anchor); } if (value.axis != null && value.axis.Length >= 3) { f.Key("axis"); Serialize_vci_joints__axis(f, value.axis); } if (true) { f.Key("autoConfigureConnectedAnchor"); f.Value(value.autoConfigureConnectedAnchor); } if (value.connectedAnchor != null && value.connectedAnchor.Length >= 3) { f.Key("connectedAnchor"); Serialize_vci_joints__connectedAnchor(f, value.connectedAnchor); } if (true) { f.Key("enableCollision"); f.Value(value.enableCollision); } if (true) { f.Key("enablePreprocessing"); f.Value(value.enablePreprocessing); } if (true) { f.Key("massScale"); f.Value(value.massScale); } if (true) { f.Key("connectedMassScale"); f.Value(value.connectedMassScale); } if (true) { f.Key("useSpring"); f.Value(value.useSpring); } if (value.spring != null) { f.Key("spring"); Serialize_vci_joints__spring(f, value.spring); } if (true) { f.Key("useLimits"); f.Value(value.useLimits); } if (value.limits != null) { f.Key("limits"); Serialize_vci_joints__limits(f, value.limits); } f.EndMap(); }