源于《Unity官方实例教程 “Space Shooter”》思路分析及相应扩展
教程来源于:Unity官方实例教程 Space Shooter(一)~(五) http://www.jianshu.com/p/8cc3a2109d3b
一、经验总结
教程中步骤清晰,并且相应代码及代码思路也给出,一步步跟着走下来的话并不存在困难。对unity新手来讲,可以学到不少的东西。
1.添加GameObject存在两个标准步骤(良好习惯)
重新命名及重置Transforms
Transforms可以理解为该GameObject的位置相关参数
position为位置参数,rotation为旋转参数,scale为规模参数;重置最方便的方法便是单机右上角的小齿轮并选择reset便可得到如图数据,也就是将该GameObject重置到原点,是个良好的习惯。
2.某些模型的刚体与模型碰撞冲突问题
在添加飞船的刚体及模型碰撞后出现错误“凹多边形的mesh collider不能跟rigidbody同时启用”,经检查发现mesh collider中mesh选项中选择了飞船本身的模型,而本身的模型为凹多边形,导致不能和刚体rigidbody同时启用,教程中选择将mesh模型替换为预先加工好的模型以解决此问题

3.GameObject中主物体及子物体设置
在Hierarchy中编辑拖拽GameObject主要存在三种情况,创建主物体、成为某主物体的子物体、加入某物体inspector中参与设置。而子物体会跟随主物体进行移动、变更属性或经由脚本统一调用。如果主、子物体设置不清晰会造成很大的困难:如飞机本体player及引擎动画效果engines_player不设置为主、子物体的话,就不会同步移动,非常尴尬。

4.防止素材图片比例失调的方法
在添加图片素材后,如果按照游戏的相应要求肆意调节,则会导致图片比例失调,非常难看。而有一简单方法可以极大缓解这一情况,那就是在设置游戏内图片大小时,保留原素材图片的比例系数。如原图片的尺寸为1024x2048,那么在游戏中设置的时候只要保证x参数为y的一半,那么图片就不会发现失调或比例失真的情况了。
5.prefab的制作以及调用
制作好的GameObject可以加入prefab中,直接拖入即可制作完成,保留该GameObject的所有参数。而调用的时候只需在要用的地方直接选择就可以了;但要注意的是,在prefab修改了GameObject的相关参数将会对所有在prefab中调用了该物体的属性参数进行更改!
6.为防止游戏负担过大需要做相应的“回收”工作
在游戏的运行过程中,会由代码需要产生出越来越的且无法自我消除的GameObject,在space shooter中如爆炸的效果、飞出去的子弹等,这些GameObject在不干预的情况下会随着游戏时间越来越多,最终加大游戏负担,导致游戏卡死,因此需要编写相应代码将不断创建的GameObject发挥完作用后将其删除掉。
using System.Collections;
using System.Collections.Generic;
using UnityEngine; public class DestroyByBoundary : MonoBehaviour {
void OnTriggerExit(Collider other) {
Destroy (other.gameObject);
} }
7.物体的tag设置及代码调用
tag就是给一个物体贴上一个标签,本身就是一串代码,一些gameobject会自带其tag标签,而通常情况下我们需要对gameobject设置tag,方便寻找,而在代码中调用的时候,tag也十分重要。tag是一个关键的工具,目前我只学到了它的用途之一:“就是是用来给gameobject贴标签,方便找”。

二、教程疑问
教程中space shooter中设置的发布的平台为wed player,而我的unity中并没有该发布平台选项。有可能是我在安装的时候没有选择安装web player的发布平台,但讯问同样使用unity的同学得知,也可能是unity新版将web player平台取消了。这一点还待验证。

三、额外扩展
教程中给出了飞机的移动、子弹的发射、陨石随机连续生成及分数纪录和游戏结束的相关制作。而我们知道作为一个太空射击类游戏,该教程还留白了许多地方,特别是asset store中下载的素材中还有许多模型并未使用,因为我进行了相应的扩展。

