Files
HeadlessHazard/Assets/Code/Scripts/Player/PlayerMovement.cs
2026-03-10 15:10:05 +01:00

74 lines
2.0 KiB
C#

using UnityEngine;
public class PlayerMovement : MonoBehaviour
{
public float WalkSpeed = 10;
public float rotationSpeed = 10f;
public Animator animator;
public Transform cameraTransform;
private Rigidbody m_rigidbody;
private PlayerInputController input;
private PlayerHeadController headController;
private Vector3 moveDirection;
private void Awake()
{
m_rigidbody = GetComponent<Rigidbody>();
input = GetComponent<PlayerInputController>();
animator = GetComponent<Animator>();
headController = GetComponent<PlayerHeadController>();
if (m_rigidbody != null)
{
m_rigidbody.freezeRotation = true;
}
}
private void FixedUpdate()
{
Vector2 m_moveAmt = input.MoveAmount;
float horizontal = m_moveAmt.x;
float vertical = m_moveAmt.y;
Vector3 cameraForward = cameraTransform.forward;
Vector3 cameraRight = cameraTransform.right;
cameraForward.y = 0f;
cameraRight.y = 0f;
cameraForward.Normalize();
cameraRight.Normalize();
moveDirection = (cameraForward * vertical + cameraRight * horizontal).normalized;
if (headController.isHoldingHead)
{
m_rigidbody.MovePosition(
m_rigidbody.position + Time.deltaTime * WalkSpeed * moveDirection
);
}
else
{
if (moveDirection.magnitude >= 0.1f)
{
m_rigidbody.MovePosition(
m_rigidbody.position + Time.deltaTime * WalkSpeed * moveDirection
);
Quaternion targetRotation = Quaternion.LookRotation(moveDirection);
transform.rotation = Quaternion.Slerp(
transform.rotation,
targetRotation,
rotationSpeed * Time.deltaTime
);
}
}
bool isMoving = m_moveAmt.magnitude > 0.1f;
animator.SetBool("isWalking", isMoving);
}
}