Как я могу исправить эту проблему, когда игрок движется не в правильном направлении?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу исправить эту проблему, когда игрок движется не в правильном направлении?

Сообщение Anonymous »

Я пытаюсь создать сценарий C# Unity motion с новой системой ввода. Я столкнулся с проблемой, из-за которой игрок не движется в том направлении, в котором я смотрю. Система также использует Cinemachine для камеры от третьего лица и боевых камер. Все остальное работает правильно.
СКРИПТ:

Код: Выделить всё

using UnityEngine;

public class ThirdPersonCam : MonoBehaviour
{
private DeviceControls controls;

[Header("Objects")]
public GameObject thirdPersonCam;
public GameObject combatCam;

[Header("Camera")]
public CameraStyle currentStyle;
public Transform orientation;
public Transform player;
public Transform playerObj;
public Rigidbody rb;
public float rotationSpeed;
public Transform combatLookAt;

[Header("Movement")]
public float moveSpeed;
float horizontalInput;
float verticalInput;
Vector3 moveDirection;

[Header("Grounded")]
public float playerHeight;
public LayerMask whatIsGround;
bool grounded;
public float groundDrag;

[Header("Jumping")]
public float jumpForce;
public float jumpCooldown;
public float airMultiplier;
bool readyToJump;

public enum CameraStyle
{
Basic,
Combat
}

private void Awake()
{
controls = new DeviceControls();
controls.Gameplay.Jump.performed += ctx => { Jump(); };
}

private void Start()
{
Cursor.lockState = CursorLockMode.Locked;
Cursor.visible = false;
rb.freezeRotation = true;
readyToJump = true;
AimCancel();
}

private void Update()
{
Vector3 viewDir = player.position - new Vector3(transform.position.x, player.position.y, transform.position.z);
orientation.forward = viewDir.normalized;

grounded = Physics.Raycast(transform.position, Vector3.down, playerHeight * 0.5f + 0.2f, whatIsGround);
if (grounded) rb.drag = groundDrag;
else rb.drag = 0;

MyInput();
SpeedControl();

if (currentStyle == CameraStyle.Basic)
{
moveDirection = orientation.forward * verticalInput + orientation.right * horizontalInput;
if (moveDirection != Vector3.zero) playerObj.forward = Vector3.Slerp(playerObj.forward, moveDirection.normalized, Time.deltaTime * rotationSpeed);
}
else if (currentStyle == CameraStyle.Combat)
{
Vector3 dirToCombatLookAt = combatLookAt.position - new Vector3(transform.position.x, player.position.y, transform.position.z);
orientation.forward = dirToCombatLookAt.normalized;
playerObj.forward = dirToCombatLookAt.normalized;
}
}

private void FixedUpdate()
{
MovePlayer();
}

private void MyInput()
{
horizontalInput = Input.GetAxis("Horizontal");
verticalInput = Input.GetAxis("Vertical");
}

private void MovePlayer()
{
if (grounded) rb.AddForce(moveDirection.normalized * moveSpeed * 10f, ForceMode.Force);
else if (!grounded) rb.AddForce(moveDirection.normalized * moveSpeed * 10f * airMultiplier, ForceMode.Force);
}

private void SpeedControl()
{
Vector3 flatVel = new Vector3(rb.velocity.x, 0f, rb.velocity.z);
if (flatVel.magnitude > moveSpeed)
{
Vector3 limitedVel = flatVel.normalized * moveSpeed;
rb.velocity = new Vector3(limitedVel.x, rb.velocity.y, limitedVel.z);
}
}

private void Jump()
{
if (readyToJump &&  grounded)
{
readyToJump = false;
rb.velocity = new Vector3(rb.velocity.x, 0f, rb.velocity.z);
rb.AddForce(transform.up * jumpForce, ForceMode.Impulse);
Invoke(nameof(ResetJump), jumpCooldown);
}
else return;
}

private void ResetJump()
{
readyToJump = true;
}

private void SwitchCameraStyle(CameraStyle newStyle)
{
thirdPersonCam.SetActive(false);
combatCam.SetActive(false);

if (newStyle == CameraStyle.Basic) thirdPersonCam.SetActive(true);
if (newStyle == CameraStyle.Combat) combatCam.SetActive(true);

currentStyle = newStyle;
}

private void AimStart()
{
SwitchCameraStyle(CameraStyle.Combat);
}

private void AimCancel()
{
SwitchCameraStyle(CameraStyle.Basic);
}

public void OnEnable()
{
controls.Enable();
}

public void OnDisable()
{
controls.Disable();
}
}
Я пытался изменить некоторые параметры в моей функции Update(), но мои изменения значений не повлияли на результат.

Подробнее здесь: https://stackoverflow.com/questions/791 ... ct-directi
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»