塔防篇: Day6

Morning:

周日了。。争取今天把塔防solo完。。然后回去画画。。

设计UI 升级 拆卸 动画显示。

添加关键帧 调自己想要的大小就可以了。。Windows-> admation 就很好用

配置好动画,状态机,然后修改了下 BUILD脚本。控制动画每次都会运行,以及消失

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class BuildManager : MonoBehaviour {

	public TurretData laserTurretData;
	public TurretData missileTurretData;
	public TurretData standarTurretData;

	private int money=10000 ;

	public Animator moneyAnimator;
	public GameObject upgradeCanves;
	public Button buttonUpgrade;

	//表示场景中的游戏物体
	private GameObject selectedTurretGo;

	public Text moneyText;
	//当前选择炮台
	private TurretData selectTurretType;

	private Animator upgradeCanvasAnimator;

	void ChangeMoney(int change=0){
		money += change;
		moneyText.text = "¥" + money;

	} 
	void Start(){
		upgradeCanvasAnimator = upgradeCanves.GetComponent<Animator> ();
	}

	void Update(){
		if (Input.GetMouseButton(0)) {
			if(EventSystem.current.IsPointerOverGameObject()==false) //查API得。。。 (若是移动端 要传参)
			{
				//炮台建造,Cube若是空 若非空
				Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition); 
				//	Debug.Log ("er"); 
				RaycastHit hit;
				bool isCollider=Physics.Raycast (ray,out hit,1000,LayerMask.GetMask("MapCube"));
				if (isCollider ) { 
					MapCube mapCube = hit.collider.GetComponent<MapCube>();//得到点击的mapCube 
					if (mapCube.turretGo == false&&selectTurretType!=null) {
						//可以创建
						if (money >= selectTurretType.cost) {
							
							ChangeMoney (-selectTurretType.cost); 
							mapCube.BuildTurret (selectTurretType.turretPrefab);
						} else {
							//提示钱够不够。..。	
							moneyAnimator.SetTrigger("Flicker");
						}

					} else if(mapCube.turretGo!=null) {
						//升级
						Vector3 tmp=mapCube.transform.position;
						tmp.y += 10;
						if (mapCube.turretGo == selectedTurretGo && upgradeCanves.activeInHierarchy) {
							StartCoroutine (HideupgradeUI ());
						}else
							ShowupgradeUI(tmp,mapCube.isUpgraded);
						selectedTurretGo = mapCube.turretGo;
					}
				}
			}	
		}
	}

	public void OnLaserSelected(bool isOn){ 
		if (isOn) {
			selectTurretType = laserTurretData;
		}
	}
	public void OnMissileSelected(bool isOn){ 
		if (isOn)
			selectTurretType = missileTurretData;
	}
	public void OnStandardSelected(bool isOn){ 
		if (isOn)
			selectTurretType = standarTurretData;

	}

	void ShowupgradeUI(Vector3 pos,bool isDisableUpgrade=false){
		StopCoroutine ("HideupgradeUI");
		upgradeCanves.SetActive (false);//每次在新的一个炮台位置都需要播放动画
		upgradeCanves.SetActive (true);
		upgradeCanves.transform.position = pos;
		buttonUpgrade.interactable = !isDisableUpgrade;
	} 
	IEnumerator HideupgradeUI(){	
		upgradeCanvasAnimator.SetTrigger("Hide");
		yield return new WaitForSeconds(0.8f);
		upgradeCanves.SetActive (false);
	}
	public void OnUpgradeButtonDown(){
		//TODO
	}
	public void OnDestroyButtonDown(){
		
	}


}

接下来处理升级和拆卸按钮

