写在前面
根据上个视频的展示,细心的朋友可能会发现有以下问题:
a、有时开完枪后,画面中没有枪口火花的粒子特效;
b、机器人播放完死亡动画后血条并不会立刻消失,而是等待一段时间;
c、血包重复加血;
d、另外敌人太强大,不容易通关。
因此我先改变了代码,优化了a、b、c三个现象,另增加三连发模式,让游戏体验变得容易
更改后游戏效果展示:BattleStar丨终章
优化思路:
a、在时间原基础上,再增加延迟0.3s,打开ActiveFire开关
b、将销毁机器人的等待时间设置为机器人死亡动画的播放时间——1.1.s
c、修改血包代码
d、增加“三连发模式”
该三连发模式并不是完全意义的一次发射三发子弹,我们也应该判断当还剩两颗子弹时,应以何种方式开枪。
当>=3颗子弹时,我们一次发射三颗子弹;当<3颗子弹时,我们将剩余子弹全部发射出去。另外为区分单发射击和三连发射击的不同,我们增加新的音效,该音效在文章末尾下载
注:本视频上仍有部分开枪特效不显示火花,但那是由于录屏软件帧数不够导致,实际运行该问题已解决。
我们修改的重点主要放在c问题上,因此我们展示c问题的主要优化代码。该游戏内其他所有脚本和上文提到的音效文件已放在CSDN下载资源上,读者可到CSDN下载所有内容。
三连发优化内容
代码语言:javascript复制void Fire()
{
activeFire = false;
if (GunBulletNumber > 0)
{
Vector3 point = new Vector3(mainCamera.pixelWidth / 2, mainCamera.pixelHeight / 2, 0);
Ray ray = mainCamera.ScreenPointToRay(point);
RaycastHit hit;
ChangeGunAnimation("Fire01");
if (Physics.Raycast(ray, out hit))
{
if (Input.GetMouseButton(0))
{
GunBulletNumber--;
gunParticle.Play();
gunAudio.clip = (AudioClip)Resources.Load("RobotHit");
gunAudio.Play();
if (hit.transform.name.Contains("Robot"))
{
hit.transform.GetComponent<Robot>().RobotGetHurt();
}
}
if (Input.GetMouseButton(1))
{
gunAudio.clip = (AudioClip)Resources.Load("7133");
gunParticle.Play();
gunAudio.Play();
if (GunBulletNumber >= 3)
{
GunBulletNumber -= 3;
if (hit.transform.name.Contains("Robot"))
{
hit.transform.GetComponent<Robot>().RobotHealth -= 3;
hit.transform.GetComponent<Robot>().RobotVoice();
}
}
else
{
GunBulletNumber = 0;
if (hit.transform.name.Contains("Robot"))
{
hit.transform.GetComponent<Robot>().RobotHealth -= GunBulletNumber;
hit.transform.GetComponent<Robot>().RobotVoice();
}
}
}
}
Invoke("ResumeFire", gunAnimation.GetClip("Fire01").length 0.3f);
}
else
{
ChangeGunAnimation("Idle04");
gunAnimation.Play();
gunAudio.clip = (AudioClip)Resources.Load("FireWithoutBullet");
gunAudio.Play();
Invoke("ResumeFire", gunAnimation.GetClip("Idle04").length 0.3f);
}
}
下载
下载:代码及音效下载地址