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

本期教学重点

6.控制相机

7.物理学入门

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

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

6.控制相机

如果宇宙飞船不能移动,它并不是真正有用的东西。在本部分中,您将让玩家控制飞船。

为此,您需要处理两件事:相机和物理系统。不用担心,您今天不需要学习亚原子粒子物理学!

首先,您需要设置飞船:
1:在“层次结构”窗口中选择 Spaceship
2:使用Inspector 窗口将其位置设置为(X:10.66,Y:1.99,Z:10)。
3:将Rotation设置为(X:270,Y:0,Z:0)。

“检查器”窗口中的值将与下面显示的值匹配。


那么我是如何得出这些价值观的呢?它们实际上是相当随机的。

在开发游戏时,我将对象放置在这些起始位置。如果您制作了游戏,则可能选择了不同的位置。

在“游戏”视图中,您可以看到飞船离相机太近了。


有两种方法可以解决此问题。您可以将飞船再移回去,也可以重新配置摄像机。准备成为相机助手!

在层次结构中选择“Main Camera ”。您将在“检查器”中看到“ Camera component”组件。这里有很多选择,但是现在忽略Projection和Field。

您可以为投影字段选择“Perspective ”或“ Orthographic ”。这个选择决定了游戏的最终外观。

透视投影的行为与您的眼睛非常相似。物体离您的眼睛越近,它出现的越大。正射投影会丢弃深度信息。距离您最近的物体(在本例中为照相机)的大小将与距离较远的对象相同。


(左侧的两个多维数据集以“透视”投影显示,而右侧的多维数据集为“正交”)

一般来说,3D游戏应使用透视投影。没有深度的游戏(如2D游戏)应使用正交投影。

虽然您的游戏具有3D元素,但游戏玩法本质上是2D。在Projection字段中,选择Orthographic。接下来,将size设置为18.85。您的“Game”视图应如下所示:

宇宙飞船应该会飞吗?为此,您必须用C#编写一些代码才能逐帧移动飞船。为了节省您的工作,示例文件包含一个现成的脚本。问题是,如何将其添加到船上?

脚本仅仅是组件的另一种类型,并且有很多方法可以将组件添加到GameObjects。在本教程中,您将尝试一些方法。

现在,从“层次结构”中选择“Spaceship ”。然后从菜单栏中选择“ Component ”选项。在底部,您将看到一个名为Scripts的选项,带有可用脚本的弹出菜单。选择“ Ship Controller”脚本。

现在,您应该看到该Ship Controller脚本已作为“Script”组件添加到 Inspector window.中的Spaceship GameObject中。

与其他组件一样,您可以在脚本中定义可在编辑器中访问的字段。这使您能够在玩游戏时更改脚本的属性。

将组件的“ Move Speed ” 设置为22并将“ Rotation Speed”设置为2。

移动速度决定了船舶的速度,而旋转速度决定了船舶的旋转速度。点击Unity界面中央顶部的“Play”按钮。这开始游戏。使用箭头键移动您的船。

不幸的是,您的飞船将飞离屏幕,飞向半人马座阿尔法(Alpha Centauri)及以后。您需要解决该问题。

像以前一样使用菜单栏将“ Screen Wrap ”脚本添加到飞船中。

您会注意到,该组件具有一个名为Renderers的字段,该字段采用一系列Skinned Mesh Renderers。这是创建模型的几何。

如果渲染器不在屏幕上,则根据其运动方向和当前位置将GameObject传送到屏幕上的另一个位置。

展开“ Spaceship ”节点,直到找到主体 GameObject,然后将主体拖到“ Renderers”字段中。

现在运行您的游戏,超越无限!


您还记得保存工作吗?

7.物理学入门

只有一个主要问题。在飞船时,您违反了物理定律之一。不,不是牛顿物理定律-Unity物理最佳实践定律。

Unity使用物理学进行碰撞检测。如果GameObject没有RigidBody组件,则将其视为static collider.

这意味着Unity假定GameObject将保持静止,从而在碰撞检测方面进行了巨大的优化。但是,无论如何,当您开始移动这些静态对象时,Unity必须重新计算这些优化。这会为您的游戏增加不必要的CPU时间。

