zoukankan      html  css  js  c++  java
  • Unity3D项目之 Survival Shooter 记录

    1.导入资源
    1

    2.把预设文件的环境拖到场景中,
    2

    3.位置归0
    3

    4.保存场景
    4

    5.删除默认灯光,把预设灯光拖到场景中,位置归0
    5

    6.新建一个 Quad
    6

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

    8.保存场景
    9.新建一个空物体,重命名为BGM
    8

    10.添加一个 Audio Source 组件,并指定Audio Clip 为BackgroundMusic 勾选Loop选项,音量大小设为0.1
    9

    11.保存

    12.找到Player预设体,拖到场景中
    10

    13.位置归0,设置标签为Player
    11

    14.新建一个文件夹名字叫Animation
    12

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

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

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

    19.右键Idle 状态设为默认
    16

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

    21.再建一个Trigger参数叫Did
    18

    22.右键Idle创建连接到Move,左键点击它们之间连接的白色箭头
    19

    23.在右边的Conditions(过度条件)中添加一个参数
    20

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

    25.同理创建连接AnyState到Death的连接,过度条件为触发Die
    22

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

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

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

    29.把脚本文件夹下的PlayerMovement脚本拖到Player上,保存场景
    27

    30.双击打开此脚本,开始编辑
    28
    29

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

    2016年1月22日13:19:31
    Go ON!
    32 . 选中摄像机,调整位置,旋转等参数,效果如下:
    31
    32

    33.给这个摄像机新建一个脚本CameraFollow 双击打开编辑
    33

    增加鼠标滚轮放大缩小的功能
    34

    34.在预设文件夹里把Zombunny 物体拖到场景中,并把HiteParticles拖到Zombunny上,再把Zombunny设置到Shootable层中
    35

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

    36.再添加胶囊碰撞体,并调整位置

    38

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

    38.添加AudioSource组件
    41

    39.添加导航组件,设置参数

    40.打开导航面板
    43

    41.设置一些参数后点击Bake
    44

    42.为ZomBunny创建动画,和前面一样,看截图就行
    45

    46

    建2个Trigger参数
    47

    设置Move为默认状态,设置过度条件为PlayerDead
    48
    设置Any->Death 为Dead
    49

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

    43.把脚本文件夹里的EnemyMovement脚本拖给Zombunny
    51

    保存,运行测试。

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

    45 . 再创建一个Canvas
    53

    46.重命名Canvas为HUDCanvas 并添加一个 CanvasGroup 组件,并取消勾选下面两个选项
    54

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

    48.设置对齐方式为左下角,并设置宽度高度75 60
    56

    49.再HealthUI下建一个UI->Image子物体,重命名为Heart
    57

    50.修改位置为0,0,0 大小为 30 30,下面的Source Image 指定一个心形的图片
    58

    51.同样,再新建一个子物体 Slider,重命名为HealthSlider
    59

    52.修改一下位置
    60

    53.删除下面的手柄组件
    61

    54.Transition模式改为NONE 最大值改为100
    62

    55.把滑块的背景色的透明度改小点,这样就能半透明显示
    63

    56.完成后效果如下
    64

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

    58.设置它的对齐方式为铺满屏幕,并修改颜色的透明度为0

    59.保存场景,保存工程。
    60.把PlayerHealth脚本拖到Player上

    61.脚本内容如下


    70

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

    63.再把EnemyAttack 脚本拖给Zombunny,脚本如下:

    64.再把EnemyHealth脚本拖到Zombuuny上

    脚本
    75

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


    然后保存。

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

    67.展开Player物体,找到下面的GunBarrelEnd物体,粘贴上面复制的粒子组件

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

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

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

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

    71.再添加一个AudioSource组件,指定音源,取消勾选一开始就播放

    72.打开脚本文件夹,把PlayerShooting脚本拖到GunBarrelEnd上

    脚本内容

    73.重新打开EnemyMovement脚本,把所有的注释符号都删掉
    90

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


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

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

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

    保存,运行,没问题了。

    76.选中HUDCanvas,右键UI->Text 新建一个Text子物体,重命名为ScoreText
    95

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

    78.添加一个Shadow组件,参数设为 2 ,-2

    整体效果如下

    79.把ScoreManager脚本拖给ScoreText物体上

    代码
    100

    80.重新打开EnemyHealth脚本,在最下面,取消注释增加分数的代码

    值得注意的是这里的StartSinking方法是在该角色的死亡动画播放时触发的一个事件,该事件就调用了这个方法

    81 . 在预置文件夹里再拖一个敌人Zombear到场景中,并指定动画控制机为EnemyAC,它的行为和动画都和Zombunny类似

    82.在Animation文件夹上右键新建一个Animator Override Controller,重命名为hellephantAOC

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

    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脚本拖到此物体上

    代码
    110

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

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

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

    89.再右键UI->Text,重命名为GameOverText,设置为居中,设置宽度300高度50,文字内容为GameOver! 字体用分数的那个Luck字体,大小为50.段落对齐为水平垂直居中对齐,再加一个Shadow组件

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

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

    92.选择HUDCanvas,点击菜单Window->Animation,为其创建一个动画

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

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

    94 . 分别把下面需要添加动画的元素都添加进来
    120

    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

  • 相关阅读:
    gitolite 丢失管理密钥/访问权限 解决办法
    4/20
    socket套接字模块
    网络编程part2
    网络编程part1
    异常处理
    类的属性查找
    多继承带来的菱形问题
    property装饰器
    类的继承派生
  • 原文地址:https://www.cnblogs.com/jiangshuai52511/p/6650341.html
Copyright © 2011-2022 走看看