Survival Shooter Log
2016年1月19日15:53:55
1.导入资源
3.位置归0
7.旋转90度,设置缩放100,100,1 重命名为floor 移除它的MeshRender 组件,并设在在Floor层
10.添加一个 Audio Source 组件,并指定Audio Clip 为BackgroundMusic 勾选Loop选项,音量大小设为0.1
11.保存
15.在这个文件夹下新建一个Animation Controller
16.名字就叫PlayerAC 拖到层级面板中Player物体上
17.双击打开这个AC
18.把模型下的Player下的三个动画拖到Animator窗口里
19.右键Idle 状态设为默认
20.新建一个Bool参数 名字叫IsWalking
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上,保存场景
31.保存,测试,发现有点问题,移动的时候并没有立即切换到移动动画,而是等Idle的动画播放完毕后才能切换,打开动画控制窗口,点击连接的箭头,过度条件上面取消勾选Has Exit Time,在保存,测试。发现没有问题了
2016年1月22日13:19:31
GO ON!
32 . 选中摄像机,调整位置,旋转等参数,效果如下:
33.给这个摄像机新建一个脚本CameraFollow 双击打开编辑
34.在预设文件夹里把Zombunny 物体拖到场景中,并把HiteParticles拖到Zombunny上,再把Zombunny设置到Shootable层中
35.给Zombunny添加刚体,并锁定移动轴和旋转轴
37.在添加球形碰撞体,勾上Trigger选项,主要用来检测攻击
40.打开导航面板
建2个Trigger参数
设置Move为默认状态,设置过度条件为PlayerDead
设置Any->Death 为Dead
把这个动画控制器指定给Zombunny
43.把脚本文件夹里的EnemyMovement脚本拖给Zombunny
保存,运行测试。
2016年1月27日10:35:11
丢了好几天,今天继续
44.点击Scene窗口上的2D 按钮,切换到2D视图
46.重命名Canvas为HUDCanvas 并添加一个 CanvasGroup 组件,并取消勾选下面两个选项
47.在这个HUDCanvas上右键新建一个空物体,在重命名为HealthUI
49.再HealthUI下建一个UI->Image子物体,重命名为Heart
50.修改位置为0,0,0 大小为 30 30,下面的Source Image 指定一个心形的图片
51.同样,再新建一个子物体 Slider,重命名为HealthSlider
52.修改一下位置
54.Transition模式改为NONE 最大值改为100
57.在HUDCanvas下面新建一个Image子物体,重命名为DamageImage
59.保存场景,保存工程。
60.把PlayerHealth脚本拖到Player上
62.回到场景,指定好各个物体组件
63.再把EnemyAttack 脚本拖给Zombunny,脚本如下:
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,设置水平垂直居中对齐,设置字体颜色为白色,具体可参照如下
79.把ScoreManager脚本拖给ScoreText物体上
80.重新打开EnemyHealth脚本,在最下面,取消注释增加分数的代码
值得注意的是这里的StartSinking方法是在该角色的死亡动画播放时触发的一个事件,该事件就调用了这个方法
81 . 在预置文件夹里再拖一个敌人Zombear到场景中,并指定动画控制机为EnemyAC,它的行为和动画都和Zombunny类似
82.在Animation文件夹上右键新建一个Animator Override Controller,重命名为hellephantAOC
83.选中这个控制器,在右边制定Controller为EnemyAC,并把要覆盖的动画片段相应的拖上去覆盖掉
保存,测试,没有问题
记:无意间发现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添加曲线动画
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
Done
. 2016年1月28日14:26:20