Rigidbody GameObject ограничен в движении во время движения - PullRequest
0 голосов
/ 25 февраля 2020

Так что я довольно новичок в Unity, но мне удалось составить скрипт, который перемещает игрока по плоскости. Проблема в том, что, пройдя определенное расстояние, он не будет двигаться дальше. Я хочу, чтобы движение было неограниченным.

using UnityEngine;

public class Movement_Player : MonoBehaviour
{
    public Rigidbody rb;
    public float default_speed;
    public float sprint_multiplier;

    private float speed;

    private void Update()
    {
        speed = default_speed;
        float horizontal = Input.GetAxis("Horizontal");
        float vertical = Input.GetAxis("Vertical");
        Vector3 movement = new Vector3(horizontal, 0.0f, vertical);
        if (Input.GetKey(KeyCode.LeftShift))
            speed = speed * sprint_multiplier;
        else
            speed = default_speed;
        rb.MovePosition(movement * speed);
    }
}

1 Ответ

0 голосов
/ 25 февраля 2020

Вам нужно переместить свою MovePosition за пределами Update в FixedUpdated. FixedUpdate - это правильное место для ввода кода физи c.

Вам также нужно сбрасывать вектор движения при каждом обновлении, если вы хотите, чтобы новый вектор смещения пропускал движение при перетаскивании и нужно было добавить фактор времени * Time.fixedDeltaTime

using UnityEngine;

public class Movement_Player : MonoBehaviour
{
public Rigidbody rb;
public float default_speed;
public float sprint_multiplier;

private float speed;

private void Update()
{
    Vector3 movement = Vector3.zero
    speed = default_speed;
    float horizontal = Input.GetAxis("Horizontal");
    float vertical = Input.GetAxis("Vertical");
    Vector3 movement = new Vector3(horizontal, 0.0f, vertical);
    if (Input.GetKey(KeyCode.LeftShift))
        speed = speed * sprint_multiplier;
    else
        speed = default_speed;

}
void FixedUpdate()

{

    rb.MovePosition(rb.position + movement * speed * Time.fixedDeltaTime);

}

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...