1.导入资源

2.把预设文件的环境拖到场景中,

3.位置归0

4.保存场景

5.删除默认灯光,把预设灯光拖到场景中,位置归0

6.新建一个 Quad

7.旋转90度,设置缩放100,100,1 重命名为floor 移除它的MeshRender 组件,并设在在Floor层

8.保存场景
9.新建一个空物体,重命名为BGM

10.添加一个 Audio Source 组件,并指定Audio Clip 为BackgroundMusic 勾选Loop选项,音量大小设为0.1

11.保存

12.找到Player预设体,拖到场景中

13.位置归0,设置标签为Player

14.新建一个文件夹名字叫Animation

15.在这个文件夹下新建一个Animation Controller

16.名字就叫PlayerAC 拖到层级面板中Player物体上
17.双击打开这个AC

18.把模型下的Player下的三个动画拖到Animator窗口里

19.右键Idle 状态设为默认

20.新建一个Bool参数 名字叫IsWalking

21.再建一个Trigger参数叫Did

22.右键Idle创建连接到Move,左键点击它们之间连接的白色箭头

23.在右边的Conditions(过度条件)中添加一个参数

24.同理,创建一个返回的箭头,过度条件为IsWalking=false

25.同理创建连接AnyState到Death的连接,过度条件为触发Die

26.为Player 物体添加Rigidbody(刚体)组件,并设置Drag和Angular Drag 为Infinity(无限大)
Tips:输入的时候直接输inf后按回车就可以自动补全了。然后展开高级,锁定Y轴的位置,锁定X、Z轴的旋转

27.再添加一个Capsule Collider(胶囊碰撞体),调整位置,使其居中

28.给Player添加一个AudioSource组件,音频片段选择PlayerHurt,取消勾选Play On Awake

29.把脚本文件夹下的PlayerMovement脚本拖到Player上,保存场景

30.双击打开此脚本,开始编辑

31.保存,测试,发现有点问题,移动的时候并没有立即切换到移动动画,而是等Idle的动画播放完毕后才能切换,打开动画控制窗口,点击连接的箭头,过度条件上面取消勾选Has Exit Time,在保存,测试。发现没有问题了

2016年1月22日13:19:31
Go ON!
32 . 选中摄像机,调整位置,旋转等参数,效果如下:

33.给这个摄像机新建一个脚本CameraFollow 双击打开编辑

增加鼠标滚轮放大缩小的功能

34.在预设文件夹里把Zombunny 物体拖到场景中,并把HiteParticles拖到Zombunny上,再把Zombunny设置到Shootable层中

35.给Zombunny添加刚体,并锁定移动轴和旋转轴

36.再添加胶囊碰撞体,并调整位置

37.在添加球形碰撞体,勾上Trigger选项,主要用来检测攻击

38.添加AudioSource组件

39.添加导航组件,设置参数

40.打开导航面板

41.设置一些参数后点击Bake

42.为ZomBunny创建动画,和前面一样,看截图就行

建2个Trigger参数

设置Move为默认状态,设置过度条件为PlayerDead

设置Any->Death 为Dead

把这个动画控制器指定给Zombunny

43.把脚本文件夹里的EnemyMovement脚本拖给Zombunny

保存,运行测试。

2016年1月27日10:35:11
丢了好几天,今天继续
44.点击Scene窗口上的2D 按钮,切换到2D视图

45 . 再创建一个Canvas

46.重命名Canvas为HUDCanvas 并添加一个 CanvasGroup 组件,并取消勾选下面两个选项

47.在这个HUDCanvas上右键新建一个空物体,在重命名为HealthUI

48.设置对齐方式为左下角,并设置宽度高度75 60

49.再HealthUI下建一个UI->Image子物体,重命名为Heart

50.修改位置为0,0,0 大小为 30 30,下面的Source Image 指定一个心形的图片

51.同样,再新建一个子物体 Slider,重命名为HealthSlider

52.修改一下位置

53.删除下面的手柄组件

54.Transition模式改为NONE 最大值改为100

55.把滑块的背景色的透明度改小点,这样就能半透明显示

56.完成后效果如下

57.在HUDCanvas下面新建一个Image子物体,重命名为DamageImage

58.设置它的对齐方式为铺满屏幕,并修改颜色的透明度为0

59.保存场景,保存工程。
60.把PlayerHealth脚本拖到Player上

61.脚本内容如下


62.回到场景,指定好各个物体组件

63.再把EnemyAttack 脚本拖给Zombunny,脚本如下:

64.再把EnemyHealth脚本拖到Zombuuny上

脚本

65.重新打开EnemyAttack脚本,把原来注释的地方取消注释


然后保存。

66.打开预设文件夹里的Gunparticles 复制组件

67.展开Player物体,找到下面的GunBarrelEnd物体,粘贴上面复制的粒子组件

68.继续选中这个GunBarrelEnd物体,添加一个LineRenderer组件,并为其指定材质。

69.并展开设置起始宽度和结束宽度都是0.05

然后暂时禁用掉此(LineRenderer)组件

70.同样,添加一个Light组件,设置颜色为淡黄色,然后再暂时禁用掉

