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的更多相关文章

  1. Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(三)

    一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)篇 二.本篇目标: l  说说游戏中各种角色的动作.属性以及重构思路 l  进行代码重构让色狼大叔和 ...

  2. Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(二)

    一.前提: 完成前一篇的内容. 具体参考:Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)篇 二.本篇目标: l  说说关于cocos2dx手机分辨率适配 l  对前一篇完成的塔防游戏原型进 ...

  3. Cocos2d-x3.x塔防游戏(保卫萝卜)从零开始(一)

    一.前提: 完成Hello Game项目的创建编译. 具体参考:Cocos2dx.3x_Hello Game项目创建篇 二.本篇目标: l  说说关于塔防游戏的想法和思路 l  实现一个简单的塔防游戏 ...

  4. 三国塔防游戏android源码

    三国塔防游戏源码,这个游戏源码比较完整的,因为上传有20M限制,把代码工程包分开了,主文件是TFGame,其他res大家按照安卓包加进去就行,欢迎下载并交流 ,大家可以参考一下吧.<ignore ...

  5. HTML5塔防游戏——《三国塔防》 - Yorhom's Game Box

    h3{ font-size:20px; } HTML5塔防游戏--<三国塔防> 游戏介绍: <三国塔防>是一款基于HTML5和Javascript的2D塔防游戏.游戏中除了塔防 ...

  6. HTML5另类塔防游戏 -《三国战线》公布

    关于本作 游戏介绍 本游戏是一款另类塔防游戏.本作以三国这段历史为题材,提供了从颍川之战到官渡之战.官渡之战到夷陵之战.夷陵之战到五丈原之战等15个关卡.在每一个关卡中,你会控制一名三国武将与出现的敌 ...

  7. [译]终极塔防——运用HTML5从头创建一个塔防游戏

    翻译共享一篇CodeProject的高星力作,原文地址:http://www.codeproject.com/Articles/737238/Ultimate-Tower-Defense 下载演示项目 ...

  8. 使用Unity创建塔防游戏(Part2)

    How to Create a Tower Defense Game in Unity – Part 2 原文地址:https://www.raywenderlich.com/107529/unity ...

  9. 使用Unity创建塔防游戏(Part1)

    How to Create a Tower Defense Game in Unity - Part1 原文作者:Barbara Reichart 文章原译:http://www.cnblogs.co ...

随机推荐

  1. Jmeter查看结果树

    取样结果: Thread Name: test 1-2                                                     线程名称:测试1 - 2Sample S ...

  2. BZOJ4837:[Lydsy1704月赛]LRU算法(双指针&模拟)

    Description 小Q同学在学习操作系统中内存管理的一种页面置换算法,LRU(LeastRecentlyUsed)算法. 为了帮助小Q同学理解这种算法,你需要在这道题中实现这种算法,接下来简要地 ...

  3. 每天一个linux命令(权限):【转载】chown命令

    chown将指定文件的拥有者改为指定的用户或组,用户可以是用户名或者用户ID:组可以是组名或者组ID:文件是以空格分开的要改变权限的文件列表,支持通配符.系统管理员经常使用chown命令,在将文件拷贝 ...

  4. L2-017. 人以群分

    社交网络中我们给每个人定义了一个“活跃度”,现希望根据这个指标把人群分为两大类,即外向型(outgoing,即活跃度高的)和内向型(introverted,即活跃度低的).要求两类人群的规模尽可能接近 ...

  5. Nginx——安装Nginx(二)

    安装所需环境 Nginx 是 C语言 开发,建议在 Linux 上运行,当然,也可以安装 Windows 版本,本篇则使用 CentOS 7 作为安装环境. gcc 安装 安装 nginx 需要先将官 ...

  6. .NET类库

    1.如何让发布的C#的DLL类库中的方法带有注释说明 一个类库让第三方引用时,默认情况下生成类库时不携带注释,所以别人引用这个类库时就不是很方便理解类方法的作用和每个参数的含义,若是能携带方法的说明注 ...

  7. fopen()和fclose()

    1.fopen()函数的用法fopen函数用于打开文件, 其调用格式为:FILE *fopen(char *filename, *type);fopen()函数中第一个形式参数表示文件名, 可以包含路 ...

  8. 莫名其妙的js基础学习!

    JavaScript基本组成部分: 1,ECMAScript:js的语法标准,基本的变量,运算符,函数,if语句,for语句等 2,DOM:操作网页上的元素API,比如盒子的移动,变色,轮播图等. 3 ...

  9. git还原某个特定的文件到之前的版本

    场景: 对于某个git控制下的文件进行了修改,但是改的不满意,想退回到改之前的版本.假定该文件为 src/main/main.c 解决方法: 第一步: 在命令行中输入 git log src/main ...

  10. caffemodel的读取与修改

    直接撸代码~ import caffe import numpy as np caffe.set_mode_cpu() net = caffe.Net('myprototxt.prototxt', ' ...