塔防游戏 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 }

 

 

完!!!

 

相关推荐:

Python 反向猜数字游戏:修复重复打印问题

本文教你修正反向猜数字游戏中的重复输出缺陷,通过调整print(c)的执行时机,确保每次猜测反馈只显示一次当前猜测值。 本文教你修正反向猜数字游戏中的重复输出缺陷,通过调整`print(c)`的执行时机,确保每次猜测反馈只显示一次当前猜测值。 在反向猜数字游戏中,程序需根据用户输入(b表示“太大”,...

如何正确重置Python井字棋(Tic Tac Toe)游戏的全局棋盘

本文详解python中因变量作用域导致的棋盘重置失效问题,通过`global`声明或返回新对象两种方式,彻底解决全局`board`列表无法被函数修改的核心难点。 在开发井字棋(TicTacToe)这类状态驱动的游戏时,一个常见却易被新手忽略的问题是:明明在resetGame()函数中重新赋值了Boa...

C语言实现三子棋小游戏

在这里我们要写出一个三子棋的小游戏,能够实现所需要的三字连珠的功能,并且可以使得游戏让玩家进行选择是否继续的功能。 代码: #define_CRT_SECURE_NO_WARNINGS1 #include<stdio.h> #include<stdlib.h> #includ...

Java使用备忘录模式实现过关类游戏功能详解

本文实例讲述了Java使用备忘录模式实现过关类游戏功能。分享给大家供大家参考,具体如下: 一.模式定义 备忘录模式,在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象外部保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 二.模式举例 1模式分析 我们借用过关类游戏来说明这一模式。 2备...

Python 实现平台类游戏添加跳跃功能

 在本期使用PythonPygame模块编写视频游戏中,学会如何使用跳跃来对抗重力。 在本系列的前一篇文章中,你已经模拟了重力。但现在,你需要赋予你的角色跳跃的能力来对抗重力。 跳跃是对重力作用的暂时延缓。在这一小段时间里,你是向上跳,而不是被重力拉着向下落。但你一旦到达了跳跃的最高点,重...

Xcode 添加 Cocos2d-x Scene 模板

用Cocos2d-x开发游戏的时候,XCode默认生成的cpp类基本就是一个空文件,每次都要重复实现Cocos2d-x的基本代码,很麻烦。之前是修改HelloWorld文件,然后新建的文件就直接copyHelloWorld内容,但这样感觉还是挺麻烦的。于是想办法给Xcode添加Cocos2d-x类模...