本期我们继续为大家进行小型太空射击游戏的后续教程

本篇教程重点

8.武装大炮

9.将碎片放入太空

10.全部整合到一起

小型太空射击游戏教程篇幅较长,分为四篇,本篇为第四篇,有小伙伴没有看【小型太空射击游戏(三)】可以先去看一下

欢迎加入我们的Unity问题交流群:1146128932

8.武装大炮

虽然四处飞行很有趣,但大多数玩家都渴望发射几十个光子鱼雷!

提供了一个脚本来帮助您满足这种渴望。

在层次结构中选择Spaceship,然后在“ Inspector”窗口中单击“ Add Component”按钮。单击Scripts / Ion Cannon.

您会注意到Audio Source和脚本已自动添加到GameObject中。


一些脚本需要组件。如果在GameObject上找不到组件,则会自动添加它们。

为了使您的对象播放声音,您需要音频源和音频剪辑。音频源可以附加到任何GameObject,而音频剪辑只是音频文件。

将拍摄声音从“ Project”窗口中的“ Sounds”文件夹中拖到“ Fire Sound”字段中。


您会注意到,“ Ion Cannon ”脚本具有“项目符号”字段。您的工作是创建项目符号对象。如果您不是艺术家,请不要担心-一个简单的球体就足够了。

单击层次结构中的创建按钮。从菜单中选择3D对象,然后选择Sphere.

在层次结构中选择 Sphere,然后使用检查器将“ Scale”设置为(X:0.47,Y:0.47,Z:0.47)。再次在层次结构中选择Sphere,并将其命名为Bullet。

由于您的子弹将在整个场景中移动,因此它也需要加入物理引擎。你还记得你需要做什么吗?旋转一下,如果卡住了,请检查下面的扰流板。

从层次结构中选择项目符号,然后单击检查器中的“ 添加组件” 按钮。选择“ 物理/刚体”以添加“刚体”组件。

子弹将需要速度运行,所以一定要确保是运动是选中。此外,确保利用重力是选中。

即使子弹飞离屏幕后,子弹也将继续飞行,就像您的飞船最初那样。将Bullet脚本从“项目”窗口拖动到Bullet GameObject上。现在,当子弹飞离屏幕时,它将自动被销毁。

最后,将Bullet对象拖到“ 项目”窗口的Prefab文件夹中。这将创建项目符号的预制,从而使您可以使用脚本创建大量项目符号。

现在,您已将子弹创建为Prefab,请从“ 层次结构”中删除该子弹的实例。

再次选择您的太空飞船,然后使用检查器将Bullet Prefab 添加到Bullet字段。检查器应如下所示:


最后,天空背景有些不合适,您会期望太空飞船在太空的黑色空隙中飞行,不是吗?

在层次结构中选择“ Main Camera ”,然后使用检查器将“Clear Flags ”设置为“ Solid Color ”,将“ Background Color”设置为 black.


保存您的工作,运行游戏,然后按空格键,用离子大炮开炸!

9.将碎片放入太空

到目前为止,您有一艘可以射击的船,但是如果有什么东西可以射击的话,那会更有趣。现在是时候向混合物中添加一些小行星了。

在下载的文件中找到rock_d_05.obj文件,并将其拖到“项目”窗口中的“ Models”文件夹中。

右键单击rock_d_05.obj并将其重命名为Asteroid。

该文件仅包含有关模型本身的信息,它不包含任何动画。

将 Asteroid模型拖到“ Scene view”中以创建其实例。您会看到小行星当前为纯白色。

尽管您可以说它是雪白彗星的碎片,但您应该学习如何构造模型……除非您想从事制作以雪为主题的游戏的职业

展开Asteroid GameObject并选择其名为rockLP001的子对象。在检查器中,您将看到此子GameObject附加了一个Mesh Renderer组件。渲染器将对象绘制到屏幕上,但是需要一些帮助才能做到这一点-这就是材质发挥作用的地方。

材料决定了对象的外观,例如,棉衬衫与石膏墙的外观将有很大不同。

Unity通过使用每种材质封装Shader来实现此目的。

你问什么是Shader?这是一个简单的程序,以类似C的语言编写,并在GPU上运行。着色器可以足够简单以在立方体上渲染纹理,也可以足够复杂以模拟水。

Unity提供了许多不同的着色器。例如,您可以使用它们渲染天空盒,或使对象看起来是半透明的。

在“项目”窗口中打开“ Materials”文件夹,然后单击“ Create ”按钮。从下拉列表中,选择Material并将其命名为Asteroid。现在,在“Inspector ”窗口中,您将看到材料的可用属性。


1:着色器选项使您可以从许多预打包的着色器之一中进行选择。默认的标准着色器具有极大的灵活性,因此请选择它。
2: 撞击小行星时,您需要将其淡出,因此请将“ Rendering Mode”设置为“Fade”。
3:该 Albedo属性包含实际的质感。您可以通过提供颜色对其进行着色。

