Unity BoxCollider2D旋转与GameObject旋转不同



我在GameObject上有一个BoxCollider2D的问题。当我旋转GameObject时,BoxCollider2D也随之旋转,但速度没有那么快。是否有办法让BoxCollider2D以与GameObject相同的速度移动?我觉得我错过了一些明显的东西。

旋转前


旋转后

下面是我的玩家移动代码:
 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);
     }
 }

问题不是你的旋转,而是你如何应用运动。你使用的是transform.right,它是对象的局部权限。但是,当应用翻译时,你也将它局部地应用于对象。

例如,如果你的船面朝下(旋转)。Z = -90),变换。右值为(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));

最新更新