upper as the center of physics interactions

This commit is contained in:
2025-10-06 20:10:29 +02:00
parent c91fc398e0
commit 45abacddb3
14 changed files with 441 additions and 602 deletions

View File

@@ -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);
}
}