为了避免不必要的CPU开销,您需要通过添加Rigidbody组件来选择加入物理引擎。您已经直接从菜单栏中添加了组件。这次,在仍在“层次结构”中选择了太空飞船的情况下,单击“ Inspector.”中的“Add Component”按钮。


您会看到出现一个组件菜单。单击“ Physics”,然后单击“ Rigidbody.”
这个组件有很多选择。“ Kinematic”是您感兴趣的产品。

设置此选项意味着您要手动移动GameObject,但仍希望该对象注册碰撞。当您通过脚本(如此处所做的)或通过动画移动项目时,此功能很有用。

勾选Kinematic复选框。由于您在此游戏中没有使用重力,因此请取消选中 “ Use Gravity ”复选框,如下所示:

这个游戏的目的是飞来飞去,射击各种类型的碎片。自然,处理碰撞将在此类游戏中扮演重要角色。您需要知道玩家何时发射小行星或何时坠毁。

碰撞器可让您聆听并响应碰撞。基本形状可以使用多种类型的对撞机,例如Sphere Collider和Box Collider。

甚至还有基于3D模型的网格碰撞器。碰撞器以绿线显示在“场景”视图中。

(如果您使用的是视网膜显示器,则绿线非常细。Unity正在研究可定制性或使编辑器dpi敏感以改善此问题)

在本教程中,您将使事情变得简单,并使用Sphere Collider。

在“Hierarchy ”窗口中选择“ Spaceship ”,然后在“检查器”窗口中单击“ Add Component”按钮。单击Physics / Sphere Collider,您将在飞船后面看到一个绿色圆圈。


嗯,等等-为什么飞船背后的对撞机?这是因为当您较早更改其位置时,飞船的实际模型已从其父级偏移。

1:在“Hierarchy”中选择“ Spaceship ”后,在“ Inspector.”中找到您的Sphere Collider。
2:将Center设置为(X:0,Y:4.09,Z:-0.72)
3:将Radius设置为3.144 选中是 Trigger复选框。运动学游戏对象无法注册正常的碰撞,但可以侦听其他运动学对象的触发事件。

您的Sphere Collider组件应如下所示:

对撞机还应将飞船封闭起来,如下所示:

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

本期教程就到这里,下期我们将对武装大炮、将碎片放入太空碎片等继续讲解

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

  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. ppwjs之bootstrap文字排版:排版常量
  2. ios开发两个简单的错误提示和原因
  3. 【MM模块】Basic Invoice Verification 发票校验
  4. SpringMvc 面试题
  5. vue底部跳转_详解Vue底部导航栏组件
  6. discuz 标签详解
  7. 基于OpenCL的mean filter性能
  8. C++代理 Surrogate
  9. IDEA快速 实现 SpringMVC 整合xfire 发布 WebService 服务
  10. Shadowsocks错误:端口已被占用1090的错误解决办法
  11. Java日志系列——概述,JUL
  12. 台式计算机怎么开声音,台式机如何使用耳机说话
  13. java计算器自述文件_自述文件 - Unreal Engine
  14. 有功功率、无功功率、视在功率 的定义
  15. 常用英语几大构词方法
  16. 未来计算机更加智能化,未来计算机的发展趋势
  17. 资讯_计算机屏幕_镜面屏;
  18. 实验室第一次考核(C语言)
  19. CentOS7 安装 RabbitMQ 3.6(方法适用于安装任意版本 RabbitMQ)
  20. Bootstrap(二)

热门文章

  1. ArcGIS jsAPI 本地部署字体符号乱码
  2. 【找工作】公司和职位信息怎么获取,看这篇文章就够了!
  3. 时空本质性差异:两点间的距离不再是直线最短
  4. JAVA——算法训练 调和数列问题
  5. 如何找到CPU飙升的原因
  6. 计算机无法验证签名,win7系统无法验证文件数字签名的解决方法
  7. 中国本土八大会计师事务所简介
  8. 蒸汽流量计算软件_网上难得学到的知识!涡街流量计选型设计有诀窍
  9. java中的数据结构——栈
  10. 一个小时学会画网络拓扑图(附标准素材)