SurvivalShooter 是Unity的官方教程案例
受伤飙红
- 接着上一节的UI,在Hierarchy里选中Canvas右击UI->Image,新建一个image。将image拉伸到整个游戏界面一样大,将color的透明度A调成0%
- 接着我们在代码中更改透明度,让主角被攻击时这个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再次回归透明 - 把先前做好的image拖入到变量里
- 运行,可以看到主角被攻击时屏幕飙红。
主角攻击
- 枪口的火花:在Hierarchy里选中Player下的GunBarrelEnd右击Light->PointLight,设置各项参数,颜色(238,186,93)
- 将场景中原本的Directional Light调暗,具体亮度随意
- 先看看灯光效果
- 还行,接下来把Point light中Light先勾选掉,待会在主角攻击时再把枪口的火花亮起
- 选中Player下的GunBarrelEnd添加Particle System组件,粒子系统。开始填参数:颜色(249,232,0)
- 选中 Particle System 右下角的+ 号,选中SizeOverLifeTime
- 同样选中 Particle System 右下角的+ 号,选中ColorOverLifeTime,颜色可以根据自己的需要添加
- 同样选中 Particle System 右下角的+ 号,选中VelocityOverLifeTime,将z改一点
- 把Particle System的Looping勾选掉。
- 选中Player下的GunBarrelEnd添加LineRenderer组件,修改参数
- 新建一个script,EnemyHealth
- 新建一个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
- 在Hierarchy里选中Canvas右击UI->Text,新建一个Text,调整位置和参数:
效果图
- 关于杀死怪物得分,我们在下一节制作。