Unity3D ----- 角度求法
2016-01-06 13:31
239 查看
很多时候会遇到求玩家与敌人之间的角度问题:
比如敌人在你的可视范围,你要攻击他,
你必须知道(transform.forward)与(target.position - transform.position)的角度,
并且要知道你需要向左转还是向右转。
fromVector = transform.forward;
toVector = target.position - transform.position;
因有时会遇到敌人是飞行状态,所以我们这里把 toVector 重新定义下:
Vector3.Project(toVector,Vector3.up)表示toVector在Y轴上的投影
toVector -= Vector3.Project(toVector,Vector3.up);
角度的绝对值易求:
float angle = Vector3.Angle(fromVector,toVector);
利用向量积的右手法则计算出法向量
Vector3 normal = Vector3.Cross(fromVector,toVector);
点积判断法向量与对比轴的方向,Mathf.Sign()获取符号
angle *= Mathf.Sign(Vector3.Dot(normal,upVector));
这个便是即为我们要朝目标方向旋转的角度。
比如敌人在你的可视范围,你要攻击他,
你必须知道(transform.forward)与(target.position - transform.position)的角度,
并且要知道你需要向左转还是向右转。
fromVector = transform.forward;
toVector = target.position - transform.position;
因有时会遇到敌人是飞行状态,所以我们这里把 toVector 重新定义下:
Vector3.Project(toVector,Vector3.up)表示toVector在Y轴上的投影
toVector -= Vector3.Project(toVector,Vector3.up);
角度的绝对值易求:
float angle = Vector3.Angle(fromVector,toVector);
利用向量积的右手法则计算出法向量
Vector3 normal = Vector3.Cross(fromVector,toVector);
点积判断法向量与对比轴的方向,Mathf.Sign()获取符号
angle *= Mathf.Sign(Vector3.Dot(normal,upVector));
这个便是即为我们要朝目标方向旋转的角度。
相关文章推荐
- 简要分析unity3d中剪不断理还乱的yield
- Unity导入FBX汇总
- Unity中用触摸控制物体旋转和放大
- unity3D 使用rigidbody.AddForce(movement)
- Unity3D C# 委托和事件(之二)
- Unity 之 c# 版的 CharacterMotor
- unity 3d 学习视频
- unity关于shader投影 Fallback实际上并不是备胎
- Unity3D学习<一>使用NavMesh自动寻路
- Unity资源管理汇总
- [unity移植android]Unable to instantiate activity ComponentInfo
- Unity3D - 详解Quaternion类(一)
- Unity UGUI 使用 CCTween 实现 打字效果
- Unity中实现3D物体跳跃
- 【Unity实用小方法】判断shader使用贴图数
- Unity3D -- (UGUI)Toggle
- 【Unity开发】UNITY实现断点续传
- Unity不规则碰撞
- Unity3D -- (UGUI)Canvas
- Unity_Shader开发_Shader和渲染管线(二)