将flint_like_rock_4787图像从“ 项目”窗口中的“ Textures ”文件夹拖动到Albedo属性中:

4:查看“检查器”窗口底部的Asteroid材质预览,您会注意到该材质看起来有点过于光滑,就像它已经打磨过一样。(如果看不到材质预览,请尝试像这样从“检查器”的底部向上拖动Asteroid标题栏):



在Metallic属性下,您将看到两个滑块。第一个滑块确定材料的金属外观,而另一个滑块确定纹理的粗糙度。

现在,将“ Metallic”滑块设置为0.219

5:将“ Smoothness ”滑块设置为0.149。您的材料现在应如下所示:


所有材料配置完毕后,您现在需要将其添加到小行星中。将您的Asteroid材质从“项目”窗口拖动到“ Scene view.”中的Asteroid GameObject

太棒了!您有一颗小行星准备引起很多麻烦。但是首先,您需要为其添加一些行为。

拖动Debris从脚本Project window在Scripts folder中的小行星。

碎片脚本会自动将球体碰撞器,刚体和音频源添加到小行星。现在设置所有必需的属性。


1:将Sphere Collider的中心设置为(X:0.01,Y:-0.09,Z:0.89)。
2:将Radius 设置为1.49。
3:选中是 Trigger复选框。
4:对于刚体,请取消选中“ Use Gravity ”复选框。
5:选中是Kinematic 复选框。
6:对于Debris script,将“ Min Speed”设置为15。
7:将 Max Speed设置为30。
8:将explosion 声音文件从“Sounds”文件夹拖到“Explosion Sound”字段。
9:对于Asteroid GameObject的变换,将Scale设置为(X:3.02,Y:3.02,Z:3.02)。
10:添加Debris组件还添加了必需的“ Renderer Fade”组件。当子弹与小行星碰撞时,小行11 星应逐渐消失而不是从屏幕上消失。该组件仅需要一个淡入淡出时间,因此请将“ Fade Time”设置为0.5。

随着小行星从屏幕上移开,它们应该像宇宙飞船一样包裹。

从“项目”窗口中的“脚本”文件夹中,将ScreenWrap脚本拖到Asteroid上。就像使用太空飞船一样,您需要使用正确的渲染器配置屏幕包裹。

小行星有一个名为rockLP001的子游戏对象。将此子GameObject拖到Asteroid GameObject 的检查器中的“ Screen Wrap ”组件的“ 渲染器”属性。

最后,将小行星从“层次结构”拖到“项目”窗口中的Prefab文件夹。当提示您创建预制时,单击原始预制。现在您已经完成了创建Asteroid Prefab的工作,从层次结构中删除Asteroid实例。

您需要的最后一件事是所有小行星的生成点。单击层次结构中的创建按钮,然后选择创建空。命名您的产卵点Debris.。

您将希望此生成点与播放器在同一平面上。否则,玩家将在碎片上方或下方飞行。用作参考的良好GameObject是missile_R_0,因为它位于模型的中心。

拖动碎片游戏物体,并使其成为一个孩子的missile_R_0。然后,碎片的变换坐标将相对于其父级GameObject。

要匹配父对象的坐标,请将“碎片”位置设置为X:0,Y:0,Z:0)。通过这个小技巧,您可以确定太空飞船和碎片在同一平面上。

接下来,将“ Debris ”移动到其原来所在的“层次结构”视图的底部。


向右移动 Debris游戏对象7.5点。如果您没有设法使它们完全相同,则其新位置应为(X:20.0,Y:1.72,Z:7.06)。

10.全部整合在一起

现在您已经配置了飞船和小行星,接下来需要将所有元素组合在一起并创建一个简单的游戏。

单击层次结构中的Create按钮,然后选择Create Empty。在Inspector中,单击新GameObject的名称,并将其命名为GameManager。

随着GameManager的层次选择,点击添加GameManager,选择Scripts,然后选择游戏管理器。

您会看到该操作也添加了音频源。此外,GameManager组件具有几个需要设置的字段,这些字段将用于生成小行星。

从“Debris ”字段开始。确保在“层次结构”中选择了GameManager,然后将Asteroid Prefab拖动到“ Debris ”字段中。

那你在这里做什么?该GameManager负责产卵小行星。它使用“ 碎片”字段来确定要生成的对象。您告诉它使用Asteroid Prefab。

接下来,仍然在GameManager上:

1:将“ Min Time”设置为2,将“ Max Time ”设置为5。这告诉脚本它应该多快生成小行星。
2:将“ Total Items on Screen ”设置为5。这将小行星的数量限制为5,这样玩家就不会感到不知所措。
3:将“ Debris GameObject”从“层次结构”拖到“ 屏幕碎片”字段。这指定GameManager应该在碎片GameObject上生成小行星。

该游戏管理器组件应如下所示:


最后,在Audio Source component,添加background-music 的AudioClip领域,并确保检查 loop 复选框。

运行您的游戏,并查看一切。

欢迎加入我们的Unity问题交流群:1146128932

