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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章