三维索敌系统(暂时仅适用于摄像头视角)

精华2019/11/081160 浏览游戏开发攻略
声明:这游戏里我不是第一个做出来的 但是由于自己的作品需要 又没有钱买 所以就摸索着做了一个
灵感来源:第一次见到这种索敌系统是在某大型单机游戏里
待克服难点:世界坐标转屏幕(实际上是分辨率)坐标的模式
思路:敌人发光被我眼睛捕捉
趴万:敌人如何发光与眼睛如何捕捉:调用射线与平面交点逻辑 前两个参数是两点确定一条线 后两个参数是两点加垂直确定一个面 射线起点就是敌人位置 射线方向当然是到处乱射(向量0,0,0)了 原本后两个参数我依次设置的摄像机坐标还有一前一后两个激光世界坐标向量相减(自身朝向)但是由于后面调试发现并不影响实际效果 虽然不知道为什么 但是为了减少步骤就删了 但是这是个关键思路还是说一下
TapTap
当我直接用射线交点坐标(这里还是世界坐标)转屏幕(分辨率)坐标的时候 发现设置的UI并没有出现 于是
乎我就消除了Z分量(这样就能把图像投影在视网膜上了)这一趴结束 下一趴图2图3结合看
趴吐:如何让敌人出了视野还能把视野外所在的方位留在视野内:如果图标屏幕坐标X大于1(超出了右边)那么就令他等于1 (步骤22到29)其他四边同理
TapTap
新问题的发现:当敌人跑出我视野 但还没跑到我后面的时候 一切都很顺利 但是当敌人跑到我后面的时候 敌人明明还在我下方 但是图标却跑到了我上方(图标 我 敌人呈一条直线)虽然也能判断敌人方位 但是却有点不方便 于是我就觉得是射线方向或者其所交的平面方向反了造成的 然而并不是 也不知道是啥原因
解决办法:那么既然在空间上无法解决这个问题 那么就用数字强行调整吧 在屏幕坐标中 已知一个点(X,Y)那么其中心对称点就是(1-X,1-Y)(步骤12 13)如此再进行上一个处理(步骤14到20)此趴结束 下一趴请结合图一图四
TapTap
趴数力:那么如何用逻辑区分敌人在我前面还是在我后面呢(当然不能用世界Z坐标直接表示 因为这还受到自身朝向的影响)
获取敌人在自身朝向方向上的相对位置那就是先把敌人对于眼睛的世界坐标转化为对于眼睛的局部坐标(以此眼睛便是这个空间坐标系的原点了)那么再读取Z分量就是敌人在自身朝向上的相对位置 (步骤2到3)因为Z轴正方向是往前 所以这个局部Z坐标大于0就表示敌人在前面 小于零就是在后面 (步骤30到33)
TapTap
最后在这个经过了种种条件限制的屏幕坐标上生成一个你喜欢的UI图案吧
你也可以在图标周围加入指向箭头 目标在后方时显示方向错误 显示目标距离等等
思维扩展:当你掌握了这个不是很难的AI之后 可以尝试制作输入世界坐标并自动寻路 自动导航功能
希望这个游戏越来越精彩 玩家越来越喜欢
8
7
11