void LateUpdate() { //Movement Vector3 movement = Vector3.zero; float horInput = STBInput.GetAxis("HorizontalMove"); float verInput = STBInput.GetAxis("VerticalMove"); Matrix4x4 rotCamera = Matrix4x4.Rotate(Quaternion.Euler(0f, Camera.main.transform.eulerAngles.y, 0f)); if (horInput != 0 || verInput != 0) { movement.x = horInput * moveSpeed; movement.z = verInput * moveSpeed; movement = Vector3.ClampMagnitude(movement, moveSpeed); if (GameManager.IsDirectionAdjustOn) { float angle = Camera.main.AdjustAngle(transform.position, movement); Matrix4x4 adjust = Matrix4x4.Rotate(Quaternion.Euler(0f, angle, 0f)); movement = adjust * movement; } movement = rotCamera * movement; } if (GameCursor.isActivated) { Vector3 rotation = GameCursor.GetPosition() - transform.position; rotation.y = 0f; if (rotation != Vector3.zero) { Quaternion direction = Quaternion.LookRotation(rotation); transform.rotation = Quaternion.Lerp(transform.rotation, direction, rotSpeed * Time.deltaTime); } } else { float horRotInput = STBInput.GetAxis("HorizontalRotate"); float verRotInput = STBInput.GetAxis("VerticalRotate"); if (horRotInput != 0 || verRotInput != 0) { Vector3 lookDir = new Vector3(horRotInput, 0f, verRotInput); if (GameManager.IsDirectionAdjustOn) { float angle = Camera.main.AdjustAngle(transform.position, lookDir); Matrix4x4 adjust = Matrix4x4.Rotate(Quaternion.Euler(0f, angle, 0f)); lookDir = adjust * lookDir; } lookDir = rotCamera * lookDir; Quaternion direction = Quaternion.LookRotation(lookDir); transform.rotation = Quaternion.Lerp(transform.rotation, direction, rotSpeed * Time.deltaTime); } else if (movement.magnitude != 0f) { Quaternion direction = Quaternion.LookRotation(movement); transform.rotation = Quaternion.Lerp(transform.rotation, direction, rotSpeed * Time.deltaTime); } } flame.CheckSpeed(movement); if (!charaController.isGrounded) { charaController.Move(new Vector3(0f, -9.8f, 0f) * Time.deltaTime); } movement *= Time.deltaTime; if (IsMovable) { charaController.Move(movement); } //Wingmen if (wingmen.Count != 0) { for (int i = wingmen.Count - 1; i >= 0; i--) { if (wingmen[i] == null) { wingmen.RemoveAt(i); } } } //Attack if (IsArmed) { timeFireRecharge += Time.deltaTime; if (STBInput.GetButton("Fire")) { if (timeFireRecharge > fireGap) { Fire(); } } else { timeFireRecharge = Mathf.Clamp(timeFireRecharge, 0f, fireGap); } } }