Unity3d 物体移动的方向和转向问题

需求场景

比如在屏幕中有一条鱼,它可以向左或向右移动,当它移到屏幕外面时,会和另外一个物体发生碰撞,碰撞之后,它需要向相反的方向移动。碰撞到右边的物体时,改为向左边移动,碰撞到左边的物体时,向左右移动。

物体移动的代码

这个代码简单:

   public int speed = 90;  //移动的速度
   public Vector3 moveDirection = Vector3.right; //移动的方向
  
  //直线移动
   private void StraightMove()
   {
       if (speed > 0)
       {
         transform.Translate(moveDirection * RealSpeed() * Time.deltaTime);
       }
   }
  void Update()
   {
           StraightMove();
   }

将这个代码挂在鱼的身上就可以向右直线移动了。

移动方向和物体朝向

首先,上面有代码是默认是向右移动的,当然鱼头的朝向也必须是向右的,要不然看起来就是鱼在倒着走了。假如它碰撞到了右边的物体,这个时候,要让它向左移动。我第一次实现的时候,是简单的把moveDirect修改为了Vector.left,显示的效果确实是向左移动了,但是鱼头还是向右的,是倒着走的。得把鱼头调过来呀,于是我把鱼旋转了180度。这个时候却发现鱼在倒着向右走了。

如果仅仅是旋转180度,而moveDirection不变,还是Vector.right的话,就正常了,所以这个旋转是包含了方向的旋转的,

正解的解释

在旋转的时候,使用的是下面的代码:

transform.rotation = Quaternion.Euler(0, 0, 180);

它表示的是沿z轴旋转180度,这个时间物体的坐标系中,x轴和y轴都发生了旋转,而Vector.right并不是字面意思一直向右,而是沿x轴向右,即x轴的箭头方向,所以如果要返回,只需要旋转即可,不需要修改移动的方向。
Unity3d 物体移动的方向和转向问题_第1张图片
从上面的效果可以看到,是x轴发生了旋转,所以还是向“右”移动。
Unity3d 物体移动的方向和转向问题_第2张图片

你可能感兴趣的:(unity3d学习)