zoukankan      html  css  js  c++  java
  • Fire Balls 05——砖塔的创建,动态上升以及旋转

    版权申明:

    • 本文原创首发于以下网站:
    1. 博客园『优梦创客』的空间:https://www.cnblogs.com/raymondking123
    2. 优梦创客的官方博客:https://91make.top
    3. 优梦创客的游戏讲堂:https://91make.ke.qq.com
    4. 『优梦创客』的微信公众号: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);
        }
    }
    
    • 保存后运行游戏即可看到我们的砖塔从下往上升的效果了。
  • 相关阅读:
    [apue] FIFO:不是文件的文件
    [apue] 等待子进程的那些事儿
    [apue] popen/pclose 疑点解惑
    [apue] 使用 popen/pclose 的一点疑问
    [apue] 使用 poll 检测管道断开
    [apue] dup2的正确打开方式
    [apue] 管道原子写入量的一个疑问
    [apue] 测试管道容量的一些疑问
    【新阁教育】再也不用担心我的PLC通信不上了
    【新阁教育】三菱PLC的这个功能,真的很强大
  • 原文地址:https://www.cnblogs.com/raymondking123/p/11433553.html
Copyright © 2011-2022 走看看