噩梦射手(SurvivalShooter)教程(八)

来源:互联网 发布:网络视频管理系统 编辑:程序博客网 时间:2024/04/30 07:43

这里写图片描述

SurvivalShooter 是Unity的官方教程案例

受伤飙红

  1. 接着上一节的UI,在Hierarchy里选中Canvas右击UI->Image,新建一个image。将image拉伸到整个游戏界面一样大,将color的透明度A调成0%
    这里写图片描述
  2. 接着我们在代码中更改透明度,让主角被攻击时这个image的透明度瞬间到100%。在PlayerHealth下加入代码:
    这里写图片描述public float flashTime = 5f;//flashTime是图片闪烁的时间值
    public Color flashColor = new Color (1f, 0f, 0f, 0.1f);
    //flashColor是闪烁的颜色,0.1f表示以10%的红色闪烁
    bool isDamaged = false;

    这里写图片描述damageImage.color = Color.Lerp
    (damageImage.color, Color.clear, flashTime*Time.deltaTime);
    //这里再次用到插值的方法,让红色的image再次回归透明
  3. 把先前做好的image拖入到变量里
    这里写图片描述
  4. 运行,可以看到主角被攻击时屏幕飙红。
    这里写图片描述

主角攻击

  1. 枪口的火花:在Hierarchy里选中Player下的GunBarrelEnd右击Light->PointLight,设置各项参数,颜色(238,186,93)
    这里写图片描述
  2. 将场景中原本的Directional Light调暗,具体亮度随意
    这里写图片描述
  3. 先看看灯光效果
    这里写图片描述
  4. 还行,接下来把Point light中Light先勾选掉,待会在主角攻击时再把枪口的火花亮起
    这里写图片描述
  5. 选中Player下的GunBarrelEnd添加Particle System组件,粒子系统。开始填参数:颜色(249,232,0)
    这里写图片描述
  6. 选中 Particle System 右下角的+ 号,选中SizeOverLifeTime
    这里写图片描述
    这里写图片描述
  7. 同样选中 Particle System 右下角的+ 号,选中ColorOverLifeTime,颜色可以根据自己的需要添加
    这里写图片描述
  8. 同样选中 Particle System 右下角的+ 号,选中VelocityOverLifeTime,将z改一点
    这里写图片描述
  9. 把Particle System的Looping勾选掉。
  10. 选中Player下的GunBarrelEnd添加LineRenderer组件,修改参数
    这里写图片描述
  11. 新建一个script,EnemyHealth
    这里写图片描述
  12. 新建一个script,PlayerShoot
    这里写图片描述
//得到主角的各项组件    ParticleSystem gunParticle;    LineRenderer gunLine;    Light gunLight;//利用射线检测碰撞、    Ray shootRay;    int shootMask;    RaycastHit shootHit;    float timer;//每次射击的时间    public int range = 100;//射击的范围    public float timeBetweenLine=0.15f;//射击冷却时间    public int damage=20;//主角攻击力

这里写图片描述
这里写图片描述

Input.GetButton ("Fire1")//Unity默认Fire1为左键timer = 0;//每次射击时间清零gunLine.enabled = true;//打开射线gunLine.SetPosition (0, transform.position);//设置射线的起始位置,需要计算的是射线的方向if (Physics.Raycast (shootRay, out shootHit, range,shootMask)) {EnemyHealth enemyHealth = shootHit.collider.GetComponent<EnemyHealth> ();//得到怪物的生命值if (enemyHealth != null) {    enemyHealth.TakeDamage (damage);//扣血逻辑}    gunLine.SetPosition (1, shootHit.point);//射线方向    } else        gunLine.SetPosition (1, shootRay.origin + shootRay.direction * range);//射线方向。

先添加一个layer
这里写图片描述
将怪物Prefabs的layer以及Environment除了Floor之外的物体的layer全部设置成Shootable
这里写图片描述
运行,点击,可以看见线条了。
这里写图片描述

分数Scroe

  1. 在Hierarchy里选中Canvas右击UI->Text,新建一个Text,调整位置和参数:
    这里写图片描述
    效果图
    这里写图片描述
  2. 关于杀死怪物得分,我们在下一节制作。
0 0