feat: player movement
This commit is contained in:
74
Assets/Code/Scripts/Player/PlayerMovement.cs
Normal file
74
Assets/Code/Scripts/Player/PlayerMovement.cs
Normal file
@@ -0,0 +1,74 @@
|
||||
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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user