unity ui框架_用unity制作简单的太空游戏(2)-简单炮台
多铆蒸刚,炮塔至大!
亿万星辰,亿万炮塔!
多铆蒸刚,炮塔至上!
亿万炮塔,亿万荣光!
(PS:我没有咕咕咕,就是比较惨,一口气出了半个月的差,人瘦了,也黑了,心塞塞……赶紧写个文章压压惊……)
这一篇我们来讲武器相关,本篇篇幅比较长,所以拆成两篇文章发,本文主要讲基本实现,下文讲讲常见的武器和效果。下一篇:用unity制作简单的太空游戏(3)-飞船的常见武器和功能
(PPS:工程链接在文末,上一篇也是,那些文章都没看完的就留言要代码的麻烦动动鼠标....)
作为太空游戏,没有炮塔怎么能行,赶紧掏出商店搜索资源,由于没有好看的free炮塔,暂且先下个最小体积的凑合用着,2M,就它了:
然后我们来搭建这样一个简单场景:
炮塔的旋转
对于炮塔的控制,我们要实现水平方向炮塔本身的旋转和垂直方向炮管的俯仰,这里要注意的一点是,这个炮塔资源有坑,轴向是错乱的,需要我们自己来修复,最终要保证Z轴为正方向。修复的方式可以是gameobject嵌套或者修改模型文件,理论上修复模型文件才是正确的,但这里偷个懒,直接套gameobject调轴向,保证炮塔的水平和垂直旋转是正确的就行,在图中,我们要控制Swivel节点作为水平方向的整体旋转,控制Barrel节点作为垂直方向的俯仰控制,都是根据原有模型以嵌套gameobject来处理,而模型原本的枪管的轴向则是Z轴朝上。具体可以看文末的工程。
然后编写旋转控制的代码:这里有个取巧并且效率比较高的方式,就是直接LookRotation目标,然后通过设置localEulerAngles剔除多余轴向的旋转,再用Quaternion.RotateTowards进行插值做旋转速度的控制,注意这里是控制角速度而非线速度。
再根据鼠标位置传入目标位置,这里注意,没有检测到碰撞的时候hit.point是不会变化的,所以要再手动给个位置,这里直接使用相机远裁面的长度:
可以看到旋转已经满足需求了,这样就实现了最简单的炮塔控制。后续还可以对旋转的插值方式进行更改以实现不同效果的转速变化等。
一般有个常见的需求是炮塔的旋转角度约束,比如只能对正前方90°范围内旋转等等:
炮塔的UI
关于UI,因为从设计上就分为了目标位置和炮口位置,所以需要分别显示,这也符合现实情况,通过在炮口位置发射射线检测即可,也需要注意空碰撞。
我画了个UI,分别表示鼠标指向和炮口实际指向,并通过Vector3.Angle取到二者之间的夹角,这样就有了简单的瞄准系统。
此处有个常见的需求是在目标指向和真实指向中用虚线连接,这条虚线用处比较多,比如表示炮塔尚未旋转就位,在快速转动视角的时候更好显示等等,具体效果如图:
虚线的实现很简单,一个ImageType为Tiled的Image,根据位置设置图片宽度和角度,这里有个优化的小点,直接设置Tiled并不正确,还需要在图片的WarpMode设置为Repleat,unity会自动优化网格面的拉伸:
两点的位置已经知道了,那么我们来复习下初中数学题:
1、已知直角三角形ab两边边长,求斜边c的长度(233分)
2、已知直角三角形三边长度,求A的角度(666分)
简单的炮弹
有炮不射怎么行,掏出PS,是时候展示出我拙劣的PS功力了,画个方框:
丢进unity拼个子弹,记得给子弹上挂个音效,勾上play On Awake:
然后我们先不管代码结构,老夫写代码就是一把搓,撸出功能为先。直接实例化子弹。
子弹具有飞行速度和生命周期,超出周期后销毁(这里先简单实现,后续会改为对象池),开火这里,有个细节,根据炮口数量进行顺序切换。
(PS:大量生成必须要通过对象池管理,不然就坐等内存爆炸,对象池的核心在于对象的创建,回收和销毁的策略,具体的实现网上一搜一大把,unity官网近期BUG了,这里贴另一个大佬的实现:UGF中的对象池 ,UGF是个非常适合阅读学习的unity框架,作者目前在北京畅游,大家有空多看看,什么叫工整,什么叫严谨……)
这样,一个简单的炮塔就实现了。当然,目前丑陋的炮塔和贫穷的特效显然是无法令人满意的,之后将进行特效的补充,丰富武器类型。
(未完待续)
本篇实现功能在工程目录的~/_Project/Example/Sci/TurretCtrl/SimpleTurretCtrl/路径下。
工程地址:https://github.com/evesgf/SpaceGame
unity ui框架_用unity制作简单的太空游戏(2)-简单炮台相关推荐
- unity ui框架_[教程汇总+持续更新]Unity从入门到入坟——收藏这一篇就够了
----------------塔防(更新中),作者重写了基础篇(下方目录为:1.1(新) 基础)目前还在持续连载了5篇,因为不多我们更新完就能追到原作者的进度了------------------- ...
- unity ui插件_用Unity制作GalGame/视觉小说游戏的模型素材与插件推荐
本文推荐一些用于开发GalGame或者视觉小说(Visual Novel)游戏的音频素材.Unity插件.3D模型.动作动画和2D素材. 一:音频资源 Cute Romantic Music Pack ...
- 智慧北京02_初步ui框架_ 主界面_viewPager事件_xUtils_slidingMenu_网络缓存_数据传递...
智慧北京02_初步ui框架_ 主界面_viewPager事件_xUtils_slidingMenu_网络缓存_数据传递 1.使用Fragment搭建ui框架 参考分析图 1.1,Fragment生命周 ...
- Unity UI框架的搭建
为什么要使用UI框架呢? 在我刚使用Unity开发UI界面时,根本没想过用什么UI框架,都是想到要什么界面就通过UGUI拖动什么界面.如果需要实现交互功能,就会绑定对应的监听函数,这样的做法固然是非常 ...
- 用unity制作简单的太空游戏(1):简单飞船控制
最近沉迷<Dreadnought>(中文名:无畏战舰,B站CG链接),回想起作为十余年EVE老油条的太空生涯,又萌生了做个太空游戏的情怀,所以这一次就讲讲怎么做个简单的太空飞船的小游戏好了 ...
- unity技能框架_如何使用指导框架学习新技能
unity技能框架 Last October I created a Mentoring Framework at work. The goal was to create a project fro ...
- unity ui 概述_通过此概述了解Unity 2D和Platformer基础知识
unity ui 概述 If you're shopping around for a 2D game engine, you've undoubtedly come across Unity. Di ...
- unity 2017介绍_介绍Unity 2017
unity 2017介绍 We're excited to announce that Unity 2017.1 has been released and is now available for ...
- ugui unity 取消选择_关于Unity中的UGUI优化,你可能遇到这些问题
关键字 界面制作 网格重建 界面切换 加载相关 字体 一.界面制作 Q1:UGUI里的这个选项 ,应该是ETC2拆分Alpha通道的意思,但是在使用中并没起作用?请问有没有什么拆分的标准 ...
最新文章
- 超算学院计算机系吧,上海交通大学计算机科学与工程系(CSE)
- 【机器学习】通俗易懂的条件概率公式
- 数据结构--线性表顺序存储(顺序表)
- SpringCloud工作笔记078---SpringBoot中使用sping事件驱动模型
- python安装matplotlib绘图库
- Ghost XP_sp3电脑装机终极版V9.6 【雪豹】
- stata令相关系数加显著性
- Unity 快速实现镜子效果
- ajax速度axio速度,axio跨域请求,vue中的config的配置项。
- 动态规划(DP)经典模型
- 工程师视角的手游SDK
- 计算机的数字符号化是什么,电脑输入数字变成符号怎么办
- 大学英语B116-阅读理解
- linux igb网卡,网卡驱动程序igb ixgbe
- ThinkPHP6集成腾讯云、短信宝短信发送的工具类
- iOS 集成苹果登录及苹果图标的制作要求
- Confluence团队协同工具使用文档
- kafka之broker
- 超融合和服务器关系_分析超融合与传统服务器部署的区别
- 2020 CCPC 秦皇岛 K. Kingdom‘s Power(树形DP)
热门文章
- matlab实现余弦相似度_MATLAB在图像相似度分析中的应用
- 【代码重构(Refectoring)系列教程 基本概念二】何时应该重构?如何去重构?
- Proteus VSM与µVision2的联调
- 会多种计算机语言,为什么现在会有这么多种编程语言?
- 看编程随想的质数算法有感
- springBoot加layui和mybatis后台管理系统增删改查分页登录注销修改密码功能
- Jmeter压测工具详解
- php微信跳转外部浏览器打开,微信中打开链接,自动打开外部浏览器打开指定URL页面...
- Kindred AI要让人戴VR眼镜训练机器人 使其变聪明
- 电子线路设计技巧3:ATT7022E电压采样电路