https://blog.csdn.net/u011403161/article/details/111068526
书接上回,我们只粗略的用公式表示了一下优先级,来体现相关性
T = distance * angle,即距离越近,视偏角越小,T越小,锁定优先级越高。
但是实际应用的时候,容易发现,这个公式不是很符合直觉:
背面剔除
例如,距离4米视角30°和距离1米视角120°的优先级是相同,
而120°代表怪物在玩家背后,不应该和前方的怪物有相同的优先级。
所以我们先只计算前方的怪物,前方没有怪物的话,再按距离查找后方最近的怪物
(因为在背后,所以这里就没有使用夹角,只用距离)
公式优化
除了T = distance * angle这样的简单相乘,还有很多其他公式也可以表示正相关性,这里先给出结论:
T = distance * Mathf.Sin(angle * Mathf.Deg2Rad);
这个公式可以理解为:
玩家->怪物这条向量,旋转到玩家forward方向的过程中,扫过的扇形面积。
有兴趣也可以试试其他公式,找到最符合“直觉”的那个,比如
可以使用距离的n次方(n>0),乘以夹角的余弦,正切等等
这样就可以了吗?
目前我们只考虑了静态的情况,实际上在游戏运行的时候,还要考虑其他因素,下期讲解