恭喜,您已经在Unity中创建了自己的第一款游戏!

在以后的教程中,您将了解Unity的各个小节,这些小节实际上可以使您精通此游戏。您还将学习如何编写自己的脚本以利用Unity的灵活API。

Unity小游戏教程系列 | 创建小型太空射击游戏(4)相关推荐

  1. UE4创建第一人称射击游戏学习教程

    Unreal Engine 4: Create Your Own First-Person Shooter MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言 ...

  2. UE4创建第一人称射击游戏学习教程 Unreal Engine 4: Create Your Own First-Person Shooter

    UE4创建第一人称射击游戏学习教程 本课程包含38节视频课,将逐步指导您完成以下主题: 云桥网络 平台获取课程! 如何创建6种可定制的武器(包括手枪.突击步枪.猎枪.狙击枪.榴弹发射器和火箭发射器) ...

  3. 微信小程序之组件 —— 微信小程序教程系列(19)

    什么是组件: 组件是视图层的基本组成单元. 组件自带一些功能与微信风格的样式. 一个组件通常包括开始标签和结束标签,属性用来修饰这个组件,内容在两个标签之内. <tagname property ...

  4. 微信小程序的如何使用全局属性 —— 微信小程序教程系列(5)

    微信小程序提供了app.js文件,用于放置一些全局的函数和全局的属性. 一般情况下,我都会把一些常用的函数和属性写在app.js文件内,这样不用在页面之间传值,或者不用重复加载. 下面以全局属性为例 ...

  5. 微信小程序之微信登陆 —— 微信小程序教程系列(20)

    简介: 微信登陆,在新建一个微信小程序Hello World项目的时候,就可以看到项目中出现了我们的微信头像,其实这个Hello World项目,就有一个简化版的微信登陆.只不过是,还没有写入到咱们自 ...

  6. 微信小程序使用百度api获取天气信息 —— 微信小程序教程系列(16)

    之前已经介绍过,如何使用百度地图api来获取地理位置信息 微信小程序的百度地图获取地理位置 -- 微信小程序教程系列(15) 下面介绍使用百度api来获取天气信息. 1> 第一步:先到百度开放平 ...

  7. 微信小程序的网络请求 —— 微信小程序教程系列(14)

    网络请求,基本上是必须的环节之一. 小程序提供了wx.request(object),与开发者的服务器实现数据交互的一个很重要的api. 最简单的用法如下(以GET请求为例) <view bin ...

  8. 微信小程序的文件结构 —— 微信小程序教程系列(1)

    文件结构 示例目录:HelloWorld *******************************************************分割线********************* ...

  9. 微信小程序获取系统日期和时间 —— 微信小程序教程系列(17)

    获取当前系统日期和时间 在小程序中,新建项目时,就会有一个utils.js文件,就是获取日期和时间的,代码如下: utils.js: function formatTime(date) {var ye ...

  10. 微信小程序标题栏和导航栏的设置 —— 微信小程序教程系列(7)

    设置标题栏 标题栏window 在app.json文件里面,通过window对象里面的属性进行设置 示例: app.json: 运行: 设置导航栏 导航栏TabBar 如果我们的小程序是一个多 tab ...

最新文章

  1. java 8 stream reduce详解和误区
  2. nuget 包管理器
  3. ASP.NET中的Eval()和DataBinder.Eval()方法
  4. MFC创建MDI程序一个Doc对应多个View
  5. Spark操作Hive分区表
  6. “鱼渔合作”在IT运维中的启示
  7. FireBug不能用了?使用火狐Try Xpath插件替代Firebug和Firepath
  8. mac 下载appium
  9. DotNetBar布局(一)
  10. 爱忘事、不自律,有了这5款时间管理工具,堪比“罗志祥”!
  11. 三.卡尔曼滤波器(EKF)开发实践之三: 基于三个传感器的海拔高度数据融合
  12. 国家地区代号与英文名对应表
  13. android 百度地图api切换城市,【百度地图API】关于如何进行城市切换的三种方式...
  14. RIP、OSPF、BGP、动态路由选路协议、自治域AS
  15. 计算机使用的显示器主要有两类,2015年计算机专转本预测题及答案
  16. sqrt (2)不使用数学库,求2的开方。
  17. 使用JavaFX编写桌面程序,UI部分
  18. 摸着石头过河的区块链游戏真是一门好生意吗?
  19. Data2SQL数据脚本生成器
  20. 图像处理界的标准图像lena背后的故事

热门文章

  1. react native 面试题
  2. 微博媒体碎片装订版-Arrange01
  3. 深度学习与卷积神经网络
  4. 盘点百度开放云编程马拉松八大亮点
  5. 重装系统后小喇叭显示未安装音频输出设备
  6. 用JavaScript写一个简单的网页倒计时插件
  7. 从我的历程谈谈该如何学习
  8. java 项目cpu飙升故障排查
  9. 天问: 世界到底由什么组成?
  10. vue中使用video插件在微信浏览器中视频无法自动播放的问题