新增加的逻辑是:  在mapcube身上,存储已经存在的炮台类型,这样才可以判断升级长什么样子,

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class BuildManager : MonoBehaviour {

	public TurretData laserTurretData;
	public TurretData missileTurretData;
	public TurretData standarTurretData;

	private int money=10000 ;

	public Animator moneyAnimator;
	public GameObject upgradeCanves;
	public Button buttonUpgrade;

	//表示场景中的游戏物体
	private GameObject selectedTurretGo;

	public Text moneyText;
	//当前选择炮台
	private TurretData selectTurretType;

	private MapCube selectedMapCube;

	private Animator upgradeCanvasAnimator;

	void ChangeMoney(int change=0){
		money += change;
		moneyText.text = "¥" + money;

	} 
	void Start(){
		upgradeCanvasAnimator = upgradeCanves.GetComponent<Animator> ();
	}

	void Update(){
		if (Input.GetMouseButton(0)) {
			if(EventSystem.current.IsPointerOverGameObject()==false) //查API得。。。 (若是移动端 要传参)
			{
				//炮台建造,Cube若是空 若非空
				Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition); 
				//	Debug.Log ("er"); 
				RaycastHit hit;
				bool isCollider=Physics.Raycast (ray,out hit,1000,LayerMask.GetMask("MapCube"));
				if (isCollider ) { 
					MapCube mapCube = hit.collider.GetComponent<MapCube>();//得到点击的mapCube 
					if (mapCube.turretGo == false&&selectTurretType!=null) {
						//可以创建
						if (money >= selectTurretType.cost) {
							
							ChangeMoney (-selectTurretType.cost); 
							mapCube.BuildTurret (selectTurretType);
						} else {
							//提示钱够不够。..。	
							moneyAnimator.SetTrigger("Flicker");
						}

					} else if(mapCube.turretGo!=null) {
						//升级
						Vector3 tmp=mapCube.transform.position;
						tmp.y += 10;
						if (mapCube == selectedMapCube && upgradeCanves.activeInHierarchy) {
							StartCoroutine (HideupgradeUI ());
						}else
							ShowupgradeUI(tmp,mapCube.isUpgraded);
						selectedMapCube = mapCube;
					}
				}
			}	
		}
	}

	public void OnLaserSelected(bool isOn){ 
		if (isOn) {
			selectTurretType = laserTurretData;
		}
	}
	public void OnMissileSelected(bool isOn){ 
		if (isOn)
			selectTurretType = missileTurretData;
	}
	public void OnStandardSelected(bool isOn){ 
		if (isOn)
			selectTurretType = standarTurretData;

	}

	void ShowupgradeUI(Vector3 pos,bool isDisableUpgrade=false){
		StopCoroutine ("HideupgradeUI");
		upgradeCanves.SetActive (false);//每次在新的一个炮台位置都需要播放动画
		upgradeCanves.SetActive (true);
		upgradeCanves.transform.position = pos;
		buttonUpgrade.interactable = !isDisableUpgrade;
	} 
	IEnumerator HideupgradeUI(){	
		upgradeCanvasAnimator.SetTrigger("Hide");
		yield return new WaitForSeconds(0.8f);
		upgradeCanves.SetActive (false);
	}
	public void OnUpgradeButtonDown(){
		//TODO
		Debug.Log("Onupgrade");
		selectedMapCube.UpgradeTurret();
		StopCoroutine ("HideupgradeUI");
	}
	public void OnDestroyButtonDown(){
		selectedMapCube.DestroyTurret ();
		StopCoroutine ("HideupgradeUI");
	}


}


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

public class MapCube : MonoBehaviour {
	[HideInInspector]
	public GameObject turretGo=null;
	[HideInInspector]
	public bool isUpgraded = false;

	private TurretData turretData;

	private Renderer renderer;
	public GameObject buildEffect;
	void Start () {
		isUpgraded = false;
		renderer = GetComponent<Renderer> ();
	}
	 

	public void BuildTurret(TurretData turretData){
		this.turretData = turretData;
		isUpgraded = false;
		turretGo=GameObject.Instantiate (turretData.turretPrefab,transform.position,Quaternion.identity);
		GameObject effect=GameObject.Instantiate (buildEffect,transform.position,Quaternion.identity);
		Destroy (effect,5);
	}

	public void UpgradeTurret(   ){
		if (isUpgraded == true)
			return;
		Destroy (turretGo);
		isUpgraded = true;
		turretGo=GameObject.Instantiate (turretData.turretUpgradedPrefab,transform.position,Quaternion.identity);
		 
	} 
	public void DestroyTurret(){
		Destroy (turretGo);
		isUpgraded = false;
		turretGo = null;
		turretData = null;
	}

	void OnMouseEnter(){
		Debug.Log ("Click");
		if (turretGo == null&&EventSystem.current.IsPointerOverGameObject()==false ) {
			renderer.enabled = true;
			renderer.material.color = Color.red;
		}
	}

	void OnMouseExit(){
		renderer.enabled = false;
		renderer.material.color = Color.white;
	}
}

基本完成了。剩下有空完善完善吧


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值