using System.Collections; using System.Collections.Generic; using UnityEngine; public class Movement : MonoBehaviour { public Rigidbody rigi; public bool MOVE = false; public bool useApplyRootMotion = false; [Header("이동 속도")] [Range(0, 10)] public float spdMove = 3f; [Header("회전 속도")] [Range(0, 5)] public float spdRotate = 1f; [Header("멈추게 될 거리")] [Range(0, 1)] public float disStop = 0.25f; [Space(10)] public bool USE_TIMER = false; [Range(0, 10)] public float timeAlive = 0.5f; public void Initialized(System.Action OnMoveEnd, bool useApplyRootMotion) { this.OnMoveEnd = OnMoveEnd; this.useApplyRootMotion = useApplyRootMotion; StopRigibody(); } GameObject targetChase; System.Action OnMoveEnd; float timeSum = -1, timeSumPos = -1; Vector3 vecDir = Vector3.zero; Vector3 posStart = Vector3.zero; Vector3 posEnd = Vector3.zero; /// /// 쫓아갈 오브젝트로 목적지를 설정합니다. /// /// /// /// public void TargetSetting(GameObject target) { targetChase = target; TargetSetting(targetChase.transform.position); } /// /// 이동할 목적지을 설정합니다. /// Animator 의 ApplyRootMotion 의 상태에 따라 이동 방식이 변경 됩니다. /// /// 도착 위치 /// 이동 완료 이벤트 /// Animator 의 ApplyRootMotion 상태 public float a = 0; public void TargetSetting(Vector3 pos) { MOVE = true; posStart = transform.position; posEnd = pos; timeSum = 0; timeSumPos = 0; float dis = Vector3.Distance(posStart, posEnd); a = (Time.fixedDeltaTime * spdMove) / dis; } public void Stop(bool EVENT = false) { MOVE = false; StopRigibody(); if(EVENT && OnMoveEnd != null) OnMoveEnd(); } void StopRigibody() { if (rigi == null) return; rigi.velocity = Vector3.zero; } void FixedUpdate() { //if (MOVE) //{ // if (targetChase != null && !targetChase.activeSelf) // { // Stop(); // return; // } // if (timeSum != -1) // { // timeSum += (Time.fixedDeltaTime * spdRotate); // vecDir = posEnd - transform.position; // vecDir.y = 0; // //transform.rotation = Quaternion.LookRotation(Vector3.Slerp(transform.forward, vecDir.normalized, timeSum), Vector3.up); // if (1 < timeSum) // { // timeSum = -1; // //타겟이 설정되어 있다면 방향과 거리는 항상 바뀔수 있음 // if (targetChase != null) // { // timeSum = 0; // posEnd = targetChase.transform.position; // } // } // } // if (!useApplyRootMotion) // { // if (rigi != null) // { // rigi.position += (vecDir.normalized * spdMove) * Time.fixedDeltaTime; // Debug.LogWarning($"{rigi.position}"); // } // else // { // transform.position = Vector3.LerpUnclamped(posStart, posEnd, timeSumPos += a); // if (1f < timeSumPos) // Stop(true); // } // } // else if (Vector3.Distance(transform.position, posEnd) < disStop) // { // Stop(true); // } //} if (Input.GetKey(KeyCode.A)) { rigi.position += Vector3.left * spdMove; } else if (Input.GetKey(KeyCode.D)) { rigi.position += Vector3.right * spdMove; } if (Input.GetKey(KeyCode.W)) { rigi.position += Vector3.forward * spdMove; } else if (Input.GetKey(KeyCode.S)) { rigi.position += Vector3.back * spdMove; } } [Space(20)] public bool TEST = false; }