2014-06-15 56 views
0

我有一个function它将随机选择从1到5的数字,然后在该函数内有一个if语句,该语句将从函数输出的数字分配给变量叫做randID(为了在我的游戏中随机选择一个区域)。如何从其他类访问浮点输出变量

在另一个课程中,我想查看zoneID是否等于randID(我之前随机选择的那个),如果是,我想打印一条消息。

我会在一个班级里做到这一点,但是我在使用这个班级的游戏中有多个对象,我需要主游戏操作员类来决定选择哪个区域。

想象一下总部的游戏;这基本上是我想弄明白的。现在大部分系统已经到位。 :)

我提前感谢您提供任何帮助或指导。

PS:我使用C#和Unity3D创建此项目。

编辑:代码。

public static void DecideID() { 
    if (gameLeft >= 1f && timeZone_Zone.zoneAlive == false) { 
     float random = Random.Range(0f, 5f); 
     print (random); 
     if(random > 1f && random < 2f) { 
      id = 1; 
      print (id); 
     } 
     else if(random > 2f && random < 3f) { 
      id = 2; 
      print (id); 
     } 
     else if(random > 3f && random < 4f) { 
      id = 3; 
      print (id); 
     } 
     else if(random > 4f && random < 5f) { 
      id = 4; 
      print (id); 
     } 
     else if(random >= 5f) { 
      id = 5; 
      print (id); 
    } 
} 

print (id)语句仅用于测试目的。

然后,我想要做这样的事情:

if (zoneID = randID) { 
    GetComponent<MeshRenderer>().enabled = true; 
} 

回答

1

你想要的是访问另一个脚本组件的变量。使randID公开,然后您可以在另一个脚本中访问它。

TypeWithRand randtype; 

... 

void Start() 
{ 
    randtype = objWithRand.GetComponent<TypeWithRand>(); 
} 

... 

if (randtype.randID == zoneID) 
{ 
    ... 
} 

您将有包含该randID方法的类型来代替TypeWithRand

做到这一点的另一种方法是有一个包含randID的类的实例。然后,你可以检查像值:

RandClass randClass; 

... 

if (randClass.randID == zoneID) 
{ 
    //do stuff 
} 

这意味着,你叫DecideIDRandClass构造函数(下面我有固定的方式)。您也可以将该功能保留为无效,但在您的功能中将randID的值设置为与设置id类似。然后,你会从类

randClass.DecideID(); 

if (randClass.randID == zoneID) 
{ 
    //do stuff 
} 

此外,在几个方面你DecideID功能不正确的情况下调用该函数。首先,Random.Range()可以使用整数,而不需要多个if语句。

id = Random.Range(0, 5); 

您也可以返回id的值,并且随后参考,所以randID的任务看起来像

randID = DecideID(); 

所以,你的实际功能将类似于:

public int DecideID() { 
    id = 0; 
    if (gameLeft >= 1f && timeZone_Zone.zoneAlive == false) { 
     id = Random.Range(0, 5); 
    } 
    return id; 
} 

public void DecideID() { 
    if (gameLeft >= 1f && timeZone_Zone.zoneAlive == false) { 
     randID = Random.Range(0, 5); 
    } 
} 
+0

我从脚本中复制了一小段摘录。我将如何实现这一点?另一个c#文件是否算作GameObject? –

+0

@JackMiller gameobject是场景中的对象,您将脚本附加到...您将替换的类型将是附加到其他gameobject的脚本的类型 –

+0

因此,如果我想获取浮动值'id'然后在我的区域课程中使用它,我该怎么做? 类似于 'Handler = GameObject.Find(“GameHandler”); Handler.GetComponent (id); –