Unity3d 物体移动的方向和转向问题
2020-02-08 本文已影响0人
王广帅
需求场景
比如在屏幕中有一条鱼,它可以向左或向右移动,当它移到屏幕外面时,会和另外一个物体发生碰撞,碰撞之后,它需要向相反的方向移动。碰撞到右边的物体时,改为向左边移动,碰撞到左边的物体时,向左右移动。
物体移动的代码
这个代码简单:
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轴的箭头方向,所以如果要返回,只需要旋转即可,不需要修改移动的方向。
正解效果
从上面的效果可以看到,是x轴发生了旋转,所以还是向“右”移动。
欢迎关注