46 lines
1.5 KiB
C#
46 lines
1.5 KiB
C#
using Unity.Entities;
|
|
using Unity.Mathematics;
|
|
|
|
namespace Unity.Physics.Authoring
|
|
{
|
|
public class RigidJoint : BallAndSocketJoint
|
|
{
|
|
public quaternion OrientationLocal = quaternion.identity;
|
|
public quaternion OrientationInConnectedEntity = quaternion.identity;
|
|
|
|
public override void UpdateAuto()
|
|
{
|
|
base.UpdateAuto();
|
|
if (AutoSetConnected)
|
|
{
|
|
RigidTransform bFromA = math.mul(math.inverse(worldFromB), worldFromA);
|
|
OrientationInConnectedEntity = math.mul(bFromA.rot, OrientationLocal);
|
|
}
|
|
{
|
|
OrientationLocal = math.normalize(OrientationLocal);
|
|
OrientationInConnectedEntity = math.normalize(OrientationInConnectedEntity);
|
|
}
|
|
}
|
|
}
|
|
|
|
class RigidJointBaker : JointBaker<RigidJoint>
|
|
{
|
|
public override void Bake(RigidJoint authoring)
|
|
{
|
|
authoring.UpdateAuto();
|
|
|
|
var physicsJoint = PhysicsJoint.CreateFixed(
|
|
new RigidTransform(authoring.OrientationLocal, authoring.PositionLocal),
|
|
new RigidTransform(authoring.OrientationInConnectedEntity, authoring.PositionInConnectedEntity)
|
|
);
|
|
|
|
physicsJoint.SetImpulseEventThresholdAllConstraints(authoring.MaxImpulse);
|
|
|
|
var constraintBodyPair = GetConstrainedBodyPair(authoring);
|
|
|
|
uint worldIndex = GetWorldIndexFromBaseJoint(authoring);
|
|
CreateJointEntity(worldIndex, constraintBodyPair, physicsJoint);
|
|
}
|
|
}
|
|
}
|