小白貪狼做塔防(5)

下面,我們?yōu)橛螒蚣右稽c(diǎn)變數(shù)——天氣
最初的設(shè)想為晴天時(shí)轮听,火焰·炮彈防御塔正常運(yùn)行骗露,弩箭·激光武器威力加1/2,冰塔減速效果削弱血巍;雨天時(shí)萧锉,火焰·炮彈傷害減半,減速效果提升述寡,雪天火焰·炮彈傷害減3/4柿隙,除減速的冰塔,其余防御塔攻速減半鲫凶。

然后我們下載一個(gè)雨雪的插件禀崖,或者自己寫(xiě)也行。
unity3d 游戲插件 移動(dòng)平臺(tái)天氣系統(tǒng) UniStorm Mobile
鏈接: http://pan.baidu.com/s/1sjIEY41
密碼: n23b

unity3d 游戲插件 天氣 氣候 模擬 Nuaj' v1.2 天氣制作系統(tǒng)
鏈接: http://pan.baidu.com/s/1pJvIyKz
密碼: r289

unity3d 游戲插件 Storm Effects 天氣特效支持IOS
鏈接: http://pan.baidu.com/s/1qW00hqc
密碼: p6qn

我使用的是第三個(gè)螟炫。
那么開(kāi)始動(dòng)手吧波附!
首先創(chuàng)建一個(gè)空物體,并放在在合適的位置昼钻,并創(chuàng)建WeatherController腳本控制天氣轉(zhuǎn)變掸屡,代碼如下:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class WeatherController : MonoBehaviour 
{
    private GameObject Wea;
    public int weather = 0;
    GameObject o = null;
    private int oldweather;
    void Awake()
    {
        Wea = (GameObject)Resources.Load("Weather/Clouds Light");
        
    }
    public void Change()
    {
        if (weather == 0)
        {
            Wea = (GameObject)Resources.Load("Weather/Clouds Light");
        }
        else if (weather == 1)
        {
            Wea = (GameObject)Resources.Load("Weather/Rain Mobile Heavy");
        }
        else if (weather == 2)
        {
            Wea = (GameObject)Resources.Load("Weather/Snow Medium Happy");
        }
        if (transform.GetChildCount() == 0)
        {
            o = Instantiate(Wea, transform.position , Wea.transform.rotation) as GameObject;
            o.transform.parent = transform;
            oldweather = weather;
        }
        else if (transform.GetChildCount() > 0 && weather != oldweather)
        {
            Destroy(transform.GetChild(0).gameObject);
            o = Instantiate(Wea, transform.position , Wea.transform.rotation) as GameObject;
            o.transform.parent = transform;
            oldweather = weather;
        }
    }   
}

我暫時(shí)打算分波次改變天氣(隨機(jī)也行,固定也可然评,隨你喜歡)折晦,weather記錄當(dāng)前天氣編號(hào),oldweather記錄上一次天氣編號(hào)沾瓦,如果前后不同才更新满着,否則不變(減少實(shí)例化和銷(xiāo)毀次數(shù))谦炒,然后在EnemyCreatePos 腳本的Test02協(xié)程中,隨機(jī)weather值风喇,達(dá)到改變天氣從而改變防御塔的作用(防止玩家過(guò)分依賴(lài)某一種防御塔)宁改。

