Unity3D项目之 Survival Shooter 记录

Survival Shooter Log
2016年1月19日15:53:55
1.导入资源

2.把预设文件的环境拖到场景中,
Unity3D项目之 Survival Shooter 记录_第1张图片

3.位置归0

4.保存场景
Unity3D项目之 Survival Shooter 记录_第2张图片

5.删除默认灯光,把预设灯光拖到场景中,位置归0
Unity3D项目之 Survival Shooter 记录_第3张图片

6.新建一个 Quad
Unity3D项目之 Survival Shooter 记录_第4张图片

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

8.保存场景
9.新建一个空物体,重命名为BGM
Unity3D项目之 Survival Shooter 记录_第5张图片

10.添加一个 Audio Source 组件,并指定Audio Clip 为BackgroundMusic 勾选Loop选项,音量大小设为0.1
Unity3D项目之 Survival Shooter 记录_第6张图片

11.保存

12.找到Player预设体,拖到场景中
Unity3D项目之 Survival Shooter 记录_第7张图片

13.位置归0,设置标签为Player
Unity3D项目之 Survival Shooter 记录_第8张图片

14.新建一个文件夹名字叫Animation
Unity3D项目之 Survival Shooter 记录_第9张图片

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

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

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

19.右键Idle 状态设为默认

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

21.再建一个Trigger参数叫Did
Unity3D项目之 Survival Shooter 记录_第10张图片

22.右键Idle创建连接到Move,左键点击它们之间连接的白色箭头
Unity3D项目之 Survival Shooter 记录_第11张图片

23.在右边的Conditions(过度条件)中添加一个参数
Unity3D项目之 Survival Shooter 记录_第12张图片

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

25.同理创建连接AnyState到Death的连接,过度条件为触发Die
Unity3D项目之 Survival Shooter 记录_第13张图片

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

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

Unity3D项目之 Survival Shooter 记录_第15张图片

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

29.把脚本文件夹下的PlayerMovement脚本拖到Player上,保存场景
Unity3D项目之 Survival Shooter 记录_第16张图片

30.双击打开此脚本,开始编辑
Unity3D项目之 Survival Shooter 记录_第17张图片

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

2016年1月22日13:19:31
GO ON!
32 . 选中摄像机,调整位置,旋转等参数,效果如下:
Unity3D项目之 Survival Shooter 记录_第18张图片

33.给这个摄像机新建一个脚本CameraFollow 双击打开编辑
Unity3D项目之 Survival Shooter 记录_第19张图片

增加鼠标滚轮放大缩小的功能
Unity3D项目之 Survival Shooter 记录_第20张图片

34.在预设文件夹里把Zombunny 物体拖到场景中,并把HiteParticles拖到Zombunny上,再把Zombunny设置到Shootable层中
Unity3D项目之 Survival Shooter 记录_第21张图片

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

36.再添加胶囊碰撞体,并调整位置
Unity3D项目之 Survival Shooter 记录_第22张图片
Unity3D项目之 Survival Shooter 记录_第23张图片

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

Unity3D项目之 Survival Shooter 记录_第24张图片

38.添加AudioSource组件
Unity3D项目之 Survival Shooter 记录_第25张图片

39.添加导航组件,设置参数
Unity3D项目之 Survival Shooter 记录_第26张图片

40.打开导航面板

41.设置一些参数后点击Bake
Unity3D项目之 Survival Shooter 记录_第27张图片

42.为ZomBunny创建动画,和前面一样,看截图就行
Unity3D项目之 Survival Shooter 记录_第28张图片

46

建2个Trigger参数

设置Move为默认状态,设置过度条件为PlayerDead
Unity3D项目之 Survival Shooter 记录_第29张图片
设置Any->Death 为Dead

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

43.把脚本文件夹里的EnemyMovement脚本拖给Zombunny
Unity3D项目之 Survival Shooter 记录_第30张图片

保存,运行测试。

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

45 . 再创建一个Canvas
Unity3D项目之 Survival Shooter 记录_第31张图片

46.重命名Canvas为HUDCanvas 并添加一个 CanvasGroup 组件,并取消勾选下面两个选项
Unity3D项目之 Survival Shooter 记录_第32张图片

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

48.设置对齐方式为左下角,并设置宽度高度75 60
Unity3D项目之 Survival Shooter 记录_第33张图片

49.再HealthUI下建一个UI->Image子物体,重命名为Heart
Unity3D项目之 Survival Shooter 记录_第34张图片

50.修改位置为0,0,0 大小为 30 30,下面的Source Image 指定一个心形的图片
Unity3D项目之 Survival Shooter 记录_第35张图片

51.同样,再新建一个子物体 Slider,重命名为HealthSlider
Unity3D项目之 Survival Shooter 记录_第36张图片

52.修改一下位置

53.删除下面的手柄组件
Unity3D项目之 Survival Shooter 记录_第37张图片

54.Transition模式改为NONE 最大值改为100
Unity3D项目之 Survival Shooter 记录_第38张图片

55.把滑块的背景色的透明度改小点,这样就能半透明显示
Unity3D项目之 Survival Shooter 记录_第39张图片

