2017-08-14 43 views
0

在下面的代碼,我得到一個錯誤(如預期),第7行:只有在動態創建的對象存在時才旋轉?

命名爲「魔方」並不在當前的背景下存在。

1. if (action == "place") { 
2.  GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube); 
3.  cube.transform.position = new Vector3(0, 0.5F, 0); 
4. } else if (action == "rotate") { 
5.  var x = Convert.ToInt32(message.Args["rotatex"]); 
6.  var y = Convert.ToInt32(message.Args["rotatey"]); 
7.  cube.transform.Rotate(x,y,0); 
8. } 

這僅僅是概念證明。我不需要像這樣處理多個立方體。那麼我應該如何在正確的上下文中實例化它(在這個if聲明之上),而不將其「放置」到場景中?

回答

2

您應該首先聲明對象,並且只在值不是null時旋轉它。這樣

GameObject cube = null; 

if (action == "place") { 
    cube = GameObject.CreatePrimitive(PrimitiveType.Cube); 
    cube.transform.position = new Vector3(0, 0.5F, 0); 
} else if (action == "rotate") { 
    var x = Convert.ToInt32(message.Args["rotatex"]); 
    var y = Convert.ToInt32(message.Args["rotatey"]); 
    if(cube != null) 
     cube.transform.Rotate(x,y,0); 
} 
+0

在此代碼中,多維數據集在「旋轉」分支中始終爲空,因此對旋轉()的調用永遠不會發生。您需要在「旋轉」分支中或在聲明之後但在if語句之前的某個地方實例化它。 –

+0

布賴恩,它暗示(或應該)立方體將被放置之前,它是旋轉... –

+0

@馬特升:這仍然會在IDE中引發錯誤。我應該忽略它嗎?我認爲我會實例化'if'語句上方的多維數據集,但不會將它放置在場景中。那可能嗎? –

1

東西你沒有在你的「否則,如果」語句只有你「如果」聲明,宣佈多維數據集。所以在你的'else if'中它引用的是在這種情況下不存在的東西。

您可以簡單地使用開關來代替。

switch (action){ 
case 'place' : 
//Declare Cube (Including Instantiate) 
//Do what you want with Cube 
break; 
case 'rotate': 
//Declare Cube (Including Instantiate) 
//Do whatever else 
break; 
} 
+0

這會在每次嘗試旋轉「該」立方體時實例化一個新立方體,不是嗎? –

+0

是的,我誤解了這個問題。然後,解決方案是在頁面頂部聲明一個gameobject變量,並與其他聲明。然後如果爲空或者爲空,則執行代碼但不執行實例化,否則實例化。如果你想要正確的代碼,只需說,我會發佈一個新的答案。 – cmprogram