塔防游戏 Day3
1. 添加按钮动画
选择 Button->Transition 为 Animation ,然后自定义四种状态动画即可。

2. 控制升级面板的显示和隐藏
// 升级处理
// 若点击同一炮塔,并且面板已显示
if (mapCube.turretGo == selectedTurret && upgradeCanvas.activeInHierarchy)
{
HideUpgradeUI(); // 隐藏面板
}
else // 否则显示面部
{
ShowUpgradeUI(mapCube.transform.position, mapCube.isUpgraded);
}
selectedTurret = mapCube.turretGo;
// 显示升级面板
void ShowUpgradeUI(Vector3 pos, bool isDisableUpgrade)
{
upgradeCanvas.SetActive(true); // 显示面板
upgradeCanvas.transform.position = pos; // 放在合适的位置
upgradeButton.interactable = !isDisableUpgrade; // 升级按钮是否可用
} // 隐藏升级面板
void HideUpgradeUI()
{
upgradeCanvas.SetActive(false);
}
3. 给升级面板添加动画
// 显示升级面板
void ShowUpgradeUI(Vector3 pos, bool isDisableUpgrade)
{
StopCoroutine("HideUpgradeUI()"); // 开始协程
upgradeCanvas.SetActive(false);
upgradeCanvas.SetActive(true); // 显示面板
upgradeCanvas.transform.position = pos; // 放在合适的位置
upgradeButton.interactable = !isDisableUpgrade; // 升级按钮是否可用
} // 隐藏升级面板
IEnumerator HideUpgradeUI()
{
upgradeCanvasAnimator.SetTrigger("Hide");
yield return new WaitForSeconds(0.5f);
upgradeCanvas.SetActive(false);
}
4. 控制升级和拆毁炮台
// 点击按钮触发函数
public void onUpgradeButtonDown()
{
selectedMapCube.UpdateTurret();
StartCoroutine(HideUpgradeUI());
} public void onDestroyButtonDown()
{
selectedMapCube.DestroyTurret();
StartCoroutine(HideUpgradeUI());
}
// 升级炮塔
public void UpdateTurret()
{
if (isUpgraded) return;
Destroy(turretGo);
turretGo = GameObject.Instantiate(turretData.turretUpgradedPrefab, transform.position, Quaternion.identity);
isUpgraded = true;
// 产生特效
GameObject effect = GameObject.Instantiate(buildEffect, transform.position, Quaternion.identity);
Destroy(effect, 1.5f); // 1.5秒后销毁特效
} // 拆毁炮台
public void DestroyTurret()
{
Destroy(turretGo);
isUpgraded = false; // 初始化
turretGo = null;
turretData = null;
// 产生特效
GameObject effect = GameObject.Instantiate(buildEffect, transform.position, Quaternion.identity);
Destroy(effect, 1.5f); // 1.5秒后销毁特效
}
5. 添加激光炮塔
添加 LineRenderer 组件。

if (enemys.Count > )
{
// 设置激光的开始位置和结尾位置
laserRenderer.SetPositions(new Vector3[] { firePosition.position, enemys[].transform.position });
}
4. 游戏失败情况处理
// 游戏失败
public void fail()
{
MessageText.text = "失 败";
endUI.SetActive(true);
enemySpawner.Stop(); // 停止生成敌人
}
public void Stop()
{
StopCoroutine(coroutine); // 停止协程
}
5. 菜单设计