71.再添加一个AudioSource组件,指定音源,取消勾选一开始就播放

72.打开脚本文件夹,把PlayerShooting脚本拖到GunBarrelEnd上

脚本内容

73.重新打开EnemyMovement脚本,把所有的注释符号都删掉

74.重新打开PlayerHealth脚本,移除所有的注释代码符号


2016年1月27日21:37:53 GOOOOO ON..

75.保存,测试。可以运行,但是有个问题,游戏一开始,前面一直射击的话 会播放 粒子烟雾动画和枪口火光粒子烟雾动画 如果停火或者射偏的话
然后再次射击
就不会播放动画了,找了很多资料,也问了些人。没搞好,正准备先搁一边的时候,改了一下,加了一句代码竟然解决了。可能是版本问题。下面就是解决的方法。

就是在play前调用一次Simulate()方法,以后再研究一下这个方法是干嘛的吧。

保存,运行,没问题了。

76.选中HUDCanvas,右键UI->Text 新建一个Text子物体,重命名为ScoreText

77.选中这个Text 设置锚点对齐方式为“中上”,位置,大小,都要设置一下。在然后是显示的文字“Score:0”字体选择一个自带的Luck字体,字体大小设为50,设置水平垂直居中对齐,设置字体颜色为白色,具体可参照如下

78.添加一个Shadow组件,参数设为 2 ,-2

整体效果如下

79.把ScoreManager脚本拖给ScoreText物体上

代码

80.重新打开EnemyHealth脚本,在最下面,取消注释增加分数的代码

值得注意的是这里的StartSinking方法是在该角色的死亡动画播放时触发的一个事件,该事件就调用了这个方法

81 . 在预置文件夹里再拖一个敌人Zombear到场景中,并指定动画控制机为EnemyAC,它的行为和动画都和Zombunny类似

82.在Animation文件夹上右键新建一个Animator Override Controller,重命名为hellephantAOC

83.选中这个控制器,在右边制定Controller为EnemyAC,并把要覆盖的动画片段相应的拖上去覆盖掉

84.别忘了指定该游戏物体的动画控制器

保存,测试,没有问题
记:无意间发现ZomBear和Hellephant两种敌人角色下面还带着一个 DeathParticles

目测应该是死亡时播放的粒子动画,所以就加了些代码时死亡是这个粒子动画能播放

首先是声明变量

ParticleSystem deadParticles;

然后是获取组件

deadParticles = transform.Find("DeathParticles").GetComponent<ParticleSystem>();

然后在Dead方法中播放粒子动画

这样就可以了。
2016年1月27日23:32:23 今天到这

2016年1月28日10:22:39 GO OOOON

85.新建一个空物体,重命名为EnemyManager,在把Scripts文件夹里的EnemyManager脚本拖到此物体上

代码

86.新建三个空物体,在Tag地方指定上不同的颜色,放在不同的位置,命好名

87.回到EnemyManager物体,给它指定3个EnemyManager脚本,并指定好PlayerHealth,和不同的Enemy物体,和不同的出生点

88.在HUDCanvas上右键 新建一个子物体Image重命名为ScreenFader,设置为铺满屏幕,颜色改成个淡蓝色

89.再右键UI->Text,重命名为GameOverText,设置为居中,设置宽度300高度50,文字内容为GameOver! 字体用分数的那个Luck字体,大小为50.段落对齐为水平垂直居中对齐,再加一个Shadow组件

90.确定HUDCanvas中各个物体的顺序是下面这样的,因为排列的顺序不一样,显示的内容也不一样

91.分别把ScroeText和ScreenFader的Alpha值设为0,使其完全透明

92.选择HUDCanvas,点击菜单Window->Animation,为其创建一个动画

点击创建,保存到Animation文件夹

93 . 把GameOverText->Text->Color添加曲线动画

94 . 分别把下面需要添加动画的元素都添加进来

95 . 给他们分别添加上关键帧,先把它们的结束帧都拖到
30帧的位置,然后把时间线拉到第0帧,选择GameOverText:Scale的缩放,在第0帧设为0,再把时间线拉倒第20帧,把缩放设为1.2,再把时间拉倒30帧,把缩放设为1,颜色的Alpha值都设为1(显示),把得分文字的缩放设为0.8
,然后选择所有的关键帧,把它们移动到1:30的位置,再关闭自动记录关键帧的按钮

96 . 选择刚才的GameOverClip 取消勾选Loop 循环

97.打开HUDCanvas下的HUDCanvas动画状态控制器

新建一个空的状态,使其和GameOverClip连接上,设置过度条件为Trigger 名字为GameOver

98.把脚本文件夹中的GameOverManager脚本指定给HUDCanvas,并打开脚本

内容如下

记得指定脚本

这样游戏结束了以后就会播放动画,然后会重新开始游戏。
到此,就已经完成了!但是我又继续优化了一下,我不想让玩家死亡后游戏自动重新开始,而是按”R”键,游戏才重新开始,按ESC键暂停游戏,再次按ESC键继续游戏,于是打开GameOverManager脚本编辑,添加如下代码

99.保存,测试,OK!至此,这个项目就算完结了吧!

