unity3dC#小白上手简单易懂(一)制作红绿灯【超简易版】

红绿灯的闪烁

  • Unity3d的C#语言编程脚本
    • 模型的创建
    • 脚本编辑
    • 运行

Unity3d的C#语言编程脚本

刚刚接触Unity差不多一个星期,慢腾腾地摸索出了一些东西,我把这些作为我的学习笔记记录下来。我用的unity版本是最新的2019.2.12,C#是在下载unity时自动帮我下载的Visual Studio上写的。

模型的创建

首先是在unity中用Hierarchy的正方体,球体等模型画出一个红绿灯。过程不赘述,效果如图:
unity3dC#小白上手简单易懂(一)制作红绿灯【超简易版】_第1张图片

脚本编辑

碎碎念
其实我在刚开始做这个脚本的时候真的很头疼,虽然之前学过Java,但是对Unity和C#一点也没有接触过,刚开始学的时候去学校借了一大堆书,没看出个所以然来,后来还是在B站上看了一个视频,跟着up做了一个Roll A Ball,才感觉稍微好了一点。我做的这个红绿灯主要功能就是先亮绿灯,然后黄灯,接着红灯,然后循环……功能很简单,但我也憋了好久。。。最近脑壳不太灵光。

初试
刚开始写这个功能的时候我首先考虑的是如何让这个灯亮起来,要让这个灯亮起来的意思就是让这个球体模型变成 绿色。但是我们不能在unity的inspector上直接给他改颜色,我们现在做好的模型是默认的没有颜色,像图中灰灰的一样。为了虚拟仿真,游戏开始的时候这三个灯应该都是黑色的。所以我们要使他在游戏开始的时候是黑色,亮绿灯,几秒过后又变黑,然后再亮起来……这就涉及到了一个给unity中的物体修改材料的方法,代码如下:

	Material material = new Material(Shader.Find("Transparent/Diffuse"));
        material.color = Color.black;
        GetComponent<Renderer>().material = material;

刚开始的时候我想着红绿灯要计时,所以我必须有个计时器,于是我在网上搜了一大堆关于C#计时器的代码,然而并没有什么卵用……最后我找到了这一段代码:

public class GreenController : MonoBehaviour
{
	private float lastTime;//计时器
	private float curTime;
	void Start()
	{
		Material material = new Material(Shader.Find("Transparent/Diffuse"));
		material.color = Color.green;
		GetComponent<Renderer>().material = material;
		lastTime = Time.time;	
	}
	void Update()
	{
		curTime = Time.time;
		if (curTime - lastTime >= 3)   //时间差大于3秒过后
		{
			Material material = new Material(Shader.Find("Transparent/Diffuse"));
			material.color = Color.black;
			GetComponent<Renderer>().material = material;
		}
	}
}

这段代码是我看了这篇博客以后写的。代码不难懂,最后在unity里面也运行出来了,但是!问题来了:curTime是每一帧都在更新的,这样写可以让我的绿灯第一次亮起时正常,但亮了3秒以后他就会永远变黑,再也亮不起来,怎么办呢?

改进
我的红绿灯有三个灯泡,也就是说一个球体控制一个灯,每个球体要么亮起颜色,要么变黑,而且都是每隔一段固定的时间变色,而在c#中有这么一个神奇的函数:

 InvokeRepeating("wow", startime, waitime);//startime秒后调用wow() 函数,之后每waitime秒调用一次

这个函数是用在start方法里面的,看到这个方法是不是豁然开朗了很多!
所以最后我的绿灯脚本是这样的:

float gtime = 4;//绿灯亮4秒,从第零秒开始
float darktime = 4;//从第四秒变黑
float alltime = 10;//黄灯2秒,一轮总共10秒

void start(){
	Material material = new Material(Shader.Find("Transparent/Diffuse"));
        material.color = Color.black;
        GetComponent<Renderer>().material = material;//开始时将灯设置为黑色
        InvokeRepeating("GreenTurn", 0f, alltime);//0秒后调用GreenTurn() 函数,之后每10秒调用一次
        InvokeRepeating("TurnBlack", darktime, alltime);//绿灯灭
        }
void update(){}
void GreenTurn(){
	Material material1 = new Material(Shader.Find("Transparent/Diffuse"));
        material1.color = Color.green;
        GetComponent<Renderer>().material = material1;
}
void TurnBlack(){
	Material material2 = new Material(Shader.Find("Transparent/Diffuse"));
        material2.color = Color.black;
        GetComponent<Renderer>().material = material2;
}

运行

红灯和黄灯都是一样的,最后我的运行结果是这样的:
unity3dC#小白上手简单易懂(一)制作红绿灯【超简易版】_第2张图片

这个红绿灯还有很多可以完善的地方,以后还会修改升级,请大家多多关注我的博客啦,有什么错误的或者不妥当的地方欢迎各位批评指,技术小菜求之不得,感谢各位的观看!

你可能感兴趣的:(C#,Unity3d)