Unity BoxCollider2D旋转与GameObject旋转

时间:2016-09-11 09:46:27

标签: unity3d rotation collision-detection gameobject

我对GameObject上的BoxCollider2D有点问题。当我旋转GameObject时,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);
     }
 }

1 个答案:

答案 0 :(得分:0)

问题不在于你的轮换,而是你如何应用这个动作。 您使用的是transform.right,它是对象的本地权限。但是,在应用翻译时,您也可以在本地将其应用于对象。

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

但是你使用rbody.transform.Translate(vector)将使用本地坐标翻译对象。这意味着,如果你通过它,那么&#34; down&#34;向量,它将在本地向下移动,在Z轴旋转-90的情况下,意味着移动&#34; left&#34;相对于世界。

您必须更改此行:

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));