upper as the center of physics interactions
This commit is contained in:
@@ -6,46 +6,51 @@ public class TestScript : MonoBehaviour
|
||||
{
|
||||
private Rigidbody _rigidbody;
|
||||
private InputAction _moveAction;
|
||||
private InputAction _attackAction;
|
||||
private InputAction _jumpAction;
|
||||
|
||||
private ConfigurableJoint _configurableJoint;
|
||||
|
||||
private float smoothX = 0f;
|
||||
private float _smoothX;
|
||||
|
||||
private JointDrive _jointDrive;
|
||||
private JointDrive _softJointDrive;
|
||||
|
||||
[SerializeField]
|
||||
private float torqueForce;
|
||||
|
||||
[SerializeField]
|
||||
private float lerpSpeed;
|
||||
|
||||
|
||||
[SerializeField]
|
||||
private Rigidbody upperRigidBody;
|
||||
private float softPositionSpring = 200;
|
||||
|
||||
[SerializeField]
|
||||
private ForceMode forceMode;
|
||||
|
||||
private float _initMass;
|
||||
|
||||
public double GetTorqueForce()
|
||||
{
|
||||
return Math.Round(smoothX, 2);
|
||||
}
|
||||
[SerializeField]
|
||||
private Rigidbody _pump;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
_rigidbody = GetComponent<Rigidbody>();
|
||||
_initMass = upperRigidBody.mass;
|
||||
_rigidbody.sleepThreshold = 0f;
|
||||
upperRigidBody.sleepThreshold = 0;
|
||||
_configurableJoint = GetComponent<ConfigurableJoint>();
|
||||
|
||||
_jointDrive = _configurableJoint.yDrive;
|
||||
|
||||
_softJointDrive = new JointDrive {
|
||||
positionSpring = softPositionSpring,
|
||||
maximumForce = _jointDrive.maximumForce,
|
||||
positionDamper = _jointDrive.positionDamper,
|
||||
useAcceleration = _jointDrive.useAcceleration
|
||||
};
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
_moveAction = InputSystem.actions.FindAction("Move");
|
||||
_attackAction = InputSystem.actions.FindAction("Attack");
|
||||
_jumpAction = InputSystem.actions.FindAction("Jump");
|
||||
|
||||
_moveAction.Enable();
|
||||
_attackAction.Enable();
|
||||
_jumpAction.Enable();
|
||||
|
||||
}
|
||||
@@ -55,23 +60,23 @@ public class TestScript : MonoBehaviour
|
||||
var moveValue = _moveAction.ReadValue<Vector2>();
|
||||
|
||||
if (moveValue.x != 0) {
|
||||
smoothX = Mathf.Lerp(smoothX, moveValue.x, Time.deltaTime * lerpSpeed);
|
||||
_smoothX = Mathf.Lerp(_smoothX, moveValue.x, Time.deltaTime * lerpSpeed);
|
||||
} else {
|
||||
smoothX = 0;
|
||||
_smoothX = 0;
|
||||
}
|
||||
|
||||
|
||||
if (_jumpAction.WasPressedThisFrame()) {
|
||||
upperRigidBody.mass = _initMass + 10;
|
||||
_configurableJoint.yDrive = _softJointDrive;
|
||||
}
|
||||
|
||||
if (_jumpAction.WasReleasedThisFrame()) {
|
||||
upperRigidBody.mass = _initMass;
|
||||
_rigidbody.AddForce(transform.up * 10, ForceMode.Impulse);
|
||||
_pump.AddForce(transform.up * 10, ForceMode.Impulse);
|
||||
_configurableJoint.yDrive = _jointDrive;
|
||||
}
|
||||
}
|
||||
|
||||
private void FixedUpdate()
|
||||
{
|
||||
_rigidbody.AddTorque(new Vector3(0, 0, smoothX) * torqueForce, forceMode);
|
||||
_rigidbody.AddTorque(new Vector3(0, 0, _smoothX) * torqueForce, forceMode);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user