帧同步 检测碰撞
由于 不同安卓 不同苹果系统,他们的浮点数 不一样,所以,如果用 unity自带的 Physics2D,来检测碰撞,肯定是有问题的。
我看了下网上,碰撞检测 有 分离轴检测 和 四叉树检测。
我觉得 有点小题大做了!!
游戏人物 我都定义是 圆形,不需要多边形。建筑都是 矩形。
那么,所得的算法无非就是以下几种。
点和矩形碰撞
/** * * @param x1 点 * @param y1 点 * @param x2 矩形view x * @param y2 矩形view y * @param w 矩形view 宽 * @param h 矩形view 高 * @return */ public static boolean isCollision(int x1, int y1, int x2, int y2, int w, int h) { if (x1 >= x2 && x1 <= x2 + w && y1 >= y2 && y1 <= y2 + h) { return true; } return false; }
矩形碰撞
/** * 检测两个矩形是否碰撞 * @return */ public boolean isCollisionWithRect(int x1, int y1, int w1, int h1, int x2,int y2, int w2, int h2) { if (x1 >= x2 && x1 >= x2 + w2) { return false; } else if (x1 <= x2 && x1 + w1 <= x2) { return false; } else if (y1 >= y2 && y1 >= y2 + h2) { return false; } else if (y1 <= y2 && y1 + h1 <= y2) { return false; } return true; }
点(x1,x2) , 圆心(x2,y2) ,半径r
if (Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) <= r) { // 如果点和圆心距离小于或等于半径则认为发生碰撞 return true; }
圆和圆
/** * 圆形碰撞 * * @param x1 * 圆形1的圆心X坐标 * @param y1 * 圆形2的圆心X坐标 * @param x2 * 圆形1的圆心Y坐标 * @param y2 * 圆形2的圆心Y坐标 * @param r1 * 圆形1的半径 * @param r2 * 圆形2的半径 * @return */ private boolean isCollisionWithCircle(int x1, int y1, int x2, int y2, int r1, int r2) { // Math.sqrt:开平方 // Math.pow(double x, double y): X的Y次方 //直角坐标系,依点1和点2做平行线,|x1-x2|为横向直角边,|y1-y2|为纵向直角边 依勾股定理 c^2=a^2+b^2 if (Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2)) <= r1 + r2) { // 如果两圆的圆心距小于或等于两圆半径和则认为发生碰撞 return true; } return false; }
但是,有人要提出,浮点运算 不同的问题,那我推荐 大家用 定点数 Fix64。
具体哪里,自己百度找吧。他还自带了一个随机定点数,随机的结果是 固定的,这样就不需要 自己写n多数据来 做假 随机数了。
用法也简单。
比如 上面 人物检测 碰撞,就是 点 到 圆心,看看是否 超过 你要的 半径。
// x1-x2 y1-y2 print(Fix64.Sqrt(Fix64.Pow(((Fix64)2.2f - (Fix64)1.4f), 2) + Fix64.Pow(((Fix64)3.3f - (Fix64)4.2f),2))); print(Math.Sqrt(Math.Pow(2.2f - 1.4f,2) + Math.Pow(3.3f - 4.2f, 2)));
使用定点数后,不同的安卓手机,输出的结果是一样的。
坐标定义也简单 :FixVector2 FixVector3 替代过去的Vector2 Vector3
输出就是 vec.ToVector2()
随机数:
SRandom room = new SRandom(20000); for (int i = 0; i < 432;i++ ) print(vec.ToVector2() + " " + room.Range(0, 999));
就先写到这里吧
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!