Unity——制作简易红绿灯
效果图
与该类红绿灯相似。


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

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

基本思想
我们日常的红绿灯,是变红,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<MeshRenderer>();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.把脚本添加在灯节点上,并把三个材质添加到脚本中。

2. 点击运行即可。