然后更改CheckEnemy腳本:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CheckEnemy : MonoBehaviour 
{
    private WeatherController wc;
    /// <summary>
    /// 是否能打到飛行怪
    /// </summary>
    public bool IsHitFly;
    /// <summary>
    /// 開(kāi)火頻率
    /// </summary>
    public float firewaittime = 2;
    private float fw;
    private float dv;
    /// <summary>
    /// 炮塔價(jià)格
    /// </summary>
    public float value = 100;
    /// <summary>
    /// 臨時(shí)ID,測(cè)試
    /// </summary>
    public int idi = 0;
    /// <summary>
    /// 是否是特效炮塔魂莫,比如激光还蹲,火焰槍
    /// </summary>
    public bool IsEffectTow;
    /// <summary>
    /// 炮塔轉(zhuǎn)動(dòng)速度
    /// </summary>
    public float turnSpeed = 10;
    /// <summary>
    /// 最遠(yuǎn)攻擊距離
    /// </summary>
    public float disFire = 12;
    /// <summary>
    /// 是否有正在攻擊的目標(biāo)
    /// </summary>  
    private bool isAlarm;
    /// <summary>
    /// 子彈
    /// </summary>
    public GameObject ziDan;
    /// <summary>
    /// 子彈生成位置
    /// </summary>
    public Transform firePos;
    /// <summary>
    /// 攻擊目標(biāo)
    /// </summary>
    private Transform targetEnemy;
    /// <summary>
    /// 存儲(chǔ)所有檢測(cè)到的敵人
    /// </summary>
    private List<Transform> enemyList;
    /// <summary>
    /// 開(kāi)火的協(xié)程是否開(kāi)啟
    /// </summary>
    private bool isFire = false;
    void Start () 
    {
        fw = firewaittime;
        wc = GameObject.Find("Weather").GetComponent<WeatherController>();
        enemyList = new List<Transform>();
        //if (ziDan.name == "ZhaDan" || ziDan.name == "FireIce")
        //{
        //    IsHitFly = false;
        //}
        //else {
        //    IsHitFly = true;
        //}
        //如果是特效炮塔,關(guān)閉特效
        if (IsEffectTow) {
            if (transform.GetComponentInChildren<ParticleSystem>() != null) {
                transform.GetComponentInChildren<ParticleSystem>().Stop();
            }
        }
    }
    
    void Update () {
        //攻擊隊(duì)列里有敵人
        if (enemyList.Count != 0)
        {
            if (enemyList[0] == null) 
            {
                if (enemyList.Count != 1)
                {
                    enemyList[0] = enemyList[1];
                    enemyList.Remove(enemyList[1]);
                }
                else {
                    enemyList = new List<Transform>();
                }
            }     
            else 
            {
                if (!isFire)
                {
                    isFire = true;
                    StartCoroutine("Fire");
                }
                //瞄準(zhǔn)敵人
                //transform.LookAt(enemyList[0]);
                if (transform.name != "HighTower") 
                {
                    Vector3 direction = enemyList[0].position - transform.GetChild(0).GetChild(0).position + new Vector3(0, 1.2f, 0);
                    Quaternion qua = Quaternion.LookRotation(direction);
                    transform.GetChild(0).GetChild(0).rotation = Quaternion.Lerp(transform.GetChild(0).GetChild(0).rotation, qua, Time.deltaTime * turnSpeed);
                }
                
                ////如果敵人脫離攻擊范圍耙考,或者死亡                   
                if (enemyList[0].GetComponent<EnemyContrl>().Blood <= 0)
                {
                    enemyList.Remove(enemyList[0]);
                }
            }         
        }
        else {
            if (isFire) 
            {
                StopCoroutine("Fire");
                if (IsEffectTow) {
                    transform.GetComponentInChildren<ParticleSystem>().Stop();
                }            
                isFire = false;
                enemyList = new List<Transform>();
            }
        }
    }
    /// <summary>
    /// 檢測(cè)觸發(fā)物是否為敵人,是的話(huà)放入攻擊列表
    /// </summary>
    void OnTriggerEnter(Collider other) 
    {
        if (IsHitFly)
        {
            if (other.transform.tag == "Enemy" || other.transform.tag == "FlyEnemy")
            {
                if (!enemyList.Contains(other.transform))
                {
                    enemyList.Add(other.transform);
                }
            }
        }
        else 
        {
            if (other.transform.tag == "Enemy")
            {
                if (!enemyList.Contains(other.transform))
                {
                    enemyList.Add(other.transform);
                }
            }
        }       
    }
    void OnTriggerExit(Collider other)
    {
        if (other.transform.tag == "Enemy" || other.transform.tag == "FlyEnemy")
        {
            if (enemyList.Contains(other.transform))
            {
                enemyList.Remove(other.transform);
            }
        }
    }

    /// <summary>
    /// 炮塔射擊敵人
    /// </summary>
    IEnumerator Fire() {
        //播放特效
        if (IsEffectTow) {
            transform.GetComponentInChildren<ParticleSystem>().Play();
        }
        GameObject go = null;
        while (true) 
        {
            yield return new WaitForSeconds(firewaittime);
            if (enemyList.Count != 0 && enemyList[0] != null)
            {
                //生成子彈并指定發(fā)射的目標(biāo)
                 go = Instantiate<GameObject>(ziDan, firePos.transform.position, firePos.transform.rotation);                 
                if (transform.tag == "Pao")
                {
                    dv = go.GetComponent<ZhaDan>().damageValue;
                    go.GetComponent<ZhaDan>().target = enemyList[0];
                }
                else if(transform.tag == "NoPao")
                {
                    go.GetComponent<Bullet>().target = enemyList[0];
                }
                if (go.tag == "Bomb")
                {
                    go.GetComponent<ZhaDan>().damageValue = dv;
                    firewaittime = fw;
                    if (wc.weather == 1)
                    {
                        go.GetComponent<ZhaDan>().damageValue = dv * 0.75f;
                        firewaittime = fw * 0.75f;
                    }
                    else if (wc.weather == 0)
                    {
                        go.GetComponent<ZhaDan>().damageValue = dv * 1.25f;
                    }
                }
                else if (go.tag == "Ice")
                {
                    firewaittime = fw;
                    if (wc.weather == 1)
                    {
                        go.GetComponent<ZhaDan>().damageValue = dv * 1.25f;
                    }
                    else if (wc.weather == 2)
                    {
                        firewaittime = fw * 1.25f;
                    }
                    else
                    {
                        go.GetComponent<ZhaDan>().damageValue = dv * 0.75f;
                        firewaittime = fw * 0.75f;
                    }
                }
                else if (go.tag == "Untagged")
                {
                    firewaittime = fw;
                    if (wc.weather == 0)
                    {
                        firewaittime = fw * 1.25f;
                    }
                    else if (wc.weather == 1)
                    {
                        firewaittime = fw * 1.25f;
                    }
                }
            }
            else if (enemyList.Count != 0 && enemyList[0] == null) 
            {
                if (IsEffectTow)
                {
                    transform.GetComponentInChildren<ParticleSystem>().Stop();
                }
                enemyList.Remove(enemyList[0]);
                Destroy(go);
            }
                   
        }      
    }
}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末谜喊,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子倦始,更是在濱河造成了極大的恐慌斗遏,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鞋邑,死亡現(xiàn)場(chǎng)離奇詭異诵次,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)枚碗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)逾一,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人肮雨,你說(shuō)我怎么就攤上這事遵堵。” “怎么了怨规?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵陌宿,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我椅亚,道長(zhǎng)限番,這世上最難降的妖魔是什么舱污? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任呀舔,我火速辦了婚禮,結(jié)果婚禮上扩灯,老公的妹妹穿的比我還像新娘媚赖。我一直安慰自己,他們只是感情好珠插,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布惧磺。 她就那樣靜靜地躺著,像睡著了一般捻撑。 火紅的嫁衣襯著肌膚如雪磨隘。 梳的紋絲不亂的頭發(fā)上缤底,一...
    開(kāi)封第一講書(shū)人閱讀 49,821評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音番捂,去河邊找鬼个唧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛设预,可吹牛的內(nèi)容都是我干的徙歼。 我是一名探鬼主播,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼鳖枕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼魄梯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起宾符,我...
    開(kāi)封第一講書(shū)人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤酿秸,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后吸奴,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體允扇,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年则奥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了考润。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡读处,死狀恐怖糊治,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情罚舱,我是刑警寧澤井辜,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站管闷,受9級(jí)特大地震影響粥脚,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜包个,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一刷允、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧碧囊,春花似錦树灶、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至熄驼,卻和暖如春像寒,著一層夾襖步出監(jiān)牢的瞬間烘豹,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工诺祸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留吴叶,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓序臂,卻偏偏與公主長(zhǎng)得像蚌卤,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子奥秆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

