using Cinemachine; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.AI; //using static UnityEditor.Searcher.SearcherWindow.Alignment; public class ControlMovingAndAnimation : MonoBehaviour { public Camera workerCamera; public GameObject bear; //Animation part private Animator anim; private CharacterController chara; private NavMeshAgent agent; //control moving part float Gravity = -9.8f; float yVelocity = 0f; private float MoveSpeed = 4f; // cinamachine part public CinemachineFreeLook freeLook; public Transform head; private Vector3 lastPosition; //hit part // private Vector3 lastPos; //public Transform hitPoint; // public float radius = 0.3f; // private HashSet hitTargets = new HashSet(); // public bool isAttacking = false; void Start() { // lastPosition = transform.position; anim = GetComponent(); // agent = GetComponent(); chara = GetComponent(); //lastPos = hitPoint.position; } // Update is called once per frame void Update() { //这些是点哪走哪 //Vector3 currentPosition = transform.position; //if (currentPosition != lastPosition) //{ // anim.SetBool("IsWalking", true); //} //else //{ // anim.SetBool("IsWalking", false); //} //lastPosition = currentPosition; //if (Input.GetMouseButtonDown(0)) //{ // Ray r = workerCamera.ScreenPointToRay(Input.mousePosition); // if (Physics.Raycast(r, out RaycastHit hit)) // { // agent.SetDestination(hit.point); // } //} //这些是键盘逻辑 FreeFalling(); PlayAnimations(); Move(); } private void FreeFalling() { if (chara.isGrounded && yVelocity < 0f) yVelocity = -2f; else yVelocity += Gravity * Time.deltaTime; chara.Move(new Vector3(0f, yVelocity, 0f) * Time.deltaTime); } private void PlayAnimations() { if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.S)) { anim.SetBool("IsWalking", true); } else { anim.SetBool("IsWalking", false); } if (Input.GetKey(KeyCode.LeftShift)) { MoveSpeed = 8f; anim.SetBool("IsRunning", true); } else { MoveSpeed = 4f; anim.SetBool("IsRunning", false); } if (Input.GetKeyDown(KeyCode.Space) && chara.isGrounded) { anim.SetTrigger("Jump"); yVelocity = Mathf.Sqrt(20f);//向上初速度为根号10米每秒,大概跳0.5米 } //if (Input.GetMouseButtonDown(0)) //{ // anim.SetTrigger("Fight"); // // StartAttacking(); //} } private void Move() { Vector3 cameraWorldPos = freeLook.transform.position;//虚拟相机的位置 Vector3 cameraToPlayerHeadVector = (head.position - cameraWorldPos).normalized;//相机指向角色的头,这个代表指向方向向量 Vector3 horizontalDirection = new Vector3(cameraToPlayerHeadVector.x, 0, cameraToPlayerHeadVector.z).normalized;//指向向量去除y方向再归一化 Vector3 cameraRight = Vector3.Cross(Vector3.up, horizontalDirection).normalized;//垂直于相机指向,右手边 float DeltaHorizontal = Input.GetAxis("Horizontal"); float DeltaVertical = Input.GetAxis("Vertical");//两个方向位移检测 -1到1 Vector3 forwardMove = horizontalDirection * DeltaVertical;//视线指向方向乘上你按键的量,决定前进还是后退 W必然前进,s必然朝你走 //Vector3 rightMove = cameraRight * DeltaHorizontal; //Vector3 move = forwardMove + rightMove; //Vector3 realMove = move.normalized * MoveSpeed * Time.deltaTime; Vector3 realMove = forwardMove * MoveSpeed * Time.deltaTime; chara.Move(realMove); if (forwardMove.sqrMagnitude > 0f) { Quaternion targetRotation = Quaternion.LookRotation(forwardMove); transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime * 5f); } } //public void StartAttacking() //{ // isAttacking = true; // hitTargets.Clear(); //} }