【问题标题】:Unity BoxCollider2D rotation not the same as GameObject rotationUnity BoxCollider2D 旋转与 GameObject 旋转不同
【发布时间】:2016-09-11 09:46:26
【问题描述】:

我的 GameObject 上的 BoxCollider2D 有点问题。当我旋转游戏对象时,BoxCollider2D 会随之旋转,但速度不会那么快。有没有办法让 BoxCollider2D 以与 GameObject 相同的速率移动?我觉得我错过了一些明显的东西。

Before Rotation
After Rotation

下面是我的播放器移动代码:

 Animator anim;
 Rigidbody2D rbody;
 float speed = 0f;
 public float moveSpeed = 0.6f;
 public float acceleration = 0.2f;
 public int turnSpeed = 20;
 bool sails = false;

 // Use this for initialization
 void Start () {

     anim = GetComponentInChildren<Animator> ();
     rbody = GetComponent<Rigidbody2D> ();
 }

 // Update is called once per frame
 void Update () {

     if (sails) {
         rbody.transform.Translate (transform.right * (speed * Time.deltaTime));
         speed += acceleration * Time.deltaTime;

         if (speed > moveSpeed)
             speed = moveSpeed;

         if (Input.GetKey (KeyCode.LeftArrow)) {
             rbody.transform.Rotate (0,0,turnSpeed * Time.deltaTime);
         }

         if (Input.GetKey (KeyCode.RightArrow)) {
             rbody.transform.Rotate (0,0,-turnSpeed * Time.deltaTime);
         }
     }

     if (!sails) {

         rbody.transform.Translate (transform.right * (speed * Time.deltaTime));
         speed += -acceleration * Time.deltaTime;

         if (speed < 0f)
             speed = 0f;
     }

     if (Input.GetKeyDown (KeyCode.Space)) {
         sails = !sails;
         anim.SetBool ("sailsDown", sails);
     }
 }

【问题讨论】:

    标签: unity3d rotation collision-detection gameobject


    【解决方案1】:

    问题不在于您的旋转,而在于您如何应用该动作。 您正在使用 transform.right 这是对象的本地权限。但是,当应用翻译时,您也将其应用于本地对象。

    例如,如果您的船朝下 (rotation.Z = -90),则 transform.right 值为 (0,-1,0),在世界坐标中这等于“向下”。

    然后你使用rbody.transform.Translate(vector),它将使用本地坐标转换对象。这意味着如果您将“向下”向量传递给它,它将在本地向下移动,在 Z 轴旋转 -90 的情况下,意味着相对于世界向“左”移动。

    你必须改变这一行:

    rbody.transform.Translate(transform.right * (speed * Time.deltaTime));
    

    收件人:

    rbody.transform.Translate(transform.right * (speed * Time.deltaTime),Space.World);
    

    或者:

    rbody.transform.Translate(Vector2.right * (speed * Time.deltaTime));
    

    【讨论】:

    • 这是完美的。我一直认为问题在于旋转。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2019-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多