100.后续还可以加入很多功能,比如怪死亡以后会掉落物品,这些物品有的可以补充生命值,有的可以增强玩家的火力,或者玩家可以跳跃,这样怪就抓不到玩家了,还有一些BUG需要修复,比如敌人会源源不断的生成,这样会不断的消耗系统资源,可以设定在敌人出现以后多长时间如果没死的话就自动销毁。等等还有很多很多……

下面是链接
或者网址http://pan.baidu.com/s/1i4k1elv

Unity3D项目之 Survival Shooter 记录的更多相关文章

  1. Unity3D框架插件uFrame实践记录(一)

    1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...

  2. SVN对unity3d项目版本进行管理的不方便问题,研究ing

    unity3d项目版本控制遇到些问题,找了以下资料做参考,现在mark一下,以后慢慢解决,之后总结. Unity开启meta. meta:版本控制文件,在新加入项时,Unity3D会产生一个同名的.m ...

  3. vs2005中删除最近打开的项目和文件的记录

    vs2005中总是保留最近打开的项目和文件的记录,甚至是以删除的它也不删,-_-!下面介绍几种删除的方法: 第一种:建立一个bat文件,以后双击即可清除,内置代码如下: @echo off@REG D ...

  4. JSBinding + SharpKit / 实战:转换 Survival Shooter

    从 asset store 下载 Survival Shooter (商店里有2个版本,一种是给Unity5用的,一个是给Unity4.6用的,我们这个实验用的是后者,版本是2.2.如果) 1 删除多 ...

  5. ASP.NET中如何删除最近打开的项目和文件的记录

    ASP.NTET中总是保留最近打开的项目和文件的记录,甚至是已删除的它也不删.下面介绍几种删除的方法: 第一种:建立一个bat文件,以后双击即可清除,内置代码如下: @echo off@REG Del ...

  6. 项目中oracle存储过程记录——经常使用语法备忘

    项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...

  7. Unity3D项目实战笔记(10):Unity3D编译IPA的PostEvents–节约时间利器

    最近,SDK支付等接入差不多了,就从Unity3D生成IPA (企业版License), 然,需要手动执行的PostEvents竟然多大10项+, 这些我默默的承受了1周时间,每次约浪费20分钟-额外 ...

  8. Unity3D项目实战笔记(5):延时功能的几种实现

    我所做过的系统,分单机版系统(2005年).CS系统(2010年).实时系统(2015年),各个系统均有“延时”功能:定时调度的: 本博客说的是实时系统中的延时功能(基于Unity3D游戏引擎). 在 ...

  9. 深入浅出聊Unity3D项目优化:从Draw Calls到GC

    前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的 ...

随机推荐

  1. KineticJS教程(9)

    KineticJS教程(9) 作者: ysm  9.选择器 Kinetic在舞台.层和组对象上都提供了get方法,用于返回这三者中包含的对象. 9.1.根据ID获取对象 要用id获取对象,首先要给对象 ...

  2. 算法笔记_047:复数运算(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 编程实现两个复数的运算.设有两个复数 和 ,则他们的运算公式为: 要求:(1)定义一个结构体类型来描述复数. (2)复数之间的加法.减法.乘法和除法 ...

  3. XMLDocument转为String 摘录

    public static string FormatXmlString(string xmlString) { XmlDocument document = new XmlDocument(); d ...

  4. django.db.utils.OperationalError: no such table: auth_user

    关于使用django 首次创建超级管理员时,出现     django.db.utils.OperationalError: no such table: auth_user   错误 1.首先使用命 ...

  5. unity, ugui button 禁止重复点击

    如上图,button名称为btn_sim,当点击button后,开始播放zoomToTarget动画.为了防止在动画播放过程中再次点击button导致动画被打断,希望当首次点击button后butto ...

  6. 微信client内部推荐项目总结

    如今实习的公司在面向企业提供招聘服务领域数一数二,而下半年的产品重点就在于移动端微信招聘项目.而这次内推项目开发属于微信招聘一个分支.     一.内推综述     乐帝之前读<招聘与录用> ...

  7. [svc]influxdb最佳实战-监控对比

    最近在搞容器的监控,遇到influxdb这个库,搞了两天,些许明白了些套路,做个记录,备忘.... 小结如下: influxdb go语言编写 默认情况influxdb创建的库关联autogen的RP ...

  8. 在CentOS上安装部署MooseFS分布式文件系统

    参考资料: http://www.moosefs.org/tl_files/manpageszip/moosefs-step-by-step-tutorial-cn-v.1.1.pdf 环境介绍:OS ...

  9. 集合运算 蓝桥杯 set容器

    题目描述 给出两个整数集合A.B,求出他们的交集.并集以及B在A中的余集. 输入格式 第一行为一个整数n,表示集合A中的元素个数. 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素. 第三行 ...

  10. Qt学习过程中遇到的问题

    由于工作需要,开始使用Qt,由于在网上找的教程文档时针对qt3的,所以在学习的过程遇到了许多由于版本不一致造成的问题,因此记录下来. 参考的文档是:Qt入门教程 详细讲解版 本机Qt版本为:Qt5.3 ...