美文网首页unity3D技术分享
小白贪狼做塔防(2)

小白贪狼做塔防(2)

作者: 貪狼大人 | 来源:发表于2017-10-20 11:20 被阅读0次

    让我们继续探讨防御塔的建造,升级,卖出
    建造:

    void Biuld()
        {
            if (GameData.Instance.money < gameObj.tw.GetComponent<CheckEnemy>().value)
            {
                return;
            }
            hitInfo.collider.gameObject.GetComponent<Tower>().level++;
            //动态加载防御塔
            gameObj.tw = (GameObject)Resources.Load("Prefabs_Turrets/" + bt.cv.GetComponent<Text>().text + hitInfo.collider.gameObject.GetComponent<Tower>().level.ToString());
            //金币处理      
            GameData.Instance.money -= gameObj.tw.GetComponent<CheckEnemy>().value;
            //实例化o
            o = Instantiate(gameObj.tw, hitInfo.collider.gameObject.transform.position + Vector3.up * 2.8f, hitInfo.collider.gameObject.transform.rotation) as GameObject;
            o.transform.parent = hitInfo.collider.gameObject.transform;
            hitInfo.collider.gameObject.GetComponent<Tower>().towername = bt.cv.GetComponent<Text>().text;
            //o = Instantiate(gameObj.tower, hitInfo.collider.gameObject.transform.position + Vector3.up * 2.8, hitInfo.collider.gameObject.transform.rotation) as GameObject;
            hitInfo.collider.gameObject.GetComponent<Tower>().isBiuld = true;       
            bt.cv.GetComponent<Text>().text = "";
        }
    

    首先,/判断钱够不够/,够的话我们就将基座等级+1,并通过Canvas上的Text获取想要建造的名字(前面已经判断基座上没有塔,并判定Canvas上的Text是否为空),并/扣除对应金币/,然后实例化防御塔,并将isBiuld设为true,表明基座上已经有塔,避免同一位置重复建造。然后重点来了,一定一定要将bt.cv.GetComponent<Text>().text清空,不然,你建完一座塔后,鼠标点中其他基座,也会建造并扣钱。
    卖出:

    void Des()
        {
            GameData.Instance.money += (hitInfo.collider.gameObject.transform.GetChild(1).gameObject.GetComponent<CheckEnemy>().value*0.7f);
            Debug.Log("卖了之后,金币数-----" + GameData.Instance.money);
            Destroy(hitInfo.collider.gameObject.transform.GetChild(0).gameObject);
            //卖炮塔   
            hitInfo.collider.gameObject.GetComponent<Tower>().isBiuld = false;        
            bt.cv.GetComponent<Text>().text = "";
        }
    

    这个逻辑比较简单,选中卖出操作后,点击基座。如果上面没有塔,则将bt.cv.GetComponent<Text>().text清空,若有塔,则将点击的塔的子物体销毁(我之前将防御塔实例化再基座的子物体上了)并返还部分金币。

    升级:

    void Up()
        {
            hitInfo.collider.gameObject.GetComponent<Tower>().level++;
            gameObj.tw = (GameObject)Resources.Load("Prefabs_Turrets/" + hitInfo.collider.gameObject.GetComponent<Tower>().towername + hitInfo.collider.gameObject.GetComponent<Tower>().level.ToString());
            //金币处理
            if (GameData.Instance.money < gameObj.tw.GetComponent<CheckEnemy>().value)
            {
                hitInfo.collider.gameObject.GetComponent<Tower>().level--;
                return;
            }
            GameData.Instance.money -= gameObj.tw.GetComponent<CheckEnemy>().value;
            Debug.Log("金币数-----" + GameData.Instance.money);       
            //实例化
            o = Instantiate(gameObj.tw, hitInfo.collider.gameObject.transform.position + Vector3.up * 2.8f, hitInfo.collider.gameObject.transform.rotation) as GameObject;
            o.transform.parent = hitInfo.collider.gameObject.transform;        
            //销毁旧       
            Destroy(hitInfo.collider.gameObject.transform.GetChild(1).gameObject);
            hitInfo.collider.gameObject.GetComponent<Tower>().isBiuld = true;
            bt.cv.GetComponent<Text>().text = "";
        }
    

    当时我卡在升级操作一整个上午,完全找不到错误,知道某一位神明在冥冥之中点醒了我,原来我之前在上级函数里,写的还是,销毁原来的塔,并实例化level+1的塔,我却忽略了,我是使用Canvas上的Text获取的“塔名”,但是事实上并没有“LvUp”这个塔,所以我在Tower脚本里加了String towername,用来记录基座上面塔的名字(在Biuld里,赋值)。并且在钱不够的return,操作我忘记了把升过的级扣回去,导致出现了,钱不够时点击也会升级底座记录的等级,不过不实例化,然后当你钱够在该塔基座建新塔时,会出现用一级的钱造出2级甚至3级塔的bug(已修复)。

    biuld.gif Up.gif Destory.gif

    相关文章

      网友评论

        本文标题:小白贪狼做塔防(2)

        本文链接:https://www.haomeiwen.com/subject/lkvmuxtx.html