Кто-нибудь может помочь мне понять мой сценарий 2d-перемещения в Unity?

#c# #unity3d

#c# #unity3d

Вопрос:

 using UnityEngine;

public class PlayerMove : MonoBehaviour
{

    public Rigidbody2D rb;
    public Transform spawn;
    public Vector2 moveforward;
    public Vector2 jumpheight;
    public Vector3 turn;

    void OnCollisionStay2D(Collision2D collision)
    {
        if (collision.collider.tag == "Floor")
        {
        //Move
            if (Input.GetKeyDown("w"))
            {
                rb.AddForce(jumpheight * Time.deltaTime);
            }

            if (Input.GetKeyDown("space"))
            {
                rb.AddForce(jumpheight * Time.deltaTime);
            }            
        }

        //Death
        if (collision.collider.tag == "Death")
        {
            transform.position = spawn.position;
        }
    }


    // Update is called once per frame
    void FixedUpdate()
    {
        //Move
        if (Input.GetKey("d"))
        {
            transform.rotation = Quaternion.LookRotation(turn);
            rb.AddForce(moveforward * Time.deltaTime);
        }

        if (Input.GetKey("a"))
        {
            transform.rotation = Quaternion.LookRotation(-turn);
            rb.AddForce(-moveforward * Time.deltaTime);
        }
    }
}
  

Я придумал это сейчас для своего 2d-платформера.
Я ненавижу, когда он говорит в основном код.
Я ненавижу, когда он говорит в основном код.Я ненавижу, когда он говорит в основном код.Я ненавижу, когда он говорит в основном код.Я ненавижу, когда он говорит в основном код.Я ненавижу, когда он говорит в основном код.Я ненавижу, когда он говорит в основном код.Я ненавижу, когда он говорит в основном код.Я ненавижу, когда он говорит в основном код.Я ненавижу, когда он говорит в основном код.Я ненавижу, когда он говорит в основном код.

Комментарии:

1. и в чем именно ваша проблема? Где конкретно у вас возникают трудности?

2. Я использую Free Pixel Space Platform Pack, и когда я ухожу с края, я медленно наклоняюсь, а затем падаю. Любые альтернативы этому коду новый код.

Ответ №1:

Компонент Rigidbody на вашем объекте отслеживает «скорость» объектов, которая является «скоростью» на каждой оси. Velocity — это Vector3 со значением x, значением y, значением z для каждой оси (Vector2 просто не изменяет z) AddForce увеличивает каждое из этих 3 свойств скорости на соответствующие значения x, y, z, которые вы «добавляете». время.deltaTime предназначен для распределения дополнительной силы с течением времени.

Комментарии:

1. Я использую Free Pixel Space Platform Pack, и когда я ухожу с края, я медленно наклоняюсь, а затем падаю. Любые альтернативы этому коду.

Ответ №2:

попробуйте это. Rigidbody2D имеет 3 измерения, когда вы ставите его как AddForce(значение); он также реализует X, Z, Y, поэтому вместо этого попробуйте присвоить значение только первому параметру функции Addforce, который равен X. надеюсь, это поможет. также извините за мой плохой английский 🙂

  void FixedUpdate()
    {
        //Move
        if (Input.GetKey("d"))
        {
            transform.rotation = Quaternion.LookRotation(turn);
            rb.AddForce(moveforward * Time.deltaTime,0f,0f);
        }

        if (Input.GetKey("a"))
        {
            transform.rotation = Quaternion.LookRotation(-turn);
            rb.AddForce(-moveforward * Time.deltaTime,0f,0f);
        }
    }