Unity3d实现的十字路口的模拟(五)

这一节我们来说一下红绿灯的控制和总结一下经验。

红绿灯的模型,本来也是想要在网上下载结果找来半天没有找到相应的资源,于是就自己用3dmax做了一个,当然导出的时候一定要记得是fbx的格式,否则是导入不进去unity的。

其实红绿灯的变化无非就是相应的灯的暗灭,并且对应一个参数go的0,1的控制,在之前的脚本中我们也发现了这个go确实传出去了,其实这个脚本的所有的变化都是用于go的传出,ok,上代码其实大家都知道左右和前后道路的红绿灯的变化是相反的这里只给出其中的一种,另一个是一样的:

#pragma strict
private var count:float;
public var green_light:Transform;
public var yellow_light:Transform;
public var red_light:Transform;
private var red:Color;
private var yellow:Color;
private var green:Color;
private var gray:Color;
static var go:int;
function Start () {
 go=1;
 count=0;
 red=red_light.GetComponent(Renderer).material.color;
 yellow=yellow_light.GetComponent(Renderer).material.color;
 green=green_light.GetComponent(Renderer).material.color;
 gray=Color.gray;
}

function Update () {
count=count+Time.deltaTime;
if(count<5&&count>0){//红灯
 red_light.GetComponent(Renderer).material.color=red;
 yellow_light.GetComponent(Renderer).material.color=gray;
 green_light.GetComponent(Renderer).material.color=gray;
 go=0;
}else if(5<count&&count<7){//黄灯
 red_light.GetComponent(Renderer).material.color=gray;
 yellow_light.GetComponent(Renderer).material.color=yellow;
 green_light.GetComponent(Renderer).material.color=gray;
 go=0;
}else if(7<count&&count<12){//绿灯
 red_light.GetComponent(Renderer).material.color=gray;
 yellow_light.GetComponent(Renderer).material.color=gray;
 green_light.GetComponent(Renderer).material.color=green;
 go=1;
}else if(count>7){
 count=0;
}
}

这个脚本就是一个update,想必大家也看的十分明白,ok,我们在来看一下镜头的变化,毕竟最开始我说我们这里还有四个视角是吧!

其实这个就是设置四个不同角度的摄像机,当激活其中一个时把其他的摄像机enable掉就好:

#pragma strict

var camera_q:GameObject;
var camera_w:GameObject;
var camera_e:GameObject;
var camera_r:GameObject;

function Update () 
{
        if(Input.GetKeyUp(KeyCode.Q))
        {
                onActiveFalse();
                camera_q.active=true;
        }else if(Input.GetKeyUp(KeyCode.W))
        {
                onActiveFalse();
                camera_w.active=true;
        
        }else if(Input.GetKeyUp(KeyCode.E))
        {
                onActiveFalse();
                camera_e.active=true;
        }else if(Input.GetKeyUp(KeyCode.R))
        {
                onActiveFalse();
                camera_r.active=true;
        }
}
function onActiveFalse()
{
        camera_q.active=false;
        camera_w.active=false;
        camera_e.active=false;
        camera_r.active=false;
}

当然还有那个最初的notic,也是很简单的那Unity圣典一查就有的:

#pragma strict
var buttonWidth = 120;  
var buttonHeight = 200;  
  
var X = (Screen.width - buttonWidth) / 2.0f;  
var Y = (Screen.height - buttonHeight) / 2.0f;  
var off:boolean=false;
function OnGUI () {
if(!off){
    GUI.color = Color.red;
    var windowRect : Rect = Rect(X, Y, buttonWidth, buttonHeight);
	windowRect = GUI.Window(0, windowRect, DoMyWindow, "Notice");
}
	
}

//创建窗口的内容,GUI.color的值应用到在上面的代码中创建的窗口。
function DoMyWindow (windowID : int) {
 GUILayout.Label("可以使用Q,W,E,R来切换视角");
 if(GUILayout.Button("close")){
   off=true;
 }
}
最后就是要说一下,Unity可以支持C#和JavaScript虽然二者可以都用我还是建议开发的时候就使用其中一种,不要两种都使用,就拿我这次来说吧,一开始我的控制车辆的脚本是C#的,当我想获得交通信号灯脚本的go的时候,怎么都获取不了,当然我也查找了很多资料,说什么编译顺序发生变化,总之看起来很高端,所以避免这个问题的最好方法就是保证脚本的统一,后来把他换成JavaScript就ok~

好啦,以上就是我这个小程序的开发过程,希望可以帮到大家~欢迎大家指正不足之处,大家共同学习!



发布了40 篇原创文章 · 获赞 38 · 访问量 20万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章