// 点击开始游戏按钮
public void OnButtonStart()
{
SceneManager.LoadScene();
} // 点击退出按钮
public void OnButtonExit()
{
#if UNITY_EDITOR
UnityEditor.EditorApplication.isPlaying = false;
#else
Application.Quit();
#endif
}
完!!!
塔防游戏 Day3的更多相关文章
- Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(三)
一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)篇 二.本篇目标: l 说说游戏中各种角色的动作.属性以及重构思路 l 进行代码重构让色狼大叔和 ...
- Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)
一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)篇 二.本篇目标: l 说说关于cocos2dx手机分辨率适配 l 对前一篇完成的塔防游戏原型进 ...
- Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)
一.前提: 完成Hello Game项目的创建编译. 具体参考:Cocos2dx.3x_Hello Game项目创建篇 二.本篇目标: l 说说关于塔防游戏的想法和思路 l 实现一个简单的塔防游戏 ...
- 三国塔防游戏android源码
三国塔防游戏源码,这个游戏源码比较完整的,因为上传有20M限制,把代码工程包分开了,主文件是TFGame,其他res大家按照安卓包加进去就行,欢迎下载并交流 ,大家可以参考一下吧.<ignore ...
- HTML5塔防游戏——《三国塔防》 - Yorhom's Game Box
h3{ font-size:20px; } HTML5塔防游戏--<三国塔防> 游戏介绍: <三国塔防>是一款基于HTML5和Javascript的2D塔防游戏.游戏中除了塔防 ...
- HTML5另类塔防游戏 -《三国战线》公布
关于本作 游戏介绍 本游戏是一款另类塔防游戏.本作以三国这段历史为题材,提供了从颍川之战到官渡之战.官渡之战到夷陵之战.夷陵之战到五丈原之战等15个关卡.在每一个关卡中,你会控制一名三国武将与出现的敌 ...
- [译]终极塔防——运用HTML5从头创建一个塔防游戏
翻译共享一篇CodeProject的高星力作,原文地址:http://www.codeproject.com/Articles/737238/Ultimate-Tower-Defense 下载演示项目 ...
- 使用Unity创建塔防游戏(Part2)
How to Create a Tower Defense Game in Unity – Part 2 原文地址:https://www.raywenderlich.com/107529/unity ...
- 使用Unity创建塔防游戏(Part1)
How to Create a Tower Defense Game in Unity - Part1 原文作者:Barbara Reichart 文章原译:http://www.cnblogs.co ...
随机推荐
- HihoCoder 1044 垃圾清理 (优化:状态压缩)
状态压缩·一 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市— ...
- test20190308
测试 晚上考试,是 \(SCOI\ 2016\ Day\ 2\) 的题目. 妖怪 由于之前在洛谷上用三分水过去了,就很 \(naive\) 地打了一个三分就跑了.获得 \(10\) 分好成绩. 记 \ ...
- Java 自定义FTP连接池
转自:https://blog.csdn.net/eakom/article/details/79038590 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...
- 【数据库】sql连表查询
SQL总结 连表查询 连接查询包括合并.内连接.外连接和交叉连接,如果涉及多表查询,了解这些连接的特点很重要. 只有真正了解它们之间的区别,才能正确使用. 1.Union UNION 操作符用于合并两 ...
- 什么是虚拟环境、为什么使用虚拟环境、Anaconda创建、激活、退出、删除虚拟环境
一.虚拟环境 virtual environment 它是一个虚拟化,从电脑独立开辟出来的环境.通俗的来讲,虚拟环境就是借助虚拟机docker来把一部分内容独立出来,我们把这部分独立出来的东西称作“容 ...
- docker-tomcat
https://yq.aliyun.com/articles/6894 1,add命令源目录 只能从 ./ 当前目录开始,目标目录是容器的目录,不是服务器的目录 2,server.xml改的东西,里面 ...
- SPI: Service Provider Interface
Service Provider Interface: JDK提供的一种服务发现的机制:主要是用于厂商实现JDK的只用. 比如说打印机,JDK提供了一个驱动接口com.printl.printerDr ...
- GOF23设计模式之中介者模式(mediator)
一.中介者模式概述 如果一个系统中对象之间的联系呈现网状结构,对象之间存在大量多对多的关系,导致关系及其复杂,这时可以引入一个中介者对象,使得各个对象只跟中介者对象打交道,从而将复杂的网络结构化为星型 ...
- xshell连接kali
连接出现错误,连接不上去,看到一篇文章可以使用,https://blog.csdn.net/yemaxq/article/details/78171241
- vue 跟路径加载缺少跟前缀
vue 加载资源失败:跟路径残缺,都是配置时 一个正斜杠 / 多余惹的祸