摘要: OBB全称Oriented bounding box,方向包围盒算法。其表现效果与Unity的BoxCollider并无二致。由于3D空间的OBB需要多考虑一些情况 这里仅关注2D空间下的OBB。 实现效果: 网上有许多OBB的讲解,具体步骤也未必一样,我的做法: 在两个凸多边形中找到一根轴,凸多边 阅读全文
posted @ 2018-08-19 14:21 HONT 阅读(1985) 评论(0) 推荐(0)
摘要: (注意 取的是中心点位置来计算边界点,而非投影点位置。可以自行修改为投影点) 之前想做一些体积碰撞的效果但是遇到点问题,胶囊边界点检测这个涉及到球体的交点检测以及圆柱的交点检测 觉得可以放上来,相交检测的代码逻辑来源于网络。 using System.Collections; using Syste 阅读全文
posted @ 2018-08-13 20:43 HONT 阅读(979) 评论(0) 推荐(0)
摘要: 原文在《游戏编程精粹2》的1.2中,BloomFilter是一种可以快速检测是否存在集合包含关系的数据结构,但有一定的误识别率。 该结构的优点 判断包含关系时效率较高,粗略测试了下比List快一倍(不拆分哈希) 由于内部是位数组BitArray,做交集并集几乎不产生开销 该结构的缺点 有一定的误识别 阅读全文
posted @ 2018-05-05 10:07 HONT 阅读(696) 评论(0) 推荐(0)
摘要: 出处:https://stackoverflow.com/questions/19916880/sphere-sphere-intersection-c-3d-coordinates-of-collision-points 修改(加入包含和不相交情况的判断): 阅读全文
posted @ 2018-05-04 20:03 HONT 阅读(731) 评论(0) 推荐(0)
摘要: 出处: https://answers.unity.com/questions/366802/get-intersection-of-a-line-and-a-circle.html 测试脚本(返回值为交点数量): 阅读全文
posted @ 2018-05-04 20:03 HONT 阅读(1093) 评论(0) 推荐(0)
摘要: 在《游戏编程精粹1》的4.7中,原文主要解决赛车游戏的路程确定问题和光照插值问题。 但原文中没有提及如何判断四边形区域是否包含的问题,只有提到point-in-sector这个函数名称 实现是T和L两部分做向量投影,但是不乘以最终方向矢量,而是以两边的点乘结果求得比例。 那么我对其做了一些修改,改成 阅读全文
posted @ 2018-04-15 16:24 HONT 阅读(462) 评论(0) 推荐(0)
摘要: 在Unity中挂载Renderer的对象可以使用OnBecameVisible/OnBecameInvisible来接收剔除事件。 但是非Renderer对象则要自己处理相交检测。 文中的方法测试结果比Unity的GeometryUtility效率要高一倍左右,且没有GC。不过只支持圆柱 下面是直接 阅读全文
posted @ 2018-04-06 13:08 HONT 阅读(620) 评论(0) 推荐(0)
摘要: 这是一种避免一次性生成所有内容的可预测随机数实现 原文使用了简易的随机数生成算法来生成,可以支持的最大数字是uint型的最大值4294967295。 文中提到的宏无限分解和微无限分解指的是用种子生成的随机结果再作为种子继续生成,细化到具体星球,植被等等。 这样当玩家在任意坐标区域内,只需要生成附近一 阅读全文
posted @ 2018-04-04 12:23 HONT 阅读(1024) 评论(0) 推荐(0)
摘要: 在《游戏编程精粹1》里的1.10处讲解了位数组的应用,原文意把位操作变为类似数组的形式,从而更加直观。 (注意C#中已经内置这种数据结构,叫做BitArray) 不过我联想到是否可以设计一个位锁的概念。 我遇到过这样一个问题,游戏中有一些模块的参数必须在所有使用者都结束后才可以被释放。 例如时间系统 阅读全文
posted @ 2018-03-28 09:23 HONT 阅读(348) 评论(0) 推荐(0)
摘要: 来自《游戏编程精粹1》寻路部分文章,使用CatmullRom插值来达到平滑,算是对书中内容的练习。 using UnityEngine; using System.Collections; public class Practice : MonoBehaviour { public Transfor 阅读全文
posted @ 2017-09-02 20:25 HONT 阅读(1064) 评论(0) 推荐(0)