要知道在Unity中物体的各个方向,需要首先了解" 向量"的知识。
获取左前,右前的几个方向有一个方法是用欧拉角或者四元数,旋转物体然后获取物体的transform.forward。
比如获取右前方,y轴旋转45度,transform.rotation= Quaternion.Euler(transform.eulerAngles.x, transform.eulerAngles.y+45, transform.eulerAngles.z);
然后在获取transform.forward,此时的朝向就是旋转之前的右前方。
但是这种方法,需要每次旋转,比较麻烦。
=====下面直接用向量来获取方向=====
一、获取正前方transform.forward(0,0,1)到左方向-transform.right(-1,0,0)的方向。
//两向量相减,得到一个方向
A向量到B向量的方向=B向量 - A向量;
B向量到A向量的方法=A向量 - B向量;
二、获取一个从transform.forward正前方到左方向-transform.right的一个向量,(这个向量就是我们要获取的左前方)。
起点+方向=终点
transform.position+left_front //这段代码的意思就是,得到一个终点位置,transform.position是物体的坐标,left_front 是一个方向。
//0.5f表示,正前方到左方向,两个向量之间的,距离,0.5表示一半距离,0.1表示十分之一距离,可以按照自己的需求,去获取两个向量之间的一个向量。
//transform.forward+正前方到左方向的中间向量,得到一个新的向量。
var left_front =transform.forward+ (-transform.right-transform.forward) * 0.5f;
//绘制线(第一个参数为起点,第二个参数为终点,第三个参数是线的颜色)
Debug.DrawLine(transform.position, transform.position+left_front , Color.yellow);
蓝色线为前方向,红色线是左方向,绿色线是前方transform.forward到左方-transform.right的方向。
左前,右前,左后,右后。
//0.5f表示,正前方到左方向,两个向量之间的,距离,0.5表示一半距离,0.1表示十分之一距离,可以按照自己的需求,去获取两个向量之间的一个向量。
//transform.forward+正前方到左方向的中间向量,得到一个新的向量。
//左前
var left_front =transform.forward+ (-transform.right-transform.forward) * 0.5f;
//右前
var right_front = transform.forward + (transform.right - transform.forward) * 0.5f;
//左后
var left_back = -transform.forward + (-transform.right - (-transform.forward)) * 0.5f;
//右后
var right_back = -transform.forward + (transform.right - (-transform.forward)) * 0.5f;
//绘制线(第一个参数为起点,第二个参数为终点,第三个参数是线的颜色)
Debug.DrawLine(transform.position, transform.position+left_front , Color.yellow);
Debug.DrawLine(transform.position, transform.position + right_front , Color.yellow);
Debug.DrawLine(transform.position, transform.position + left_back, Color.yellow);
Debug.DrawLine(transform.position, transform.position + right_back, Color.yellow);
无论怎么旋转,移动,方向始终保持不变。
总结:获取物体的各个方向,可能还有更好的方法,这里只是分享自己做项目中的一些方法。需要我们对向量的知识,运算,有一定的学习和实践。在实现功能之前,我们还没有掌握更好的方法的时候,争取用最实用,通俗的方法,解决问题。