Unity 向量知识,如何不旋转自身,获取transform物体的左前方,右前方。左后方,右后方。

要知道在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);

无论怎么旋转,移动,方向始终保持不变。

 

 

总结:获取物体的各个方向,可能还有更好的方法,这里只是分享自己做项目中的一些方法。需要我们对向量的知识,运算,有一定的学习和实践。在实现功能之前,我们还没有掌握更好的方法的时候,争取用最实用,通俗的方法,解决问题。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值