Unity——制作简易红绿灯

效果图

与该类红绿灯相似。

Unity——制作简易红绿灯_第1张图片

前提准备

首先在场景中,创建一个正方体(灯座),球体(作为灯),把其放置成红绿灯结构。

Unity——制作简易红绿灯_第2张图片

创建四个材质球,基础色分别赋为灰色,红色,黄色,绿色。其中灰色作为灯座颜色,红、黄、绿材质球作为红绿灯变换的材质。

Unity——制作简易红绿灯_第3张图片

基本思想

我们日常的红绿灯,是变红,3秒黄灯,变绿,3秒黄灯,变红……,周而复始。这一看就是要用到循环,由于红绿灯一天都在工作,所以循环应该没有结束条件。我们创建了三个颜色的材质球,只要按着红黄绿黄红黄绿……分别赋给灯就行啦,如何在规定时间完成一个操作,这就要用到了Invoke()函数。

public void Invoke (string methodName, float time);

描述:在 time 秒后调用 methodName 方法。

这里涉及一个难点,就是黄灯的问题,因为不管是红灯过后还是绿灯过后一定是黄灯,但怎么确定黄灯后是红灯还是绿灯?为了解决这个问题,设计了一个标记,flag=1代表黄灯上一个是红灯,flag=0代表黄灯上一个是绿灯。

具体步骤

1.创建C#文件Test Script,代码如下。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestScript : MonoBehaviour
{
    public Material[] materialss;
    int m_index = 0;//材质下标
    int flag = 1;//标记
   
    void Start()
    {
        changecolor();
    }

    void Update()
    { 
    }
    private void changecolor()
    {
        MeshRenderer mr = GetComponent();
        mr.material = materialss[m_index];
        if (m_index == 0)//red
        {
            Invoke("changecolor",10);
            m_index = 1;

        }
        else if (m_index == 1)//yellow
        {
            Invoke("changecolor", 3);
            if (flag == 0)
            {
                m_index = 0;
                flag = 1;
            }else
            {
                m_index = 2;
                flag = 0;
            }
        }
        else if(m_index == 2)//green
        {
            Invoke("changecolor", 10);
            m_index = 1;
        }
    }
}

2.把脚本添加在灯节点上,并把三个材质添加到脚本中。

Unity——制作简易红绿灯_第4张图片

2. 点击运行即可。

你可能感兴趣的:(Unity,unity)