推薦閱讀更多精彩內(nèi)容

  • 現(xiàn)在呢我們來(lái)搞一下防御塔對(duì)怪物的檢測(cè)邏輯逊彭。首先呢,我想到了觸發(fā)器檢測(cè)构订,并配以一條列表儲(chǔ)存在該防御塔射程內(nèi)的所有敵人...
    貪狼大人閱讀 424評(píng)論 0 1
  • 最近學(xué)習(xí)到了項(xiàng)目期侮叮,分配了組員之后,我們經(jīng)過(guò)一番推敲悼瘾,決定做一個(gè)塔防類(lèi)型游戲囊榜,首先我們先建立了游戲場(chǎng)景(第一關(guān))。...
    貪狼大人閱讀 490評(píng)論 4 4
  • 讓我們繼續(xù)探討防御塔的建造亥宿,升級(jí)卸勺,賣(mài)出建造: 首先,/判斷錢(qián)夠不夠/烫扼,夠的話(huà)我們就將基座等級(jí)+1曙求,并通過(guò)Canva...
    貪狼大人閱讀 254評(píng)論 1 1
  • 現(xiàn)在我們來(lái)探討怪物的相關(guān)事宜:首先我們給怪物加一個(gè)EnemyContrl腳本,用來(lái)儲(chǔ)存怪物的各種屬性以及尋路映企,各種...
    貪狼大人閱讀 232評(píng)論 0 1
  • 1.正確答案思維 微信做了悟狱,蘋(píng)果做了,所以我們也要做 根源在于不知道如何面對(duì)一個(gè)“沒(méi)有正確答案”的思考環(huán)境堰氓。讀書(shū)好...
    gqyjlu閱讀 606評(píng)論 1 0