如何从其他类访问浮点输出变量

时间:2014-06-15 19:58:33

标签: c# .net unity3d

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

答案 0 :(得分:1)

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

TypeWithRand randtype;

...

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

...

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

您必须将TypeWithRand替换为包含randID方法的类型。

另一种方法是让类的实例包含randID。然后你可以检查如下的值:

RandClass randClass;

...

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

这意味着您在DecideID的构造函数中调用RandClass(我在下面修改的方式)。您也可以将该函数保留为void,但随后在函数中设置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);
    }
}