Fire Balls 04——砖塔的创建,动态上升以及旋转
版权申明:
- 本文原创首发于以下网站:
- 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
- 优梦创客的官方博客:https://91make.top
- 优梦创客的游戏讲堂:https://91make.ke.qq.com
- 『优梦创客』的微信公众号:umaketop
- 您可以自由转载,但必须加入完整的版权声明
目标:
- 砖块的创建
- 砖块在游戏运行中生成
- 砖塔的创建及旋转
- 砖塔的动态上升
砖块的创建
- 首先我们先创建一个Cube重命名为CubeBrick并把他的位置Reset一下,并把砖块调整至合适大小,并把材质调整至自己喜欢的颜色,然后我们把CubeBrick保存为预制体即可
- 然后依照上面的步骤创建一个Cylinder重命名为CylinderBrick并保存。
- 这样就能得到我们需要的两个砖块了
砖块在游戏运行中生成
- 首先打开我们之前制作的PlatformRig预制体并在子集添加一个空的GameObject重命名为Tower并Reset坐标,如下图所示
然后在我们的Scripts文件夹下新建一个名为Tower的脚本,并把脚本拖给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;
// Start is called before the first frame update
void Start()
{
// 动态生成这些砖块(从砖块预制体)
for (int i = 0; i < height; i++)
{
GameObject goBrick = Instantiate(brickPrefab);
goBrick.transform.SetParent(this.transform, false);
goBrick.GetComponent<MeshRenderer>().material.color = colors[i % 2];
}
}
// Update is called once per frame
void Update()
{
}
}
- 并把脚本中定义为Public的变量更改为以下数据即可
砖塔的创建及旋转
- 打开我们的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;
// Start is called before the first frame update
void Start()
{
// 动态生成这些砖块(从砖块预制体)
for (int i = 0; i < height; i++)
{
GameObject goBrick = Instantiate(brickPrefab);
// TODO: 让每一层砖块的高度都不一样!
goBrick.transform.Translate(0, i, 0, Space.Self); // 移动一个单位
goBrick.transform.Rotate(0, 10*i, 0, Space.Self);
goBrick.transform.SetParent(this.transform, false); // 由于Level本身带缩放,所以实际放到Tower下面后,仅平移了i*0.25个单位
goBrick.GetComponent<MeshRenderer>().material.color = colors[i % 2];
}
}
// Update is called once per frame
void Update()
{
this.transform.Rotate(0, 45 * Time.deltaTime, 0);
}
}
- 然后保存并运行我们的游戏就能看到砖塔的生成和旋转了
砖塔的动态上升
- 首先还是先打开我们的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;
// Start is called before the first frame update
void Start()
{
// 动态生成这些砖块(从砖块预制体)
for (int i = 0; i < height; i++)
{
GameObject goBrick = Instantiate(brickPrefab);
// TODO: 让每一层砖块的高度都不一样!
goBrick.transform.Translate(0, i, 0, Space.Self); // 移动一个单位
goBrick.transform.Rotate(0, 10*i, 0, Space.Self);
goBrick.transform.SetParent(this.transform, false); // 由于Level本身带缩放,所以实际放到Tower下面后,仅平移了i*0.25个单位
goBrick.GetComponent<MeshRenderer>().material.color = colors[i % 2];
}
StartCoroutine(RiseUpFromUnderground());
}
IEnumerator RiseUpFromUnderground()
{
// 将塔先放置在地下
this.transform.Translate(0, -height * transform.lossyScale.y, 0, Space.Self);
// 定时往上跑一定距离
while (this.transform.position.y < 0.5 * transform.lossyScale.y)
{
this.transform.Translate(0, 5 * Time.deltaTime, 0, Space.Self);
yield return null;
}
}
// Update is called once per frame
void Update()
{
this.transform.Rotate(0, 45 * Time.deltaTime, 0);
}
}
- 保存后运行游戏即可看到我们的砖塔从下往上升的效果了。
Fire Balls 04——砖塔的创建,动态上升以及旋转的更多相关文章
- springmvc 项目完整示例02 项目创建-eclipse创建动态web项目 配置文件 junit单元测试
包结构 所需要的jar包直接拷贝到lib目录下 然后选定 build path 之后开始写项目代码 配置文件 ApplicationContext.xml <?xml version=" ...
- 基于ceph rbd 在kubernetes harbor 空间下创建动态存储
[root@bs-k8s-ceph ~]# ceph osd pool create harbor 128 Error ETIMEDOUT: crush test failed with -110: ...
- GifShot - 创建动态 GIF 的 JavaScript 库
GifShot 是一个可以创建流媒体,视频或图像的 GIF 动画的 JavaScript 库.该库的客户端特性使其非常便携,易于集成到几乎任何网站.利用最先进的浏览器 API ,包括 WebRTC , ...
- Unity3D 创建动态的立方体图系统
Unity3D 创建动态的立方体图系统 这一篇主要是利用上一篇的Shader,通过脚本来完成一个动态的立方体图变化系统. 准备工作如下: 创建一个新的场景.一个球体.提供给场景一个平行光,准备2个立方 ...
- Ribbon2: 创建动态的Ribbon库
Sam Radakovitz曾在Excel团队博客中发表过一篇文章,介绍了如何创建动态的Ribbon库,即如何通过RibbonX和VBA放置动态的图形图像到功能区库中,在该文中,作者创建了两个库:一个 ...
- 【ASP.NET Web API教程】2.3.5 用Knockout.js创建动态UI
原文:[ASP.NET Web API教程]2.3.5 用Knockout.js创建动态UI 注:本文是[ASP.NET Web API系列教程]的一部分,如果您是第一次看本博客文章,请先看前面的内容 ...
- 使用Eclipse创建动态的web工程
使用Eclipse创建动态的web工程 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.修改工作区的编码 1>.点击Window选择Preferences 2>.将默 ...
- Ubuntu18.04下给PyCharm创建快捷方式
Ubuntu18.04下给PyCharm创建快捷方式 该方法 WebStorm.PyCharm.Clion 等都适用. 步骤 终端输入: sudo gedit /usr/share/applicati ...
- Spring BPP中优雅的创建动态代理Bean
一.前言 本文章所讲并没有基于Aspectj,而是直接通过Cglib以及ProxyFactoryBean去创建代理Bean.通过下面的例子,可以看出Cglib方式创建的代理Bean和ProxyFact ...
随机推荐
- .NET Core CSharp初级篇 1-6 类的多态与继承
.NET Core CSharp初级篇 1-6 本节内容为类的多态与继承 简介 终于讲到了面向对象三大特性中的两大特性--继承与多态.通过继承与多态,我们能很好的将类的拓展性发挥到了极致.在下面的内容 ...
- SpringMVC表单对象绑定到@ModelAttribute
支持绑定表单对象 jsp: <%@ taglib prefix="form" uri="http://www.springframework.org/tags/fo ...
- JUint4的下载、配置及对一个算法编写单元测试用例(测试多组数据每组多个参数)
一.JUnit4 jar包下载 链接:https://pan.baidu.com/s/1AdeVGGikcY5dfL151ZnWHA 提取码:h1am 下载完成后,解压一下即可. 二.导入JUnit4 ...
- TestNG中DataProvider的用法二:简单的数据驱动
@DataProvider标记的方法除了可以返回数组外,还可以返回一个Iterator,这样的好处是不用把所有的测试数据都加载到内存中,而是需要的时候就读一条. 下面的例子就使用了Iterator,然 ...
- 基于ReentrantLock的非公平锁理解AQS
AQS AQS概述 AbstractQueuedSynchronizer抽象队列同步器简称AQS,它是实现同步器的基础组件,juc下面Lock的实现以及一些并发工具类就是通过AQS来实现的,这里我 ...
- c语言指针汇总
1.指向单个变量的指针: ; int* p = &a; printf("%d", *p); 2.数组的指针 (1)一维数组的指针 ] = { ,,,, }; int *p; ...
- JAVA并发编程之倒计数器CountDownLatch
CountDownLatch 的使用场景:在主线程中开启多线程去并行执行任务,并且主线程需要等待所有子线程执行完毕后汇总返回结果. 我把源码中的英文注释全部删除,写上自己的注释.就剩下 70 行不到的 ...
- Java悲观锁Pessimistic-Lock常用实现场景
1:商品库存秒杀采用悲观锁Pessimistic-Lock主要好处是安全,充分利用了数据库的性能来做的一种锁机制. 悲观锁的实现: (1)环境:mysql + jdbctemplate (2)商品表g ...
- grep使用集合
一.grep使用 (一).选项 -a 不要忽略二进制数据. -A<显示列数> 除了显示符合范本样式的那一行之外,并显示该行之后的内容. -b 在显示符合范本样式的那一行之外,并显示该行之前 ...
- mysql docker 主从配置
主从复制相关 前置条件: docker安装的mysql是5.7.26版本 1. 编排docker-compose文件如下: version: '3' services: mysql-master: v ...