前言
手机上的动作游戏,一般操作方式都是,
左边摇杆控制移动,右边滑屏旋转视角,
总的来说操作起来,没有键鼠来的精准,
所以大多数的手游,需要辅助瞄准系统。
已知条件
最简单的情况,我们先假设玩家与怪物都在一个平面上(y=0),并且所有怪物都相同。
那我们可以获取到:
1.玩家的坐标,
Vector3 p = Player.transform.position;
2.玩家的朝向,
Vector3 f = Player.transform.forward;
3.怪物的坐标,
Vector3 m = Monster.transform.position;
量化锁定优先级
接下来,我们要在不同的怪物身上计算它的锁定优先级。
那么如何计算呢?
1.按照直觉,离玩家越近的怪物,优先级应该越高。
2.除此之外,相同距离条件下,应该是越靠近玩家视野中央的怪优先级越高。
距离我们很好得到:
float distance = Vector3.Distance(p,m);
"靠近视野中央",换句话说就是:f与玩家->怪物这个向量的夹角越小:
float angle = Vector3.Angle(f,m-p);
那么最后,量化值T,如何用这两个数据计算呢?
我们先假定T越小,代表优先级越高。
不难发现,T与distance和angle都是正相关的,
因为距离越近,夹角越小,优先级越高,即
float T = distance * angle;
但是实际应用时,发现需要改进:https://blog.csdn.net/u011403161/article/details/111143602