Движущееся твердое тело

Я новичок в единстве, и у меня есть объект, который я хочу переместить. Но этот объект вообще не двигается. Он меняет свое направление, так что объект может смотреть влево / вправо, но не перемещается с точки, в которой он стартовал.

Итак, в основном объект может вращаться, но не двигаться в любом направлении.

Возникает вопрос: как заставить объект двигаться?

public float movementSpeed = 20;
Animator anim;
Rigidbody rb;

public Text countText;
public Text winText;

private int count;

void Start()
{
    anim = GetComponent<Animator>();
    rb = GetComponent<Rigidbody>();
    count = 0;
    SetCountText();
    winText.text = "";
}

void FixedUpdate()
{
    ControllPlayer();
}

void ControllPlayer()
{
    float moveHorizontal = Input.GetAxisRaw("Horizontal");
    float moveVertical = Input.GetAxisRaw("Vertical");

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

    if (movement != Vector3.zero)
    {
        transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(movement), 0.15f);
        anim.SetInteger("Walk", 1);
    }
    else
    {
        anim.SetInteger("Walk", 0);
    }


    rb.addForce(movement * movementSpeed * Time.deltaTime);

}

public void OnTriggerEnter(Collider other)
{
    if (other.gameObject.CompareTag("Pick Up"))
    {
        other.gameObject.SetActive(false);
        count = count + 1;
        SetCountText();
    }
}

void SetCountText()
{
    countText.text = "Food: " + count.ToString();
    if (count >= 10)
    {
        SceneManager.LoadScene("Victory");
    }
}

person Akin    schedule 26.08.2019    source источник


Ответы (1)


Это кажется немного сложным для того, что вам нужно сделать.

В настоящее время я особо не занимаюсь трехмерным миром, но при быстром поиске на YouTube был обнаружен это видео.

Код, который он использовал, был

transform.Translate(moveSpeed*Input.GetAxis("Horizontal")*Time.deltaTime,0f,moveSpeed*Input.GetAxis("Vertical")*Time.deltaTime); 

внутри метода Update(), где moveSpeed является общедоступной переменной, поэтому вы можете изменить ее в инспекторе.

Затем вы можете проверить, двигаетесь ли вы, и соответственно установить значения анимации.

Я всегда рекомендовал бы помещать движение игрока в Update()method, так как в противном случае он может показаться медленным и пропускать нажатия клавиш, особенно если у вас много чего происходит - например, двойной прыжок.

Надеюсь, это поможет, и удачи с Unity :).

Кстати, поскольку вы новичок, я бы уже рекомендовал сначала поискать на Youtube учебное пособие - в большинстве случаев кто-то делал его по тому, что вы хотите сделать. У таких авторов, как Brackeys, огромное количество действительно полезных вещей.

person Wzrd    schedule 26.08.2019
comment
Привет, спасибо за комментарий! Что ж, у меня уже было кое-что, что работало transform.Translate(movement * movementSpeed * Time.deltaTime, Space.World);, но мой учитель сказал, что было бы проще использовать rb.addforce, но я не могу заставить это работать. Но в любом случае большое спасибо за ваш комментарий! - person Akin; 27.08.2019
comment
Если вы хотите использовать физическую систему, вы должны использовать AddForce. Не могли бы вы разместить скриншот вашего компонента RigidBody? Возможно, вы установили свойство IsKinematic на true. - person Pablo Expósito; 28.08.2019