塔防游戏 Day3
1.?添加按鈕動畫
選擇 Button->Transition?為 Animation ,然后自定義四種狀態動畫即可。
?
2.?控制升級面板的顯示和隱藏
1 // 升級處理 2 // 若點擊同一炮塔,并且面板已顯示 3 if (mapCube.turretGo == selectedTurret && upgradeCanvas.activeInHierarchy) 4 { 5 HideUpgradeUI(); // 隱藏面板 6 } 7 else // 否則顯示面部 8 { 9 ShowUpgradeUI(mapCube.transform.position, mapCube.isUpgraded); 10 } 11 selectedTurret = mapCube.turretGo; 1 // 顯示升級面板 2 void ShowUpgradeUI(Vector3 pos, bool isDisableUpgrade) 3 { 4 upgradeCanvas.SetActive(true); // 顯示面板 5 upgradeCanvas.transform.position = pos; // 放在合適的位置 6 upgradeButton.interactable = !isDisableUpgrade; // 升級按鈕是否可用 7 } 8 9 // 隱藏升級面板 10 void HideUpgradeUI() 11 { 12 upgradeCanvas.SetActive(false); 13 }?
?
?3.?給升級面板添加動畫
1 // 顯示升級面板 2 void ShowUpgradeUI(Vector3 pos, bool isDisableUpgrade) 3 { 4 StopCoroutine("HideUpgradeUI()"); // 開始協程 5 upgradeCanvas.SetActive(false); 6 upgradeCanvas.SetActive(true); // 顯示面板 7 upgradeCanvas.transform.position = pos; // 放在合適的位置 8 upgradeButton.interactable = !isDisableUpgrade; // 升級按鈕是否可用 9 } 10 11 // 隱藏升級面板 12 IEnumerator HideUpgradeUI() 13 { 14 upgradeCanvasAnimator.SetTrigger("Hide"); 15 yield return new WaitForSeconds(0.5f); 16 upgradeCanvas.SetActive(false); 17 }?
?4.?控制升級和拆毀炮臺
1 // 點擊按鈕觸發函數 2 public void onUpgradeButtonDown() 3 { 4 selectedMapCube.UpdateTurret(); 5 StartCoroutine(HideUpgradeUI()); 6 } 7 8 public void onDestroyButtonDown() 9 { 10 selectedMapCube.DestroyTurret(); 11 StartCoroutine(HideUpgradeUI()); 12 } 1 // 升級炮塔 2 public void UpdateTurret() 3 { 4 if (isUpgraded) return; 5 Destroy(turretGo); 6 turretGo = GameObject.Instantiate(turretData.turretUpgradedPrefab, transform.position, Quaternion.identity); 7 isUpgraded = true; 8 // 產生特效 9 GameObject effect = GameObject.Instantiate(buildEffect, transform.position, Quaternion.identity); 10 Destroy(effect, 1.5f); // 1.5秒后銷毀特效 11 } 12 13 // 拆毀炮臺 14 public void DestroyTurret() 15 { 16 Destroy(turretGo); 17 isUpgraded = false; // 初始化 18 turretGo = null; 19 turretData = null; 20 // 產生特效 21 GameObject effect = GameObject.Instantiate(buildEffect, transform.position, Quaternion.identity); 22 Destroy(effect, 1.5f); // 1.5秒后銷毀特效 23 }?
?
?5.?添加激光炮塔
? 添加 LineRenderer?組件。
?
if (enemys.Count > 0) {// 設置激光的開始位置和結尾位置laserRenderer.SetPositions(new Vector3[] { firePosition.position, enemys[0].transform.position }); }?
4.?游戲失敗情況處理
1 // 游戲失敗 2 public void fail() 3 { 4 MessageText.text = "失 敗"; 5 endUI.SetActive(true); 6 enemySpawner.Stop(); // 停止生成敵人 7 } 1 public void Stop() 2 { 3 StopCoroutine(coroutine); // 停止協程 4 }?
?
5.?菜單設計
1 // 點擊開始游戲按鈕 2 public void OnButtonStart() 3 { 4 SceneManager.LoadScene(1); 5 } 6 7 // 點擊退出按鈕 8 public void OnButtonExit() 9 { 10 #if UNITY_EDITOR 11 UnityEditor.EditorApplication.isPlaying = false; 12 #else 13 Application.Quit(); 14 #endif 15 }?
?
完!!!
?
轉載于:https://www.cnblogs.com/coderJiebao/p/unity3d03.html
總結
- 上一篇: 特征筛选(随机森林)
- 下一篇: bootstrap轮播图自动播放响应式箭