Unity 通过向量点乘叉乘判断方位
通过 判断 Unity 向量 方位
2023-06-13 09:11:38 时间
点积的计算方式为:a*b = |a| * |b| cos<a,b> 其中|a|和|b|表示向量的模,<a,b>表示两个向量的夹角。通过点积可以判断一个物体在另一个物体的前方还是后方。
using UnityEngine;
public class Foo : MonoBehaviour
{
//创建两个物体A和B
public Transform A;
public Transform B;
//点积结果
private float dot;
private void Update()
{
//物体A到B的方向
Vector3 direction = B.position - A.position;
//点积运算
dot = Vector3.Dot(direction.normalized, A.forward);
}
private void OnGUI()
{
//点积结果大于0表示物体B在物体A的前方 否则在后方
GUILayout.Label($"B在A的{(dot > 0 ? "前方" : "后方")}", "Box");
}
}
叉积的性质:
1.c垂直于a,c垂直于b,即向量c垂直于向量a、b所在的平面
2.模长|c| = |a| * |b| sin<a,b>
3.满足右手法则。a * b != b * a 而 a * b = - b * a
可以使用叉积来判断一个物体在另一个物体的左方还是右方。
using UnityEngine;
public class Foo : MonoBehaviour
{
public Transform A;
public Transform B;
//叉乘结果
private Vector3 cross;
private void Update()
{
//物体A到B的方向
Vector3 direction = B.position - A.position;
//叉积运算
cross = Vector3.Cross(direction.normalized, A.forward);
}
private void OnGUI()
{
//大于0表示B在A的左方,否则为右方
GUILayout.Label($"B在A的{(cross.y > 0 ? "左方" : "右方")}", "Box");
}
}
相关文章
- 5Why根因分析法:通过好问题引出一个好答案
- CentOS7 通过yum安装nginx
- 18万美元offer!ChatGPT通过谷歌L3入职测试,人类码农危?
- Allegro利用Skill语言实现通过焊盘获取对应的网络名的功能
- 通过 JavaScrpit 传递 Post 变量
- CentOS通过光盘启动救援数据详解程序员
- python通过httplib发送GET和POST请求代码详解编程语言
- Linux下通过SMB快速启动服务(linux启动smb)
- 时间设置Java通过Redis设置过期时间(redisjava过期)
- 开源脑电波设备问世 可通过图形判断人类思维
- 如何在Linux系统中通过用户组来管理用户
- 通过例子学习 Keystone – 每天5分钟玩转 OpenStack(19)
- 表容量如何在SQL Server中通过增加表容量优化数据空间(sqlserver 增大)
- 瞬息万变通过Redis查询统计数据(查总数redis)
- 通过JS来判断页面控件是否获取焦点
- php通过字符串调用函数示例
- JS通过分析userAgent属性来判断浏览器的类型及版本