Unity-BattleStar丨13. 终章:改善BUG,增加三连发模式

2024-08-14 16:40:57 浏览数 (2)

写在前面

根据上个视频的展示,细心的朋友可能会发现有以下问题:

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);
    }
}

下载

下载:代码及音效下载地址

0 人点赞