Как совершать движения Rigidbody в шутере от первого лица в Unity?

Итак, я делаю игру FPS в Unity, и я использовал transform.translate для движения, но это позволяет игроку перемещаться через стены, если он движется достаточно быстро (диагональное движение), и даже не имеет значения, насколько велик хитбокс стены. является.

Вот мой код контроллера проигрывателя:

https://pastebin.com/6g7j8G6v

Вот код движения:

void FixedUpdate()
{
    myBody.MovePosition(transform.position + (transform.forward * 
    Time.deltaTime * speed));
}

void Update()
{

float axisX = Input.GetAxis ("Horizontal");
float axisY = Input.GetAxis ("Vertical");

Дополнительная информация: с помощью этого кода игрок теперь перемещается в очень определенных направлениях, независимо от вращения. Кроме того, W и S перемещаются вверх и вниз, а не вперед и назад. Также не обращайте внимания на // перед линией движения Rigidbody, я удалил ее.


person Taylor Umongus Has    schedule 14.01.2021    source источник
comment
Измените вопрос и включите весь код во фрагмент, чтобы улучшить читаемость.   -  person Sean Gonzalez    schedule 14.01.2021


Ответы (1)


Я предлагаю вам оформить заказ https://learn.unity.com/tutorial/environment-and-player?projectId=5c51479fedbc2a001fd5bb9f#5c7f8529edbc2a002053b786 официальная документация unity

using UnityEngine;
using System.Collections;

public class PlayerController : MonoBehaviour {

    public float speed;

    private Rigidbody rb;

    void Start ()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate ()
    {
        float moveHorizontal = Input.GetAxis ("Horizontal");
        float moveVertical = Input.GetAxis ("Vertical");

        Vector3 movement = new Vector3 (moveHorizontal, 0.0f, moveVertical);

        rb.AddForce (movement * speed);
    }
}

У них есть довольно простой пример кода о том, как это сделать, имейте в виду, что это решение все еще требует нормализации векторного движения, и для этого сделайте следующее:

rb.AddForce (movement.normalized  * speed);
person Sean Gonzalez    schedule 14.01.2021