private int _groundMask = 1 << 8; // Layer = Ground void Awake() { _thisTransform = transform; _movementVariables = new PlayerMovementVariables(); _movementVariables.Direction = transform.TransformDirection(Vector3.forward); //_controller = GetComponent<CharacterController>(); Spawn(); }
override public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { GameObject player = animator.gameObject; PlayerMovementVariables movementstats = player.GetComponent <PlayerMovementVariables>(); // This if check may be redundant. // Only way into this state is for input is received. if (animator.GetFloat("Input/X") != 0 || animator.GetFloat("Input/Z") != 0) { // Direction for the player to move towards based on camera. Vector3 camerax = (new Vector3(Camera.main.transform.right.x, 0, Camera.main.transform.right.z) * animator.GetFloat("Input/X")); Vector3 cameraz = (new Vector3(Camera.main.transform.forward.x, 0, Camera.main.transform.forward.z) * animator.GetFloat("Input/Z")); Vector3 m_cameraPosition = (cameraz + camerax); //m_movement = m_movement.normalized; // Slightly different data is used but the math is the same in either case. // If locked on you rotate towards your target when you move resulting in // circling the target. if (EntityStats.Instance.GetObjectOfEntity("Player").GetComponent <PlayerMovementVariables>().m_lockon) { Vector3 bossdirection = movementstats.m_target.transform.position - player.transform.position; bossdirection = bossdirection.normalized; Quaternion targetRotation = Quaternion.LookRotation(bossdirection); player.transform.rotation = Quaternion.Slerp(player.transform.rotation, targetRotation, movementstats.m_rotationTime); ////Debug.DrawRay(player.transform.position, bossdirection); //float targetAngle = Mathf.Atan2(bossdirection.x, bossdirection.z) * Mathf.Rad2Deg; //float angle = Mathf.SmoothDampAngle(player.transform.eulerAngles.y, targetAngle, ref turnSmoothVelocity, movementstats.m_roationTime); //player.transform.rotation = Quaternion.Euler(0f, angle, 0f); } else { // Position to look towards Quaternion targetRotation = Quaternion.LookRotation(m_cameraPosition); player.transform.rotation = Quaternion.Slerp(player.transform.rotation, targetRotation, movementstats.m_rotationTime); } m_movement = new Vector3(m_cameraPosition.x * movementstats.m_walkSpeed * Time.deltaTime, 0, m_cameraPosition.z * movementstats.m_walkSpeed * Time.deltaTime); //Debug.Log(m_movement); //Debug.DrawRay(player.transform.position, m_movement); player.GetComponent <Rigidbody>().MovePosition(player.transform.position + m_movement); //player.transform.position = player.transform.position + m_movement; // What to pass to the animator. // May need extra rules to avoid sidesteps into diagonal. // They would go after the norm. Vector3 toAnim = player.transform.worldToLocalMatrix * m_movement; toAnim = toAnim.normalized; //Debug.DrawRay(player.transform.position,toAnim); //Debug.Log(toAnim); animator.SetFloat("Movement/X", toAnim.x); animator.SetFloat("Movement/Z", toAnim.z); } }