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;
}
}
基本完成了。剩下有空完善完善吧