using System.Collections.Generic; using UnityEngine; using UnityEngine.InputSystem; public class ThirdCharacterController : MonoBehaviour { public CharacterController characterController; public Animator animator; public Transform forward; public Transform model; public List hitItems = new List(); public Cinemachine.CinemachineVirtualCamera vCam; public float moveSpeed = 5f; public float jumpSpeed = 2f; public float turnSpeed = 10f; public float gravity = 10f; public float maxDistance = 100f; public LayerMask layerMask; public bool areaPick; Vector3 moveDir; Vector2 moveInput; private void Start() { Cursor.lockState = CursorLockMode.Locked; } private void Update() { Move(); } public void CheckRayHit() { Ray ray = new Ray(vCam.transform.position, vCam.transform.forward); RaycastHit raycastHit; if(Physics.Raycast(ray,out raycastHit, maxDistance, layerMask)) { Debug.Log($"CheckRayHit:{raycastHit.collider.gameObject.name}"); hitItems[0] = raycastHit.collider.gameObject; } } public void Move() { moveDir = new Vector3(moveInput.x, moveDir.y, moveInput.y); forward.eulerAngles = new Vector3(0, vCam.transform.eulerAngles.y, 0); moveDir = forward.TransformDirection(moveDir); if (moveInput != Vector2.zero) { animator?.SetBool("Move", true); Quaternion target = Quaternion.LookRotation(new Vector3(moveDir.x, 0, moveDir.z)); model.rotation = Quaternion.Slerp(model.rotation, target, turnSpeed * Time.deltaTime); } else animator?.SetBool("Move", false); if (!characterController.isGrounded) moveDir.y -= gravity * Time.deltaTime; characterController.Move(moveDir * moveSpeed * Time.deltaTime); } public void OnMove(InputAction.CallbackContext context) { if(characterController.isGrounded) moveInput = context.ReadValue(); else moveInput = Vector2.zero; } public void OnJump(InputAction.CallbackContext context) { if (context.performed && characterController.isGrounded) { moveDir.y = jumpSpeed; } } public void OnPickUp(InputAction.CallbackContext context) { } }