Unity3D项目之 Survival Shooter 记录
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 记录的更多相关文章
- Unity3D框架插件uFrame实践记录(一)
1.概览 uFrame是提供给Unity3D开发者使用的一个框架插件,它本身模仿了MVVM这种架构模式(事实上并不包含Model部分,且多出了Controller部分).因为用于Unity3D,所以它 ...
- SVN对unity3d项目版本进行管理的不方便问题,研究ing
unity3d项目版本控制遇到些问题,找了以下资料做参考,现在mark一下,以后慢慢解决,之后总结. Unity开启meta. meta:版本控制文件,在新加入项时,Unity3D会产生一个同名的.m ...
- vs2005中删除最近打开的项目和文件的记录
vs2005中总是保留最近打开的项目和文件的记录,甚至是以删除的它也不删,-_-!下面介绍几种删除的方法: 第一种:建立一个bat文件,以后双击即可清除,内置代码如下: @echo off@REG D ...
- JSBinding + SharpKit / 实战:转换 Survival Shooter
从 asset store 下载 Survival Shooter (商店里有2个版本,一种是给Unity5用的,一个是给Unity4.6用的,我们这个实验用的是后者,版本是2.2.如果) 1 删除多 ...
- ASP.NET中如何删除最近打开的项目和文件的记录
ASP.NTET中总是保留最近打开的项目和文件的记录,甚至是已删除的它也不删.下面介绍几种删除的方法: 第一种:建立一个bat文件,以后双击即可清除,内置代码如下: @echo off@REG Del ...
- 项目中oracle存储过程记录——经常使用语法备忘
项目中oracle存储过程记录--经常使用语法备忘 项目中须要写一个oracle存储过程,需求是收集一个复杂查询的内容(涉及到多张表),然后把符合条件的记录插入到目标表中.当中原表之中的一个的日期字段 ...
- Unity3D项目实战笔记(10):Unity3D编译IPA的PostEvents–节约时间利器
最近,SDK支付等接入差不多了,就从Unity3D生成IPA (企业版License), 然,需要手动执行的PostEvents竟然多大10项+, 这些我默默的承受了1周时间,每次约浪费20分钟-额外 ...
- Unity3D项目实战笔记(5):延时功能的几种实现
我所做过的系统,分单机版系统(2005年).CS系统(2010年).实时系统(2015年),各个系统均有“延时”功能:定时调度的: 本博客说的是实时系统中的延时功能(基于Unity3D游戏引擎). 在 ...
- 深入浅出聊Unity3D项目优化:从Draw Calls到GC
前言: 刚开始写这篇文章的时候选了一个很土的题目...<Unity3D优化全解析>.因为这是一篇临时起意才写的文章,而且陈述的都是既有的事实,因而给自己“文(dou)学(bi)”加工留下的 ...
随机推荐
- 学习使用Jmeter做压力測试(一)--压力測试基本概念
一.性能測试的概念 性能測试是通过自己主动化的測试工具模拟多种正常峰值及异常负载条件来对系统的各项性能指标进行測试.负载測试和压力測试都属于性能測试,两者能够结合进行. 通过负载測试, ...
- 一些Java面试题深入分析
一.&和&&的差别? &和&&都能够用作逻辑与的运算符.表示逻辑与(and),当运算符两边的表达式的结果都为true时.整个运算结果才为true,否则, ...
- 【BIEE】安装好BIEE后,修改默认登录页面不为QuickStart页面
已经安装好了BIEE,但是发布了自己的资料库后,默认的登录页面为QuickStart,导致已登录就看到错误页面 现在进行如下修改即可 点击登录身份后的名字,例如我的是weblogic 选择[我的账户] ...
- Android应用开发揭秘之优化技术
2013-06-28 第15章 优化技术 不管用什么语言进行开发,所有的优秀代码都会展示出共有的经典品质: 简练,可读性强,模块化,层次性,设计良好,高效,优雅,清晰等. Java程序员能够依 ...
- PHP-数据库长连接mysql_pconnect的细节
PHP的MySQL持久化连接,美好的目标,却拥有糟糕的口碑,往往令人敬而远之.这到底是为啥么.近距离观察后发现,这家伙也不容易啊,要看Apache的脸色,还得听MySQL指挥. 对于作为Apache模 ...
- Python-线程的生命周期
线程的生命周期 所谓的xx生命周期,其实就是某对象的包含产生和销毁的一张状态图.线程的生命周期如下图所示: 各状态的说明如下: New新建.新创建的线程经过初始化后,进入Runnable状态. Run ...
- jQuery 操作cookie保存用户浏览信息
使用jQuery操作cookie之前需要引入jQuery的一个cookie小组件js,代码如下: /* jQuery cookie plugins */jQuery.cookie ...
- tomcat发布web项目,支持域名
首先需要安装JDK,不是Linux自带的OpenJDK,参考下面的文章: centos下 安装jdk 设置java环境变量:编辑这个/etc/profile文件: export JAVA_HOME=/ ...
- mosquitto $SYS下topic
$SYS/broker/clients/connected
- 读写SQLServer数据库中的image类型数据(简单)
1.将double类型的数据存储于image类型的变量中: (1). char *CManualForecastResultBll::DoubleArray2Binary(std::vector< ...