让我们继续探讨防御塔的建造,升级,卖出
建造:
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
网友评论