仅当动态创建的对象存在时才旋转它?

时间:2017-08-14 21:11:19

标签: c# unity3d

在下面的代码中,我在第7行收到错误(正如预期的那样):

  

名称" cube"在当前背景下不存在。

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 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:1)

您没有在'else if'语句中仅声明您的'if'语句中的多维数据集。所以在你的'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; 
}