最近开始接触游戏制作,用Unity制作一些简单的游戏进行入门。这几篇博客总结了Space Shooter的制作流程,并对代码进行了分析。一是方便自己日后进行回顾与补充,二是为了让让更多的游戏爱好者接触游戏开发,少走弯路。
Space Shooter是一个入门级的项目,很适合新手学习。借由这款游戏,我们可以了解Unity中的界面以及常用操作,并对整个引擎有个笼统的认知,代码只需要一些编程基础,门槛不高(主要是C#)
说回正题,制作这款游戏需要如下资料。
泰课在线免费教学课程:http://www.taikr.com/my/course/63 (需要进行注册)
Unity软件以及资源包:http://download.csdn.net/download/s1314_jhc/10239210下载分不够的私聊我发链接
(资源包含:Unity4.6.9软件安装包、破解器、破解教程以及Space Shooter资源包)
以上就是准备工作,接下来就可以正式进入这个游戏开发之中。具体操作参见视频。本博客侧重于步骤梳理以及代码分析,不足之处敬请指正,也欢迎各位留言交流问题与看法。
博客结构分为三部分
第一部分为游戏基本素材的添加。包括飞机、背景、灯光以及子弹的添加,涉及到一些基本的代码操作。
第二部分为游戏基本功能的实现,包括陨石的产生、碰撞等操作。
第三部分为游戏性能的完善部分,包括音效、计分,销毁以及游戏结束后的重新加载部分。
传送门:
太空射击(Space Shooter)流程介绍与代码分析(上)
太空射击(Space Shooter)流程介绍与代码分析(中)
太空射击(Space Shooter)流程介绍与代码分析(下)
1.添加飞机
添加飞机是完成该游戏的第一步,首先,将素材导入进Asset中,将飞机部件拖入编辑环境中,调整Roatation使飞机处在摄像机的视角内。
此时的飞机只是一个静止的图片,为了检测飞机是否与子弹发生碰撞,我们需要加入一个碰撞检测器,在Inspector中的Add Component中添加一个Mesh Collider,再将下图中文件拖入Mesh中,完成添加,之后只要去掉Mesh Renderer,即可看到下右图中的刚体文件。
        
除此之外,我们需要加入一个rigidbody(刚体,操作类似添加Mesh Collider),将重力去除。
之后,为了模拟真实飞机情况,我们加入飞机的火焰喷射效果,将Prefabs中的engineer拖动至playerShip中,并设置位置,使喷射器与飞机结合,如下图。
以上就完成了简单的第一步,可以看到一架飞机正在待命!
2.添加灯光与背景
上述的操作只是添加了一个飞机,整个飞机的纹理特性不能很好地看出,因此需要加入一些灯光效果。在GameObject中添加Light——Directional Light,灯光的亮度又途中红框部分决定,可以自定义设定。并且Intensity可以调节灯光强度。
同理,可以再添加一个灯光(Fill Light),与之前添加的灯光效果形成叠加,增强立体感。如下所示。
背景的添加通过以下步骤完成:新建一个空的GameObject,并将背景素材拖入。
3.飞机控制
在playership中新建一个new script,用以控制玩家飞机的移动。在脚本中输入
using UnityEngine;
using System.Collections;
public class PlayeControl : MonoBehaviour {public float speed = 10f;void fixedUpdate(){float h = Input.GetAxis("Horizontal");    //飞机的水平移动float v = Input.GetAxis("Vertical");    //飞机的垂直移动Vector3 move = new Vector3 (h, 0f, v);    //移动数据赋值给moverigidbody.velocity = speed * move;    }
}
即可,此时飞机可以实现运动功能,但是范围却无法限定,因此对上述代码进行修改,在Game模式下,获取飞机的x,z信息以设置PlayerShip的活动范围
using UnityEngine;
using System.Collections;
public class PlayeControl : MonoBehaviour {public float speed = 10f;public float xMin = -10.15f;//移动范围public float xMax = -1.69f;public float yMin = -6.66f;public float yMax = 10.90f;void FixedUpdate(){float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");Vector3 move = new Vector3 (h, v, 0f);rigidbody.velocity = speed * move;rigidbody.position = new Vector3(Mathf.Clamp(rigidbody.position.x,xMin,xMax),    //用Clamp函数对范围进行限制Mathf.Clamp(rigidbody.position.y,yMin,yMax),1.3f);}
}
即可
4.创建子弹
新建一个空的object,再新建一个quad,将
为了去除子弹的背景黑框,将背景设置为additive
之后,为子弹添加一个rigidbody,参见飞机PlayerShip的设置,去除gravity,并新建一个脚本反映子弹运动,如下
using UnityEngine;
using System.Collections;
public class BulletMovement : MonoBehaviour {public float speed = 10f;// Use this for initializationvoid Start () {rigidbody.velocity = transform.up* speed;    //子弹运动}}
即可
之后就可以看见子弹沿着垂直方向往上运动并最终消失的场景,可以通过更改speed以改变运动速度。
子弹在运动中会碰到敌机或者陨石,这时候我们就要判断子弹是否与物体发生碰撞,我们在Bullet中加入一个Capsule Collider以检测子弹是否与物体发生碰撞,将半径(radius)与高度(height)设置好即可。
5.发射子弹
随着飞机的移动,子弹发射点也要随着飞机进行移动,因此在playership中创建一个空object记录子弹位置。(采用bulletPosition表示)
对playerControl函数中进行修改
using UnityEngine;
using System.Collections;
public class PlayeControl : MonoBehaviour {public float speed = 10f;public GameObject bullet;    //创建子弹public GameObject bulletPosition;    //创建子弹发射位置public float xMin = -10.15f;public float xMax = -1.69f;public float yMin = -6.66f;public float yMax = 10.90f;void FixedUpdate(){float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");Vector3 move = new Vector3 (h, v, 0f);rigidbody.velocity = speed * move;rigidbody.position = new Vector3(Mathf.Clamp(rigidbody.position.x,xMin,xMax),   Mathf.Clamp(rigidbody.position.y,yMin,yMax),1.3f);}void Update(){if (Input.GetButton ("Fire1")){Instantiate    //子弹射击函数(bullet,bulletPosition.transform.position,bulletPosition.transform.rotation);}}
}
并按照下左图操作将代码中创建的两个实例填充,即可实现发射子弹功能,但此时的子弹发射过快并且会四处散开,如下右所示
只需l勾选子弹VFX中的的Is Trigger以及给子弹一个发射限制函数即可,Is Trigger属性勾选表示物体不受作用力的影响,相当于一个虚体,但能产生碰撞事件。
代码中加入
    public float fireRate = 0.25f; //一秒最多发射4发private float nextFireTime;    
以及将Update中if函数修改为
if (Input.GetKeyDown(KeyCode.Space)&&Time.time > nextFireTime)    //按空格发射并受到发射频率的限制{nextFireTime = Time.time + fireRate;Instantiate    (bullet,bulletPosition.transform.position,bulletPosition.transform.rotation);}

即可

以上就是基本素材的添加及相应的代码操作,之后将会介绍核心的游戏功能代码。

Unity3D案例太空射击(Space Shooter)流程介绍与代码分析(上)相关推荐

  1. Unity3D案例太空射击(Space Shooter)流程介绍与代码分析(下)

    这部分内容关注的是游戏性的提升,包括音效.计分等功能的实现. 传送门: 太空射击(Space Shooter)流程介绍与代码分析(上) 太空射击(Space Shooter)流程介绍与代码分析(中) ...

  2. RPG游戏《黑暗之光》流程介绍与代码分析之(一):游戏载入界面的创建

    <黑暗之光>是一款中等大小的RPG游戏,在入门Unity后适合用来上手,了解一整套游戏开发流程以及游戏内的各种功能.借助几篇博客整理一下整体的开发步骤以及代码,方便自己回顾,也便于各位交流 ...

  3. RPG游戏《黑暗之光》流程介绍与代码分析之(五):背包系统的实现(上)

    第五章:背包系统 背包系统作为游戏中的一个重要功能,与游戏存在着诸多的交互性,购买商品.怪物掉落等各种情形都需要访问背包系统,结构较为复杂.因此背包系统将通过两篇博客进行分析. (上)部分包括 功能面 ...

  4. RPG游戏《黑暗之光》流程介绍与代码分析之(二):角色创建界面的实现

    第二章 角色创建 上一章中完成了初始化的场景界面的创建,本章就接着上一篇博客的内容,介绍角色创建的方法. 2.1 角色创建的UI界面 角色创建的背景采用与加载界面所用背景相同,并且Camera不需要移 ...

  5. RPG游戏《黑暗之光》流程介绍与代码分析之(十五):主角受攻击效果以及场景切换

    十五章:主角受攻击效果以及场景切换 本篇博客将<黑暗之光>开发的最后工作做完,包括之前未实现的主角被击效果,以及实际运行中的场景切换. 15.1 主角的受攻击效果 我们参照WolfBaby ...

  6. RPG游戏《黑暗之光》流程介绍与代码分析之(十四):角色技能系统的实现

    十四章:角色技能系统的实现 技能系统是本游戏开发的最后一部分内容,与普通攻击系统不同,我们需要添加释放技能的特效.动画以及播放时间.并将动画分为回复.Buff.单体和群体. 14.1添加技能的特效名称 ...

  7. RPG游戏《黑暗之光》流程介绍与代码分析之(六):背包系统的实现(下)

    接着(上)部分的内容,本节关注物品栏中一些功能的实现,及 拾取操作的模拟 背包的显示与隐藏 物品提示信息 5.4 拾取模拟 有了(上)部分的铺垫,本节的目标是实现物品拾取功能. 物品拾取功能的逻辑分为 ...

  8. RPG游戏《黑暗之光》流程介绍与代码分析之(三):角色控制系统的实现

    第三章:角色控制 本篇博客主要对人物移动及其相关操作进行分析,主要包括主角以及镜头的移动. 在游戏界面中,我们使用Camera作为视角.为了方便之后判断当前tag,我们新建一个Tag脚本,存入一些ta ...

  9. RPG游戏《黑暗之光》流程介绍与代码分析之(十三):角色攻击系统的实现

    十三章:角色攻击系统 角色攻击是杀怪时的核心功能,攻击模式又可细分为普通攻击和技能攻击,其中技能攻击的信息存储在SkillInfoInList,本章节只涉及普通攻击部分. 为Magician添加一个P ...

最新文章

  1. java拍照搜题软件下载_修改版|学生福利!!免费拍照搜题秒出答案,扫一扫作业出答案!...
  2. 基于 Node.js 平台的web开发框架-----express
  3. 验证哥德巴赫猜想:任何一个大于6的偶数均可表示为2个素数之和
  4. git bash卡顿解决
  5. 计算机专业本科开题报告,计算机本科毕业论文开题报告
  6. 数据挖掘的好书_唐宇迪:入门数据挖掘,我最推荐这本书
  7. r语言 array c函数,R语言 数组
  8. SPOJ 694 SPOJ 705 (不重复子串个数:后缀数组)
  9. kettle安装,启动spoon之后一闪就没了问题
  10. 华为服务器系统图标,华为云 服务器图标 visio
  11. Matlab求解微分、积分方程
  12. ftp上传下载工具,6款最值得推荐的Windows端ftp上传下载工具
  13. 微信公众号开发模式几点介绍
  14. 《鹊桥仙·纤云弄巧》 秦观
  15. java如何调用pyramid函数_讲解:ICM、Pyramid、JAVA,PYTHON、PYTHON ,C++SPSS| Statis
  16. 小姑娘说,我全靠水群,挤进了安全圈
  17. TcaplusDB君 · 行业新闻汇编(三)
  18. C语言实现wav文件的读写
  19. 屏下指纹版iPhone终于稳了!效果很好很强大
  20. IC学习笔记1——建立时间和保持时间

热门文章

  1. 宝马公司错过了一次绝佳的营销机会
  2. matlab 地质学,大类学子有话说 | 地球科学与工程学院:探寻地球的奥秘
  3. [BUUCTF-pwn] wdb_2018_semifinal_pwn3
  4. 关系图谱---西方(上帝、耶和华、耶稣、圣母玛利亚、亚当、夏娃)and 东方(盘古、伏羲、女娲、炎帝、黄帝)
  5. 访问Linux服务器新轮子WindTerm使用
  6. Android无法打开相册查看视频
  7. 深入理解 Koa 中间件之 “ 洋葱模型 ”
  8. UCK Network 为开发者提供全方位孵化,打造区块链爆款应用
  9. nprogress 插件 网页顶部加载进度条
  10. 记住沃伦巴菲特这三十条