1.添加另外两种陨石
在一种随机陨石的基础上,利用代码及模型创建另外两种陨石进入游戏。其模型大小、刷新数量及间隔时间与第一种陨石完全不同,可以有效增加游戏的乐趣及玩家游戏难度。
2.添加敌机
添加敌机进入游戏,敌机由上至下的移动速度将比陨石缓慢很多,并且会不断发射子弹干扰玩家;而在后期,敌机将可以搭载具有一定移动能力的ai,增加游戏的深度。
3.增加副武器的设定
将player的战机除了鼠标左键发射弹药外,添加右键副武器的设定,可发射具有追踪能力的导弹或大面积的散弹,可以增强玩家战机的性能,提高游戏的乐趣。
源于《Unity官方实例教程 “Space Shooter”》思路分析及相应扩展的更多相关文章
- 对《[Unity官方实例教程 秘密行动] Unity官方教程《秘密行动》(十二) 角色移动》的一些笔记和个人补充,解决角色在地形上移动时穿透问题。
这里素材全是网上找的. 教程看这里: [Unity官方实例教程 秘密行动] Unity官方教程<秘密行动>(九) 角色初始设定 一.模型设置: 1.首先设置模型的动作无限循环. 不设置的话 ...
- Unity官方实例教程 Roll-a-Ball
与unity的transform组件相处的挺久了,最近项目不太忙,决定好好打下unity的基础.那么从Roll-a-Ball这个简单游戏开始吧! 1.先创建一个球体游戏对象,改名为Player,tra ...
- Unity-2017.3官方实例教程Space-Shooter(一)
由于初学Unity,写下此文作为笔记,文中难免会有疏漏,不当之处还望指正. Unity-2017.3官方实例教程Space-Shooter(二) 章节列表: 一.从Asset Store中下载资源并导 ...
- Unity-2017.3官方实例教程Space-Shooter(二)
由于初学Unity,写下此文作为笔记,文中难免会有疏漏,不当之处还望指正. Unity-2017.3官方实例教程Space-Shooter(一) 章节列表: 一.创建小行星Prefab 二.创建敌机和 ...
- Unity-2017.2官方实例教程Roll-a-ball(二)
声明: 本文系转载,由于Unity版本不同,文中有一些小的改动,原文地址:http://www.jianshu.com/p/97b630a23234 上一节Unity-2017.2官方实例教程Roll ...
- Unity-2017.2官方实例教程Roll-a-ball(一)
声明: 本文系转载,由于Unity版本不同,文中有一些小的改动,原文地址:http://www.jianshu.com/p/6e4b0435e30e Unity-2017.2官方实例教程Roll-a- ...
- UML实例教程 解析UML建模分析与设计
UML统一建模语言在软件开发过程中非常实用,UMl建模的分析与设计你是否熟悉,这里就通过实例向大家介绍,希望通过本文的学习,你对UML建模的分析与设计方法有一定的了解. 本节向大家介绍一下图书管理系统 ...
- Unity 官方自带的例子笔记 - Space Shooter
首先 买过一本叫 Unity3D开发的书,开篇第一个例子就是大家经常碰见的打飞机的例子,写完后我觉得不好玩.后来买了一本 Unity 官方例子说明的书,第一个例子也是打飞机,但是写完后发现蛮酷的,首先 ...
- 分享本年度最佳的15个 Photoshop 实例教程
毫无疑问,Photoshop 是任何其类型的设计相关工作的最佳工具.有这么多东西,你可以用它来设计,发挥你的想象力,一切皆有可能. 现在,几乎所有的封面图像都会用 Photoshop 来修饰. 您可能 ...
随机推荐
- Office 365开发概述及生态环境介绍(一)
原文于2017年3月13日首发于LinkedIn,请参考这个链接 离上一篇文章,很快又过去了两星期的时间.今天抓紧晚上的时间,开始了Office 365开发系列文章的第一篇,我会帮助大家回顾一下过去O ...
- entity framework core 支持批量插入,值得期待
entity framework6.x之前搞了这么多版本,构架这么牛B,居然没有批量插入更新的功能,但有很多替换的解决方案,例如Entity Framework Extended Library(ht ...
- 谈谈数据库中MyISAM与InnoDB区别 针对业务类型选择合适的表
MyISAM:这个是默认类型,它是基于传统的ISAM类型, ISAM是Indexed Sequential Access Method (有索引的顺序访问方法) 的缩写,它是存储记录和文件的标准方法. ...
- Linux操作命令集
系统信息 arch 显示机器的处理器架构(1) uname -m 显示机器的处理器架构(2) uname -r 显示正在使用的内核版本 dmidecode -q 显示硬件系统部件 - (SMBIOS ...
- js高程(二)-----继承
首先来讨论一下原型链,上代码 function SuperType(){ this.property = true; } SuperType.prototype.getSuperValue = fun ...
- X-Scan使用教程
下载X-Scan扫描器,解压缩,双击Xscan_gui.exe即可运行,不需要安装.X-Scan采用多线程的方式,对指定主机或者网段进行扫描. 其扫描功能(插件)有: 开放服务:扫描TCP端口状态,根 ...
- iOSiOS开发之数据存储之NSKeyedArchiver
1.概述 NSKeyedArchiver归档和plist文件存储不同的是NSKeyedArchiver可以直接保存对象.如果对象是NSString.NSDictionary.NSArray.NSDat ...
- vue组件递归
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 深入理解ajax系列第九篇——jQuery中的ajax
前面的话 jQuery提供了一些日常开发中需要的快捷操作,例如load.ajax.get和post等,使用jQuery开发ajax将变得极其简单.这样开发人员就可以将程序开发集中在业务和用户体验上,而 ...
- webstorm中关于vue的一些问题
在进行vue开发中,我使用了webstorm,但是过程坎坷艰辛,遇到了很多问题,我将问题和解决方案贴上,以作参考. 1.vue项目部署在webstorm中,第一个遇到的问题是,webstorm卡住了, ...