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)”加工留下的 ...
随机推荐
- Asp.net MVC中Html.Partial, RenderPartial, Action,RenderAction 区别和用法【转发】
Html.partial和RenderPartial的用法与区别Html.partial和RenderPartial都是输出html片段,区别在于Partial是将视图内容直接生成一个字符串并返回(相 ...
- ThreadPoolExecutor中策略的选择与工作队列的选择(java线程池)
工作原理 1.线程池刚创建时,里面没有一个线程.任务队列是作为参数传进来的.不过,就算队列里面有任务,线程池也不会马上执行它们. 2.当调用 execute() 方法添加一个任务时,线程池会做如下判断 ...
- TypeScript 面向对象基础知识
孙广东 2016.4.5 JavaScript如今到处都是.web.server(通过NodeJS).移动应用(通过各种框架).全部这些,TypeScript都能够使用,而且能够为JavaScrip ...
- Spring 泛型依赖注入
BaseService<T>:有RoleService和UserService两的子类 BaseRepepositry<T>:有UserRepository和RoleRepos ...
- 关于RHEL6下桥网配置的写法(ifcfg-eth0,ifcfg-br0) / 在阿里云的CentOS上安装docker
Posted on 2011-07-28 16:46 zhousir1991 阅读(1978) 评论(0) 编辑 收藏 以下仅仅是我在做练习的时候下的环境,参照写即可: [root@desktop2 ...
- J2ME项目移植到Android平台六大注意事项
很多J2ME项目如何移植到Android平台呢?Java虽然号称是跨平台应用但是目前的移植问题还是比较严重的,不知道未来Sun推出JavaFx或F3时会出现什么问题,如何从J2ME移植到Android ...
- python --标准库 路径与文件 (os.path包, glob包)
os.path包 os.path包主要是处理路径字符串,提取出有用信息. #coding:utf-8 import os.path path = 'D:\\Python7\\test\\data.tx ...
- PostgreSQL远端访问
PostgreSQL默认的理念是运行在本地地址且不允许外部访问的. 如果想通过Navicat for postgreSql这种优秀的第三方软件访问需要做出如下修改: 一.启动在外部可访问的地址上 编辑 ...
- centos gnome桌面放大
我不知道gnome 为什么要这么做.但是真的有效: gsettings set org.gnome.desktop.interface scaling-factor # 放大2倍
- mysql 用户自定义变量
SQL中可以用变量来操作值.那么问题就来了.mysql中怎么定义一个变量呢? 一.定义变量 1.定义变量的语法: set @var_name=expr [,@var_name=expr] ... 2. ...