相信很多做游戏的开发人员都会面临 物体碰撞检测的问题 一般的手游不需要考虑Y轴 只需要用到简单的 点与面的位置关系 即1点在面内 2 点在面外或则点与线的位置关系1 点在线上 2点在线外,假如要做类似天涯明月刀的端游 人物可能会跳到房子上 这时候你需要考虑到Y轴 那么点与面的位置关系就不满足碰撞需求了 我们这时候就需要用圆柱体碰撞 或则 立方体碰撞了 这里我要讲解的就是立方体碰撞检测的算法
首先做立方体碰撞检测算法需要哪些条件呢 1 立方体的8个顶点坐标 2 要检测的点坐标
假如我要做一个英雄普通攻击碰撞 我可以得到英雄的三维坐标 知道英雄的坐标,立方体的8个顶点坐标也随即可以得出了 怪物坐标自然也是已知的 分析到这里 接下来就是实现算法了
知道了立方体的8个顶点坐标 和怪物坐标
我们以立方体其中一个顶点作为坐标原点,过原点其中两个顶点分别在另两条坐标轴上 即立方体3个顶点分别在3条轴上 然后将怪物变换位置从世界坐标到坐标原点为Point1 这个时候以新坐标原点立方体的长宽高也形成了一个新的坐标Point2 最后分别比较Point1和Point2, x、y、z即可得出结果 文字分析结束下面上代码
#region 立方体碰撞
/// <summary>
/// 立方体碰撞(主角朝向 可对空)使用函数
/// </summary>
/// <param name="transform">当前对象</param>
/// <param name="Point">敌人坐标</param>
/// <param name="width">立方体宽度</param>
/// <param name="distance">立方体长度</param>
/// <param name="hight">立方体高度</param>
/// <param name="JuLi">当前对象离脚底的距离</param>
/// <returns>是否在立方体内</returns>
public static bool Cubecollision(ref Transform Cude, Transform transform, Vector3 Point, float width, float distance, float hight, float JuLi)
{
//得出立方体的8个顶点坐标
Quaternion r = transform.rotation;
Vector3 DownLeftback = (transform.position + (r * Vector3.left) * width + (r * Vector3.down) * JuLi);