Невозможно добавить Force к моему объекту в Unity3D - PullRequest
0 голосов
/ 13 июля 2020

Я написал этот код, но объект не движется вперед. Вы можете мне с этим помочь?

Я использую версию Unity 2019.4.3f1

public class Movements : MonoBehaviour
{
    // A reference to Rigidbody component called "rb"
    public Rigidbody rb;
    public float forwardForce = 10f;
    public float sidewaysForce = 5f;
    
    // Update is called once per frame
    
    void FixedUpdate()
    {
        rb.AddForce(0f , 0f, forwardForce * Time.deltaTime); //Higher the frame rate --> lower the value of force | Time.deltaTime = amount of time since the computer drew last frame
    
        if (Input.GetKey(KeyCode.LeftArrow))
        {
            Debug.Log("Left");
            rb.AddForce(-sidewaysForce * Time.deltaTime, 0f, 0f, ForceMode.VelocityChange);
        }
        else if (Input.GetKey(KeyCode.RightArrow))
        {
            Debug.Log("Right");
            rb.AddForce(sidewaysForce * Time.deltaTime, 0f, 0f, ForceMode.VelocityChange);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 13 июля 2020

Вы должны внести некоторые изменения в свой код :) Вот несколько предложений:

  • Прежде всего, FixedUpdate () предназначен для физики (= rb.AddForce), но вы должны получить ввод в обновлении.
  • В FixedUpdate Time.deltaTime не нужен, потому что он уже вызывается фиксированное количество раз в секунду.
  • Если вы используете rb.AddForce, он добавит больше и больше Force каждый раз, когда он вызывается, так что ваше Rigidbody будет становиться все быстрее и быстрее. Если вам это не нужно, попробуйте переместить Rigidbody напрямую с изменением rb.velocity или используйте rb.MovePosition, чтобы переместить его (я предпочитаю изменять rb.velocity напрямую).

Чтобы разделить входы и физику в Update и FixedUpdate вы можете ввести некоторые частные переменные вверху, например:

private bool leftPressed;
private bool rightPressed;

, а затем вы можете получить доступ к этим переменным в FixedUpdate

Надеюсь, я смогу помочь: D

0 голосов
/ 13 июля 2020

Измените свой код на:

public class Movements : MonoBehaviour
    {
        // A reference to Rigidbody component called "rb"
        public Rigidbody rb;
        public float forwardForce = 10f;
        public float sidewaysForce = 5f;
    
        // Update is called once per frame
    
        void FixedUpdate()
        {
            if (Input.GetKey(KeyCode.LeftArrow))
            {
                Debug.Log("Left");
                rb.AddForce(-sidewaysForce * Time.deltaTime, 0f, 0f, ForceMode.Impulse);
            }
            else if (Input.GetKey(KeyCode.RightArrow))
            {
                Debug.Log("Right");
                rb.AddForce(sidewaysForce * Time.deltaTime, 0f, 0f, ForceMode.Impulse);
            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...