56.完成后效果如下
Unity3D项目之 Survival Shooter 记录_第40张图片

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

58.设置它的对齐方式为铺满屏幕,并修改颜色的透明度为0
Unity3D项目之 Survival Shooter 记录_第41张图片

59.保存场景,保存工程。
60.把PlayerHealth脚本拖到Player上
Unity3D项目之 Survival Shooter 记录_第42张图片

61.脚本内容如下
Unity3D项目之 Survival Shooter 记录_第43张图片
Unity3D项目之 Survival Shooter 记录_第44张图片

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

63.再把EnemyAttack 脚本拖给Zombunny,脚本如下:
Unity3D项目之 Survival Shooter 记录_第45张图片
Unity3D项目之 Survival Shooter 记录_第46张图片

64.再把EnemyHealth脚本拖到Zombuuny上
Unity3D项目之 Survival Shooter 记录_第47张图片

脚本

Unity3D项目之 Survival Shooter 记录_第48张图片

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

Unity3D项目之 Survival Shooter 记录_第49张图片
然后保存。

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

67.展开Player物体,找到下面的GunBarrelEnd物体,粘贴上面复制的粒子组件
Unity3D项目之 Survival Shooter 记录_第50张图片

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

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

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

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

71.再添加一个AudioSource组件,指定音源,取消勾选一开始就播放
Unity3D项目之 Survival Shooter 记录_第51张图片

72.打开脚本文件夹,把PlayerShooting脚本拖到GunBarrelEnd上
Unity3D项目之 Survival Shooter 记录_第52张图片

脚本内容
Unity3D项目之 Survival Shooter 记录_第53张图片

73.重新打开EnemyMovement脚本,把所有的注释符号都删掉
Unity3D项目之 Survival Shooter 记录_第54张图片

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


Unity3D项目之 Survival Shooter 记录_第55张图片

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

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

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

保存,运行,没问题了。

76.选中HUDCanvas,右键UI->Text 新建一个Text子物体,重命名为ScoreText
Unity3D项目之 Survival Shooter 记录_第57张图片

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

78.添加一个Shadow组件,参数设为 2 ,-2
Unity3D项目之 Survival Shooter 记录_第59张图片

整体效果如下
Unity3D项目之 Survival Shooter 记录_第60张图片

79.把ScoreManager脚本拖给ScoreText物体上
Unity3D项目之 Survival Shooter 记录_第61张图片

代码
Unity3D项目之 Survival Shooter 记录_第62张图片

80.重新打开EnemyHealth脚本,在最下面,取消注释增加分数的代码
Unity3D项目之 Survival Shooter 记录_第63张图片

值得注意的是这里的StartSinking方法是在该角色的死亡动画播放时触发的一个事件,该事件就调用了这个方法
Unity3D项目之 Survival Shooter 记录_第64张图片

81 . 在预置文件夹里再拖一个敌人Zombear到场景中,并指定动画控制机为EnemyAC,它的行为和动画都和Zombunny类似
Unity3D项目之 Survival Shooter 记录_第65张图片

82.在Animation文件夹上右键新建一个Animator Override Controller,重命名为hellephantAOC
Unity3D项目之 Survival Shooter 记录_第66张图片

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

84.别忘了指定该游戏物体的动画控制器
Unity3D项目之 Survival Shooter 记录_第67张图片

保存,测试,没有问题
记:无意间发现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脚本拖到此物体上

代码
Unity3D项目之 Survival Shooter 记录_第68张图片

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

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

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

89.再右键UI->Text,重命名为GameOverText,设置为居中,设置宽度300高度50,文字内容为GameOver! 字体用分数的那个Luck字体,大小为50.段落对齐为水平垂直居中对齐,再加一个Shadow组件
Unity3D项目之 Survival Shooter 记录_第69张图片

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

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

92.选择HUDCanvas,点击菜单Window->Animation,为其创建一个动画
Unity3D项目之 Survival Shooter 记录_第70张图片

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

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

94 . 分别把下面需要添加动画的元素都添加进来
Unity3D项目之 Survival Shooter 记录_第71张图片

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

96 . 选择刚才的GameOverClip 取消勾选Loop 循环
Unity3D项目之 Survival Shooter 记录_第72张图片

97.打开HUDCanvas下的HUDCanvas动画状态控制器
Unity3D项目之 Survival Shooter 记录_第73张图片

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

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

内容如下
Unity3D项目之 Survival Shooter 记录_第74张图片

记得指定脚本

这样游戏结束了以后就会播放动画,然后会重新开始游戏。
到此,就已经完成了!但是我又继续优化了一下,我不想让玩家死亡后游戏自动重新开始,而是按”R”键,游戏才重新开始,按ESC键暂停游戏,再次按ESC键继续游戏,于是打开GameOverManager脚本编辑,添加如下代码
Unity3D项目之 Survival Shooter 记录_第75张图片
99.保存,测试,OK!至此,这个项目就算完结了吧!

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

Done
. 2016年1月28日14:26:20

你可能感兴趣的:(unity3d)