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. Unity3D随意截图并保存

    http://blog.csdn.net/awnuxcvbn/article/details/9199245 效果 代码 <pre name="code" class=&qu ...

  2. 算法笔记_154:算法提高 日期计算(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 已知2011年11月11日是星期五,问YYYY年MM月DD日是星期几?注意考虑闰年的情况.尤其是逢百年不闰,逢400年闰的情况. 输入格式 ...

  3. Drawing text

    We begin with drawing some Unicode text on the client area of a window. #!/usr/bin/python # -*- codi ...

  4. OE context 传参数

    来自:http://shine-it.net/index.php/topic,16360.0.html 有个需求想many2one字段关联显示的value在各个模块显示不同的值. 如果直接该rel_n ...

  5. ‘close’ was not declared in this scope

    ‘close’ was not declared in this scope ‘read’ was not declared in this scope ‘sysconf’ was not decla ...

  6. 【故障处理141119】一次数据库不繁忙时一条sql语句2个运行计划导致业务超时的故障处理

    1,故障描写叙述: 一条select有两个运行计划.在sqlplus中运行选择好的运行计划.仅仅要40毫秒.而在程序中运行选择了差的运行计划,要1分23秒左右,导致前台业务超时报错. 2.故障解决: ...

  7. python标准库 正则表达式(re包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 正则表达式(regular expression)主要功能是从字符串(string)中通过特定的模式(pattern) ...

  8. 深入RecyclerView-为什么要使用ItemDecoration

    Part 1:不要用view做分割线 首先,什么是ItemDecoration?来看看官网是如何解释的. ItemDecoration允许从adapter的数据集合中为特定的item视图添加特性的绘制 ...

  9. Android软件开发之EditText 详解

    EditText在API中的结构 java.lang.Objectandroid.view.Viewandroid.widget.TextView        android.widget.Edit ...

  10. 简单实例,说明自动生成Makefile的详细过程

    为了编译一个简单的源文件main.c,需要自动生成一个makefile,以下是步骤: 第一步:----------在/root/project/main目录下创建一个文件main.c,其内容如下:-- ...