Fire Balls 07——砖块的淡出,消失以及砖塔的下落
版权申明:
- 本文原创首发于以下网站:
- 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
- 优梦创客的官方博客:https://91make.top
- 优梦创客的游戏讲堂:https://91make.ke.qq.com
- 『优梦创客』的微信公众号:umaketop
- 您可以自由转载,但必须加入完整的版权声明
目标

- 砖块的消失
- 砖块的淡出效果
- 砖块的下落
砖块的消失
- 首先我们先打开我们的Tower脚本,编写如下代码
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Tower : MonoBehaviour
{
public int Height;
public Color[] Colors = new Color[2];
public GameObject brickPrefab;
public List<GameObject> bricks = new List<GameObject>();
public bool isRisenUp = false;//砖块是不是全部从地下钻上来了
// Start is called before the first frame update
void Start()
{
for(int i = 0; i < Height; i++)
{
GameObject goBrick = Instantiate(brickPrefab);
goBrick.transform.SetParent(transform,false );
goBrick.transform.Translate(0, i, 0,Space.Self);
goBrick.GetComponent<MeshRenderer>().material.color = Colors[i % 2];
goBrick.transform.Rotate(0, i*10, 0,Space.Self);
bricks.Add(goBrick);
}
StartCoroutine(RiseUpFormUnderground());
}
IEnumerator RiseUpFormUnderground()
{
transform.Translate(0, -Height * transform.lossyScale.y, 0, Space.Self);
while (transform.position.y<0.5*transform.lossyScale.y)
{
transform.Translate(0, 5 * Time.deltaTime, 0, Space.Self);
yield return null;
}
isRisenUp = true;
}
// Update is called once per frame
void Update()
{
transform.Rotate(0, 45 * Time.deltaTime, 0,Space.Self);
}
public void DropTower()
{
//启动一个协成
StartCoroutine(DestoryAndDrop());
}
IEnumerator DestoryAndDrop()
{
//第一步:找到最底下一层砖块,然后销毁
GameObject brick = bricks[0];
bricks.RemoveAt(0);
//第二步:设置砖块进入淡出动画状态
//第三步:让上面的每一层砖块往下落一层
//第四步,销毁砖块
Destroy(brick,2f);
yield return null;
}
}
- 随后打开我们的Projectile脚本并在我们的OnCollisionEnter函数里添加如下代码:
private void OnCollisionEnter(Collision collision)
{
if(collision.gameObject.tag == "Tower")
{
Destroy(gameObject);
collision.transform.parent.GetComponent<Tower>().DropTower();
}
if(collision.gameObject.tag == "Arch")
{
lober.endPos = player.transform.position;
lober.enabled = true;
player.gameover = true;
}
}
- 修改完成后运行我们的游戏就可以看到砖块消失的效果了。
砖块的淡出效果
- 首先我们先新建一个脚本重命名为Brick并编写如下的代码:
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Brick : MonoBehaviour
{
private bool isFadeout = false;
public Vector3 targetScale;//目标缩放大小
public float speed = 0.5f;//淡出的速度
private void Start()
{
targetScale = transform.localScale * 3;
}
internal void setFadeout()
{
isFadeout = true;
}
private void Update()
{
if (isFadeout)//如果砖块正在淡出
{
//1.砖块变大
float t = 1 / speed * Time.deltaTime;
transform.localScale = Vector3.Lerp(transform.localScale, targetScale, t);
//2.砖块颜色变透明
Color c = GetComponent<MeshRenderer>().material.color;
c.a = Mathf.Lerp(c.a, 0, t);
GetComponent<MeshRenderer>().material.color = c;
}
}
}
- 其次打开我们的Tower脚本找到我们刚刚编写的DestoryAndDrop函数并添加如下代码:
IEnumerator DestoryAndDrop()
{
//第一步:找到最底下一层砖块,然后销毁
GameObject brick = bricks[0];
bricks.RemoveAt(0);
//第二步:设置砖块进入淡出动画状态
brick.GetComponent<Brick>().setFadeout();
//第三步:让上面的每一层砖块往下落一层
//第四步,销毁砖块
Destroy(brick,2f);
yield return null;
}
- 最后双击打开我们的砖块的材质把材质的Rendering Mode改为Fade即可。


