下载 App

电子指南针制作教程

2019/11/15163 浏览游戏开发攻略
声明:自己做的
说明:经过近一个星期的时间 相信有兴趣的玩家已经对此有所探索有所研究 本来打算和空间抛物自瞄明天一起发 但是因为这次更新中的特效图形功能会用到其中的方法 所以提早一天发出 希望能给大家一点点的启发与帮助 今天我就来分享属于我自己的电子指南针制作思路与过程 当然了 逻辑截图也一并发出
(老规矩)灵感来源:指南针
参考成品:某手表环形悬浮指南针 绝某某生游戏屏幕上方的电子指南针(方位仪或是什么东西)
整体思路:受到三维索敌系统中射线与屏幕交点逻辑的启发 电子指南针只需要将敌人所在的世界坐标换成是环绕自身能够跟随自身移动的指定方向上的点上发出的射线与屏幕交点(事实上步骤却比上述描述少但并没有那么简单)
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以及新出的特效图形功能运用提供坚实基础
00:20
请问下一步应该怎么做呢截图
请问下一步应该怎么做呢
1 赞
3 回复
00:39
3DUI持续研究中(好难( Ĭ ^ Ĭ ))截图
3DUI持续研究中(好难( Ĭ ^ Ĭ ))
关于绕轴(0,0,1)方向的旋转同时受到绕轴(0,1,0)和(1,0,0)方向的旋转影响 暂时没想到可以不花太多逻辑语句解决的办法 机械阻尼的数学模型也不打算花头发研究了 反正摄像机也要用这些机械关节 干脆就一起共享好了 对了 自定义方法里面如果需要添加很多参数 直接都覆盖了返回值了 那个加号跑到屏幕外面去了 没法滑动 怎么继续增加参数呢
3 赞
1 回复
00:30
开始尝试制作3DUIヾ(◍°∇°◍)ノ゙截图
开始尝试制作3DUIヾ(◍°∇°◍)ノ゙
在这方面完全是萌新 基本上都不懂(`・ω・´) 计划是先建好机械模型以便观察 最后再用数学模型替换 遇到实在不会的数学模型 就保留隐形机械模型╮(╯▽╰)╭
3 赞
01:00
简易星舰内部舱门模块截图
简易星舰内部舱门模块
由左右两扇互补滑轨门组成 为了节约材料 造型还是比较简单的 门缝应该算是榫卯结构吧 加上滑轨 能形成完美的视觉气密(从任何角度都无法在门闭合之后找到任何通过的缝隙 除非透视)PS:玻璃中间可以养鱼
2 赞
1 回复
01:00
练习制作有用的3DUI(经验+10)截图
练习制作有用的3DUI(经验+10)
这个东西我也不清楚叫什么 不过很早以前看见有人弄出来感觉挺好看的 现在我也研究出了点技术了 照着简单弄一个练练手 这个东西可以指示飞行器前方和地面的夹角 零度平行 九十度垂直朝上 负九十度垂直朝下 以任何角度的直线为轴进行三百六十度旋转 这个东西的运作都很丝滑 不像我以前弄的那个指南针一样有BUG 技术方面 目前已经可以做出傻瓜式3DUI的放置模块了 利用模块可在任一球心任一角度布置相对于球心有3
3 赞
1 回复
星空隐形(不是真镜面,弄不了)截图
星空隐形(不是真镜面,弄不了)
星空隐形军用航天器、定向散热器 图中星空不限于天然光源,有人造光源。 星空隐形军用航天器,定向散热器、耗电制冷凸多面体镜面装甲(镜甲)等。镜甲航天器在星系(例:银河系)内最明显破绽,在有、无星系内天球高亮区(高亮区;例:银河)的背景中,镜面反射无、有高亮区。 激光炮的扩束镜和天文望远镜共用部分零件(反射镜、透镜、部分反射镜等); 武器兼推进器兼观测器; 弹头兼工质兼装甲(尝试弱化推进特征的舰队大概
《我的战舰》4月6日不停服更新公告截图
《我的战舰》4月6日不停服更新公告
各位机械师: 我们预计将于4月6日下午16:00对游戏进行一次不停机更新!更新期间,所有玩家仍可以正常进入游戏。 本次更新内容为: 功能更新 1、下载游戏数据时增加进度显示; 2、游戏逻辑方块启动阶段增加进度显示; 3、优化游戏加载时间; 4、减少游戏长时间运行的内存持续分配; 5、引入多线程加速图片和音效的加载; 6、新增ogg格式音效第一次解压缩后本地缓存功能; 7、优化excel表格在游戏过
官方
13 赞
7 回复