Как я могу заставить своего персонажа прыгать вокруг, когда я его перемещаю? - PullRequest
0 голосов
/ 22 апреля 2020

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

if (Input.GetAxis("Vertical") > 0)

  transform.position += new Vector3(transform.forward.x, 2f, transform.forward.z) * 2 * Time.deltaTime;

Это работает, но проблема в том, что при столкновении с другим элементом персонаж скользит вверх и оказывается поверх объекта.

Я оставляю гифку, чтобы понять, что происходит:

enter image description here

1 Ответ

0 голосов
/ 22 апреля 2020

Используйте Raycast при движении вперед, чтобы проверить, ударили ли вы что-нибудь. если он ничего не возвращает, вы можете сделать шаг вперед. ( Взгляните сюда )

using UnityEngine;

// C# example.

public class ExampleClass : MonoBehaviour
{
    public float maxDetectionDistance = 1;
    void Update()
    {
        RaycastHit hit;
        var isHit = Physics.Raycast(transform.position, transform.forward, out hit, maxDetectionDistance);
        // Does the ray intersect any objects excluding the player layer
        if (!isHit)
        {
            if (Input.GetAxis("Vertical") > 0)
            {
                // your movement function
                transform.position += new Vector3(transform.forward.x, 2f, transform.forward.z) * 2 * Time.deltaTime;
            }
        }
        else
        {
            Debug.DrawRay(transform.position, transform.TransformDirection(Vector3.forward) * hit.distance, Color.yellow);
            Debug.Log("Did Hit");

        }
    }
}
...