Exemplo n.º 1
0
    IEnumerator DestroysStuff()
    {
        // 開始造成傷害前先等一下
        yield return(new WaitForSeconds(startDamageWait));

        while (true)
        {
            // 對目前連線的所有敵人做處理
            foreach (GameObject stuff in GetNearbyEnemy())
            {
                // 先取得他們的HP
                DestroyAble destroyAble = stuff.GetComponent <DestroyAble>();

                // 播放電擊聲音
                thunderAudioSource.PlayOneShot(thunderSound, 0.3f);

                // 產生特效
                Instantiate(explosion, stuff.transform.position, stuff.transform.rotation);

                // 扣血
                destroyAble.health -= damage;
            }

            // 每波傷害之間的間隔
            yield return(new WaitForSeconds(damageInterval));
        }
    }
Exemplo n.º 2
0
    int weaponNumber = (int)Weapon.NumberOfWeapon; // 取得列舉的大小



    // Use this for initialization
    void Start()
    {
        // 取得元件
        playerRigidbody   = GetComponent <Rigidbody>();
        playerDestroyAble = GetComponent <DestroyAble>();

        // 取得AudioSource元件 因為有兩個所以用陣列
        playerAudioSourceS = GetComponents <AudioSource>();
        playerAudioSource  = playerAudioSourceS[0];
        playerAudioSource2 = playerAudioSourceS[1];


        // 設定初始武器
        weapon = Weapon.basic;
    }
