2012-07-09 66 views
0

我是Unity和Javascript的新手,嘗試重新創建益智遊戲Cryptica作爲進入引擎的學習體驗。我正在嘗試在調用四個OnGUI按鈕之一時同時移動兩個對象:左,上,右和下。該腳本已附加到兩個對象,但只移動一個。在Unity 3D中通過OnGui轉換多個對象

如果我創建一個空的遊戲對象並將兩個對象添加到這個對象中,然後將這個腳本放置在空對象上,那麼這兩個對象都會移動,但是我不能根據不同的場景創建邏輯來以不同的方式移動每個對象。如果一個物體位於電路板的末端,它不應再朝那個方向移動,但另一個物體仍然可以移動)。這裏是代碼,讓我知道如果一個圖像會更有幫助。

var cubeMovement = 11; 

function Update() { 

} 

function OnGUI() { 
    //Move dynamic cubes 
    if (GUI.Button (Rect (250,150,50,50), "Up")) { 
     transform.Translate(cubeMovement,0,0); 
    } 

    if (GUI.Button (Rect (350,250,50,50), "Right")) { 
     transform.Translate(0,0,-cubeMovement); 

    } 

    if (GUI.Button (Rect (250,350,50,50), "Down")) { 
     transform.Translate(-cubeMovement,0,0); 
    } 

    if (GUI.Button (Rect (150,250,50,50), "Left")) { 
     transform.Translate(0,0,cubeMovement); 
    } 
} 

回答

0

在2個不同的對象上使用此腳本的問題是兩個對象都呈現相同的4個按鈕。所以你在屏幕上實際上有8個按鈕,只是最後繪製的按鈕位於頂部。

更新多個立方體看起來像這樣的邏輯:

function CubeVisible(var go: GameObject){ 
    var screenPos : Vector3 = camera.WorldToScreenPoint (go.transform.position); 
    if(screenPos.x < 0) return false; 
    if(screenPos.x > Screen.width) return false; 

    //Do the same for the y axis 

    //Negative-z means the object is behind the camera. 
    if(screenPos.z < 0) return false; 
    return true; //return true if the object wasn't outside any bounds. 
} 
function UpdateCubes(var dir: Vector3){ 
    var cubes: GameObject[] = GameObject.FindGameObjectsWithTag("cubes"); 

    for (cube in cubes) { 
     var pos = cube.transform.position; 
     var new_pos = pos + dir; 

     if(CubeVisible(new_pos)==true) 
      cube.transform.Translate(dir); 
    } 
} 

function OnGUI() { 
    //Move dynamic cubes 
    if (GUI.Button (Rect (250,150,50,50), "Up")) { 
     UpdateCubes(Vector3(cubeMovement,0,0)); 
    } 

    if (GUI.Button (Rect (350,250,50,50), "Right")) { 
     UpdateCubes(Vector3(0,0,-cubeMovement)); 
    } 

    if (GUI.Button (Rect (250,350,50,50), "Down")) { 
     UpdateCubes(Vector3(-cubeMovement,0,0)); 
    } 

    if (GUI.Button (Rect (150,250,50,50), "Left")) { 
     UpdateCubes(Vector3(0,0,cubeMovement)); 
    } 
} 

我的JavaScript福是有點生疏,我是一個C#的傢伙,所以希望我還沒有做出愚蠢的錯誤。以上應該是你要找的。測試對象是否仍在視圖中的問題是您的對象處於世界座標中,並且您聽起來像想知道對象是否在屏幕外。最簡單的方法是首先將對象的位置轉換爲2D屏幕座標,然後測試它是否在屏幕上。這條道路也有問題,它假定你的對象是圍繞它自己的起源。

哦,'標籤'。選擇任何遊戲對象時,標籤可以在「Inspector」中找到。您可以創建自己的自定義標籤。請參閱wiki獲取解釋。