电子指南针制作教程

2019/11/15160 浏览游戏开发攻略
声明:自己做的
说明:经过近一个星期的时间 相信有兴趣的玩家已经对此有所探索有所研究 本来打算和空间抛物自瞄明天一起发 但是因为这次更新中的特效图形功能会用到其中的方法 所以提早一天发出 希望能给大家一点点的启发与帮助 今天我就来分享属于我自己的电子指南针制作思路与过程 当然了 逻辑截图也一并发出
(老规矩)灵感来源:指南针
参考成品:某手表环形悬浮指南针 绝某某生游戏屏幕上方的电子指南针(方位仪或是什么东西)
整体思路:受到三维索敌系统中射线与屏幕交点逻辑的启发 电子指南针只需要将敌人所在的世界坐标换成是环绕自身能够跟随自身移动的指定方向上的点上发出的射线与屏幕交点(事实上步骤却比上述描述少但并没有那么简单)
TapTap
上一次指南针视频中提到过的疑问:射线与平面交点转化为屏幕(分辨率)坐标的这一过程到底是怎样的?
个人判断:经过后来更加深入的研究发现 摄像头所谓的眼睛其实是一个点(并不能理解为极小的球)这个点具备以相同角度反射入射光(可以理解为随时能形成与入射光反射光形成的等腰三角形底边高垂直的平面)光线经由这个点的反射投影到摄像机前的一片迷之弧面(迷之弧面体?)然后才通过迷之数学转换为屏幕(平面)影像 大概也正因为如此只由一个方向发射的射线能在自身调头后还能看到另一个活动方式与调头之前的点相反的点
正片开始:
一 刻度 由于射线与平面交点这一逻辑能形成前后两个点(同一时刻只有一个点)那么对于刻度的制作就可以省掉一半的力气(只需要做一百八十度的刻度 另一个一百八十度将自动形成)
与三维索敌系统不同的是电子指南针所用到的射线你可以理解为一束来自指定方向直径覆盖整个地图世界的光束(场?)在这个地图世界中的所有位置都能受到这一指定方向光束的照射 而摄像头上的一个点(眼睛)能够按照相同角度将光束中撞向这一个点的一道光线反射投影到摄像头前(视网膜)而实际上 这样的光束有三百六十束 分别来自三百六十度里的每一度 所以我们需要一个能够表达出任何一个方向的向量的一个自定义方法(如果不用自定义方法而全部直接在每帧循环中写会造成大量重复语句) 由此向量我们才能用数字通过逻辑系统使其具象化 此自定义方法如下图(图二)所示:
TapTap
对于上图的解释:首先我们需要在左上角参数位置创建一个小数并将其命名 这个参数将会是这个自定义方法(你可以理解为方程式)的X 也是在每帧循环中调用的当前零件功能中选取该自定义方法后需要输入的值 在右上角返回值中也创建一个小数并将其命名 这个返回值将会是这个自定义方法(方程式)的Y 连起来你可以将这个自定义方法理解为令这个X为多少时 通过这个方程能够得出Y的值 如下图(图三 每帧循环中调用的自定义方法语句截图 右边输入值就是X 整个语句表示Y的值)
TapTap
为了方便讲解 我用画图画了下图(图四)为了方便计算我设r为1 在三角函数的语句参数上直接使用左上创建的参数 由此得出该方向上的距离为1的点坐标(向量既有方向也有大小) 但我们要的不是这个点 而是这个向量所表示的方向
TapTap
射线平面交点逻辑语句参数的设定已经在之前讲过这里就不再啰嗦 转换为屏幕坐标后取出X分量(UI设定中只需要这个 其他另设)将这个X分量命名为右上角创建的返回值 这样一个输入角度得出该角度向量的自定义方法就完成了
但是这样做出来的一百八十度的刻度还会产生对应的另一个一百八十度的刻度啊 如何将这两者进行区分呢(往前看是0度 往后看也是0度 就很难受)
这时候我们需要做一个小(骚)操作:当该刻度在视野内时一切正常 当其移出视野后 其数值立刻改为其对面的数值(比如十度移出视野后变为190度)如此我们回头看到的自然就是我们回头“应该看到”的数值(我真聪明)那么我们的视野在水平方向能看到最多多少度呢 经过试验 是比九十度略大一点(我在四十五度方向能同时看到零度和九十度的刻度还多一些)逻辑语句则应为如果当自身朝向与该刻度方向夹角小于95(比90大一点随便取一个)那就显示本来的度数 如果大于95 就显示另一个对应的度数
由此我们需要另一个输入角度得出该角度与自身朝向的夹角的自定义方法来继续大量减少每帧循环中的重复语句 此自定义方法如下图(图五)
TapTap
对于上图的解释:我们需要在整个星舰(船或者车)前后两个方向各放置两个相同零件(可以是激光)读取这两个激光的世界坐标并用前面的减去后面的就能得出自身朝向向量(向量相减指向被减)然后取出其X和Z分量并令Y等于0创建它的水平方向的朝向向量 再算出两个水平方向的向量的夹角并命名为返回值创建的小数即可 那么这个输入角度就能得到这个角度方向与自身水平方向夹角数值的自定义方法也完成了
接下来就是用这两个方法来制作UI了 如下组图(图六 图七 图八)
TapTap
TapTap
TapTap
由于行数过多 我就把其中一个角度的刻度UI制作发出来 其他的只需要变换一下参数就行了 就不全部发出来了 为了方便快速修改所有刻度的位置尺寸 我在开头创建了统一的参数 后续所有角度都将引入这些参数
到这里 电子指南针就制作完成了 完成上述所有操作后你就能得到开头视频中的效果
希望这篇教程能够为各位玩家制作类似UI以及新出的特效图形功能运用提供坚实基础
8
7
2