前言
在写行为树的时候,有个转向节点,控制的行为就是控制自身向指定点转向
但是在写的时候,对一些概念很不理解,就自己写了个demo场景学习一下
这个测试场景想要实现的很简单,就是把这个箭头转向绿色的目标点。
在写这个测试demo的时候顺便实践了一下一直死记硬背的点积和叉积,
- 简单的说: 点乘判断角度,叉乘判断方向。
- 形象的说: 当一个敌人在你身后的时候,
- 点乘得到你当前的面朝向的方向和你到敌人的方向的所成的角度大小
- 叉乘可以判断你是往左转还是往右转更好的转向敌人
一、计算你到敌人的方向的所成的角度大小
方法①:Vector2.Angle
float angle = Vector2.Angle(targetForward, sourceForward);
方法②:使用点积
// 计算 a、b 单位向量的点积,得到夹角余弦值,|a.normalized|*|b.normalized|=1;
二、往左转还是往右转更好的转向敌人
//叉积算出方向 unity是左手坐标系,所以反过来了
具体解释见:Unity中点乘和叉乘的原理及使用方法
三、旋转方式 二维坐标系中的向量旋转公式
方法①:用2维向量旋转(逆时针旋转公式)进行旋转,顺时针角度为负,逆时针角度为正
private
方法②:Quaternion.LookRotation
public
参考:【Unity3d】平滑旋转、转向的实现
具体的demo场景已上传github:2d旋转测试DEMO场景 测试脚本
参考
Unity中角度与弧度相互转换
Unity--向量点乘叉乘在Unity中的使用