first commit
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
using UnityEngine;
|
||||
|
||||
namespace OTG.Lab06.Characters
|
||||
{
|
||||
[RequireComponent(typeof(CharacterController))]
|
||||
public sealed class PlayerController : MonoBehaviour
|
||||
{
|
||||
[SerializeField] private float moveSpeed = 6f;
|
||||
[SerializeField] private float rotationSpeed = 12f;
|
||||
[SerializeField] private float gravity = -24f;
|
||||
[SerializeField] private Transform cameraTransform;
|
||||
|
||||
private CharacterController characterController;
|
||||
private float verticalVelocity;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
characterController = GetComponent<CharacterController>();
|
||||
}
|
||||
|
||||
private void Start()
|
||||
{
|
||||
if (cameraTransform == null && Camera.main != null)
|
||||
{
|
||||
cameraTransform = Camera.main.transform;
|
||||
}
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
Vector2 input = new Vector2(Input.GetAxisRaw("Horizontal"), Input.GetAxisRaw("Vertical"));
|
||||
input = Vector2.ClampMagnitude(input, 1f);
|
||||
|
||||
Vector3 forward = cameraTransform == null ? Vector3.forward : cameraTransform.forward;
|
||||
Vector3 right = cameraTransform == null ? Vector3.right : cameraTransform.right;
|
||||
forward.y = 0f;
|
||||
right.y = 0f;
|
||||
forward.Normalize();
|
||||
right.Normalize();
|
||||
|
||||
Vector3 move = forward * input.y + right * input.x;
|
||||
if (move.sqrMagnitude > 0.01f)
|
||||
{
|
||||
Quaternion targetRotation = Quaternion.LookRotation(move, Vector3.up);
|
||||
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotationSpeed * Time.deltaTime);
|
||||
}
|
||||
|
||||
if (characterController.isGrounded && verticalVelocity < 0f)
|
||||
{
|
||||
verticalVelocity = -2f;
|
||||
}
|
||||
|
||||
verticalVelocity += gravity * Time.deltaTime;
|
||||
Vector3 velocity = move * moveSpeed + Vector3.up * verticalVelocity;
|
||||
characterController.Move(velocity * Time.deltaTime);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user