Unity小游戏教程系列 | 创建小型太空射击游戏(三)
本期我们继续为大家进行小型太空射击游戏的后续教程
本期教学重点
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小游戏教程系列 | 创建小型太空射击游戏(三)相关推荐
- UE4创建第一人称射击游戏学习教程
Unreal Engine 4: Create Your Own First-Person Shooter MP4 |视频:h264,1280×720 |音频:AAC,44.1 KHz,2 Ch 语言 ...
- UE4创建第一人称射击游戏学习教程 Unreal Engine 4: Create Your Own First-Person Shooter
UE4创建第一人称射击游戏学习教程 本课程包含38节视频课,将逐步指导您完成以下主题: 云桥网络 平台获取课程! 如何创建6种可定制的武器(包括手枪.突击步枪.猎枪.狙击枪.榴弹发射器和火箭发射器) ...
- 微信小程序之组件 —— 微信小程序教程系列(19)
什么是组件: 组件是视图层的基本组成单元. 组件自带一些功能与微信风格的样式. 一个组件通常包括开始标签和结束标签,属性用来修饰这个组件,内容在两个标签之内. <tagname property ...
- 微信小程序的如何使用全局属性 —— 微信小程序教程系列(5)
微信小程序提供了app.js文件,用于放置一些全局的函数和全局的属性. 一般情况下,我都会把一些常用的函数和属性写在app.js文件内,这样不用在页面之间传值,或者不用重复加载. 下面以全局属性为例 ...
- 微信小程序之微信登陆 —— 微信小程序教程系列(20)
简介: 微信登陆,在新建一个微信小程序Hello World项目的时候,就可以看到项目中出现了我们的微信头像,其实这个Hello World项目,就有一个简化版的微信登陆.只不过是,还没有写入到咱们自 ...
- 微信小程序使用百度api获取天气信息 —— 微信小程序教程系列(16)
之前已经介绍过,如何使用百度地图api来获取地理位置信息 微信小程序的百度地图获取地理位置 -- 微信小程序教程系列(15) 下面介绍使用百度api来获取天气信息. 1> 第一步:先到百度开放平 ...
- 微信小程序的网络请求 —— 微信小程序教程系列(14)
网络请求,基本上是必须的环节之一. 小程序提供了wx.request(object),与开发者的服务器实现数据交互的一个很重要的api. 最简单的用法如下(以GET请求为例) <view bin ...
- 微信小程序的文件结构 —— 微信小程序教程系列(1)
文件结构 示例目录:HelloWorld *******************************************************分割线********************* ...
- 微信小程序获取系统日期和时间 —— 微信小程序教程系列(17)
获取当前系统日期和时间 在小程序中,新建项目时,就会有一个utils.js文件,就是获取日期和时间的,代码如下: utils.js: function formatTime(date) {var ye ...
- 微信小程序标题栏和导航栏的设置 —— 微信小程序教程系列(7)
设置标题栏 标题栏window 在app.json文件里面,通过window对象里面的属性进行设置 示例: app.json: 运行: 设置导航栏 导航栏TabBar 如果我们的小程序是一个多 tab ...
最新文章
- ppwjs之bootstrap文字排版:排版常量
- ios开发两个简单的错误提示和原因
- 【MM模块】Basic Invoice Verification 发票校验
- SpringMvc 面试题
- vue底部跳转_详解Vue底部导航栏组件
- discuz 标签详解
- 基于OpenCL的mean filter性能
- C++代理 Surrogate
- IDEA快速 实现 SpringMVC 整合xfire 发布 WebService 服务
- Shadowsocks错误:端口已被占用1090的错误解决办法
- Java日志系列——概述,JUL
- 台式计算机怎么开声音,台式机如何使用耳机说话
- java计算器自述文件_自述文件 - Unreal Engine
- 有功功率、无功功率、视在功率 的定义
- 常用英语几大构词方法
- 未来计算机更加智能化,未来计算机的发展趋势
- 资讯_计算机屏幕_镜面屏;
- 实验室第一次考核(C语言)
- CentOS7 安装 RabbitMQ 3.6(方法适用于安装任意版本 RabbitMQ)
- Bootstrap(二)