砖块的下落
- 依旧是打开我们的Tower脚本找到我们刚刚编写的DestoryAndDrop函数并添加如下代码:
IEnumerator DestoryAndDrop()
{
//第一步:找到最底下一层砖块,然后销毁
GameObject brick = bricks[0];
bricks.RemoveAt(0);
//第二步:设置砖块进入淡出动画状态
brick.GetComponent<Brick>().setFadeout();
//第三步:让上面的每一层砖块往下落一层
for (int i = 0; i < bricks.Count; i++)
{
Vector3 p = bricks[i].transform.position;
p.y = p.y - 1;
bricks[i].transform.position = p;
}
//第四步,销毁砖块
Destroy(brick,2f);
yield return null;
}
Fire Balls 07——砖块的淡出,消失以及砖塔的下落的更多相关文章
- Fire Balls 04——砖塔的创建,动态上升以及旋转
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Fire Balls 08——子弹的消失,当子弹击中自身时不可发射子弹
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Fire Balls 09——修正游戏的BUG
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Fire Balls 05——子弹的命中及后续效果
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Unity经典案例之:Fire Balls 多个圆环以及圆环的变速变向
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Fire Balls 05——坦克和子弹的制作以及炮台发射子弹
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Fire Balls 08——音效的添加
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Fire Balls 10——UI界面的制作
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
- Fire Balls 11——平台组合,场景的美化
版权申明: 本文原创首发于以下网站: 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123 优梦创客的官方博客:https://91make.top ...
随机推荐
- activeMQ_helloworld(一)
一.activeMQ下载,直接在Linux上wget http://mirror.bit.edu.cn/apache//activemq/5.14.5/apache-activemq-5.14.5-b ...
- springcloud-provider-consumer-register
作者:纯洁的微笑出处:http://www.ityouknow.com/ 版权归作者所有,转载请注明出处 上一篇文章我们介绍了eureka服务注册中心的搭建,这篇文章介绍一下如何使用eureka服务注 ...
- Java编程思想之十七 容器深入研究
17.1 完整的容器分类方法 17.2 填充容器 import java.util.*; class StringAddress { private String s; public StringAd ...
- Vmware Exsi使用简要说明
界面介绍 Exsi的管理工具可以用vSphere Client来管理虚拟机.管理虚拟的网络交换机.管理物理机的内存.物理机的硬盘.物理机的CPU等资源.界面的大致介绍如下图. 资源分配 创建内存.CP ...
- 前端笔记之微信小程序(二){{}}插值和MVVM模式&数据双向绑定&指令&API
一.双花括号{{}}插值和MVVM模式 1.1 体会{{}}插值 index.wxml的标签不是html的那些标签,这里的view就是div. {{}}这样的插值写法,叫做mustache语法.mus ...
- 数据结构之稀疏矩阵C++版
//只是简单的演示一下,这个实际运用视乎不怎么多,所以java版不再实现 /* 希疏矩阵应用于对数据的压缩,仅仅保留不为0的数据 稀疏矩阵的转置,可以由多种方式,下面演示的稍显简单,时间复杂度略高O( ...
- mybatis一对多双向映射
连表查询 select id resultType resultMap resultType和resultMap不能同时使用 association 属性 映射到多对一中的“一”方的“复杂类 ...
- 使用mybatis实现分页查询示例代码分析
*******************************************分页查询开始*************************************************** ...
- H5 Handlebars的简单使用
扫码关注公众号,不定期更新干活 web 开发中,js 解析JSON 是经常的事情.非常繁琐.handlebars 使用了模版,只要你定义一个模版,提供一个json对象,handlebars 就能吧js ...
- as更新3.0.1的时候的编译异常