Exemplo n.º 3
0
    void Update()
    {
        // 偵測是否切換武器
        SwitchWeapon();



        // 武器種類
        switch (weapon)
        {
        case Weapon.basic:
        {
            // 如果按下了Fire1鍵 而且現在的時間已經超過可以發射的時間
            if (Input.GetButton("Fire1") && Time.time >= basicWeapon.NextFire)
            {
                // 下一次可以發射的時間往後延一個fireRate
                basicWeapon.NextFire = Time.time + basicWeapon.fireRate;

                // 建立子彈物件
                Instantiate(basicWeapon.shot, basicWeapon.shotSpawn.position, basicWeapon.shotSpawn.rotation);

                // 播放槍聲
                playerAudioSource2.Play();
            }

            // 切換武器欄位
        }
        break;

        case Weapon.GatlingGun:
        {
            // 如果按下了Fire1鍵 而且現在的時間已經超過可以發射的時間
            if (Input.GetButton("Fire1") && Time.time >= gatlinWeapon.NextFireGatlin)
            {
                // 隨機產生一個子彈發射位置 模擬機槍
                Vector3 shotSpawnGatlin = new Vector3(Random.Range(basicWeapon.shotSpawn.position.x - 0.5f, basicWeapon.shotSpawn.position.x + 0.5f), basicWeapon.shotSpawn.position.y, basicWeapon.shotSpawn.position.z);

                // 下一次可以發射的時間往後延一個fireRate
                gatlinWeapon.NextFireGatlin = Time.time + gatlinWeapon.fireRateGatlin;

                // 建立子彈物件
                Instantiate(basicWeapon.shot, shotSpawnGatlin, basicWeapon.shotSpawn.rotation);

                // 播放槍聲
                playerAudioSource2.Play();
            }
        }
        break;

        case Weapon.Laser:
        {
            if (Input.GetButton("Fire1"))
            {
                // 用laserCreated變數避免重複生成雷射
                if (laserWeapon.LaserCreated == false)
                {
                    // 生成雷射
                    laserWeapon.CloneLaser = Instantiate(laserWeapon.laser, basicWeapon.shotSpawn.position, basicWeapon.shotSpawn.rotation);

                    // 取得子物件的Linerenderer
                    laserWeapon.LaserLine = laserWeapon.CloneLaser.GetComponentInChildren <LineRenderer>();

                    // 重置設線起始寬度
                    laserWeapon.LaserLine.startWidth = 0;


                    // 如果還沒有撥過這個音樂
                    if (playerAudioSource.isPlaying == false)
                    {
                        // 撥放nyanCat音樂
                        playerAudioSource.Play();
                    }
                    else         // 如果已經撥過
                    {
                        // 取消暫停
                        playerAudioSource.UnPause();
                    }

                    // 避免重複執行
                    laserWeapon.LaserCreated = true;
                }

                // 讓射線寬度逐漸增加
                if (laserWeapon.LaserLine.startWidth < 0.3)
                {
                    laserWeapon.LaserLine.startWidth += 0.005f;
                }
                else if (laserWeapon.LaserLine.startWidth < 1.2f)
                {
                    laserWeapon.LaserLine.startWidth += 0.16f;
                }

                // 用來儲存射線碰到的物體的資訊
                RaycastHit myRaycastHit;


                // 利用設線偵測是否擊中敵人
                // 如果有擊中
                if (Physics.Raycast(transform.position, transform.TransformDirection(transform.forward), out myRaycastHit))
                {
                    destroyable = myRaycastHit.collider.gameObject.GetComponent <DestroyAble>();
                    // 限制雷射傷害速度
                    if (laserWeapon.NextLaserInterval <= Time.time)
                    {
                        destroyable.health -= laserWeapon.damage;

                        laserWeapon.NextLaserInterval = Time.time + laserWeapon.laserInterval;

                        // 生成擊中特效
                        Instantiate(laserWeapon.explosionOfLaser, new Vector3(transform.position.x, -6, myRaycastHit.transform.position.z), laserWeapon.explosionOfLaser.transform.rotation);
                        Instantiate(laserWeapon.explosionOfLaser02, new Vector3(transform.position.x, 0, myRaycastHit.transform.position.z), laserWeapon.explosionOfLaser02.transform.rotation);
                    }

                    // 將雷射尾端設為設線所碰到的物體
                    laserWeapon.LaserLine.SetPosition(1, new Vector3(0, 0, myRaycastHit.transform.position.z + 2.5f));
                }
                // 如果沒有擊中
                else
                {
                    // 射線長度設為固定值
                    laserWeapon.LaserLine.SetPosition(1, new Vector3(0, 0, 100));
                }
            }

            // 如果不再按壓發射鍵 或者玩家已經消失
            else if (Input.GetButtonUp("Fire1"))
            {
                // 重置射線的生成狀態
                laserWeapon.LaserCreated = false;

                // 刪除剛才建立的射線物件
                if (laserWeapon.CloneLaser != null)
                {
                    Destroy(laserWeapon.CloneLaser);
                }

                // 暫停nyanCat音樂
                playerAudioSource.Pause();
            }

            // 如果射線的母物件存在 將他的座標設定為玩家的槍口位置
            if (laserWeapon.CloneLaser != null)
            {
                laserWeapon.CloneLaser.transform.position = basicWeapon.shotSpawn.position - new Vector3(0, 0, 0.5f);
            }


            break;
        }

        case Weapon.Missile:
        {
            {
                // 如果按下了Fire1鍵 而且現在的時間已經超過可以發射的時間
                if (Input.GetButton("Fire1") && Time.time >= missileWeapon.NextFireMissile)
                {
                    // 下一次可以發射的時間往後延一個fireRate
                    missileWeapon.NextFireMissile = Time.time + missileWeapon.fireRateMissile;

                    // 建立子彈物件
                    Instantiate(missileWeapon.missile, basicWeapon.shotSpawn.position + new Vector3(0, 0, 0), basicWeapon.shotSpawn.rotation);

                    // 播放在玩家物件身上的audio source 也就是槍聲
                    playerAudioSource2.Play();
                }

                // 切換武器欄位
            }
            break;
        }

        case Weapon.Thunder:
        {
            if (Input.GetButton("Fire1"))
            {
                if (thunderWeapon.ThunderCreated == false)
                {
                    thunderWeapon.CloneThunder   = Instantiate(thunderWeapon.Thunder, basicWeapon.shotSpawn.position, basicWeapon.shotSpawn.rotation);
                    thunderWeapon.ThunderCreated = true;
                }
            }
            else if (Input.GetButtonUp("Fire1") || this.gameObject == null)
            {
                thunderWeapon.ThunderCreated = false;
                if (thunderWeapon.CloneThunder != null)
                {
                    Destroy(thunderWeapon.CloneThunder);
                }
            }

            if (thunderWeapon.CloneThunder != null)
            {
                thunderWeapon.CloneThunder.transform.position = basicWeapon.shotSpawn.position - new Vector3(0, 0, 0.5f);
            }

            break;
        }

        default:
            break;
        }
        // 如果武器選擇已經不是閃電
        if (weapon != Weapon.Thunder || playerDestroyAble.health <= 0)
        {
            // 重置生成閃電的布林
            thunderWeapon.ThunderCreated = false;
            // 刪除閃電
            if (thunderWeapon.CloneThunder != null)
            {
                Destroy(thunderWeapon.CloneThunder);
            }
        }
        // 如果武器選擇已經不是雷射
        if (weapon != Weapon.Laser || playerDestroyAble.health <= 0)
        {
            laserWeapon.LaserCreated = false;

            if (laserWeapon.CloneLaser != null)
            {
                Destroy(laserWeapon.CloneLaser);
            }
            // 暫停nyanCat音樂
            playerAudioSource.Stop();
        }
    }