无法从其他游戏对象的脚本中获取变量

时间:2019-09-10 03:36:04

标签: c# unity3d variables

我试图生成6个随机整数,然后将它们分配给6个不同的对象,但是我发现,简单地在对象内生成整数会导致每个数字都是相同的,因为它们都在相同的时间加载。要变通解决此问题,我试图连续生成6,以便时钟时序不同并给出不同的数字。我试图弄清楚如何访问这6个变量。

我已经尝试过使用'GetComponent <>()'和'GameObject.Find(“”)'一起使用多种不同格式,并将生成的脚本存储在单行为变量中(我认为这可能会弄乱我向上),然后尝试通过将脚本存储在其中的变量访问数字。但是当我这样做时,Unity表示脚本中没有数字变量(在我的情况下为Num1,Num2等)。 / p>

这就是我所拥有的,在验证变量生成有效的前提下,我仅展示试图获取变量的代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System;

public class NumberButton : MonoBehaviour
{
    public int Num;
    public GameObject Game;

    void Start()
    {
        MonoBehaviour Game = GameObject.Find("Game").GetComponent<GameInit>();
        print(Game.name);
        if (gameObject.name == "Button1")
        {
            Num = Game.Num1;
        }
        else if (gameObject.name == "Button2")
        {
            Num = Game.Num2;
        }
        //There are 4 more of these, 1 for each button, I realize this is terrible code etiquette.
        GetComponent<TextMesh>().text = Num.ToString();
    }
}

如果有效,则应根据按钮的名称为每个按钮分配变量,以便Button1从存储在GamObject“游戏”中的GameInit脚本获取Num1。实际上,尽管GameInit中的变量不为0,但GameInit并没有抓住任何东西,抓取器对象中的所有Num变量都等于0。

1 个答案:

答案 0 :(得分:1)

编辑

对不起,我确实误解了您的问题。编译器告诉您,这些变量在MonoBehaviour对象中不存在,因为MonoBehaviour没有这些变量。

您需要更改

MonoBehaviour Game = GameObject.Find("Game").GetComponent<GameInit>();

收件人

GameInit Game = GameObject.Find("Game").GetComponent<GameInit>();

原始

由于答辩率低,我无法发表评论,所以我将以此为答案。

首先,数字生成是否发生在GameInit.Start()中?如果是这样,则有可能在GameInit.Start()之前调用了Start()按钮,因此所有变量在访问时均为默认值0。为确保不是这种情况,请将数字生成代码放入GameInit.Awake()。

此外,要确保MonoBehaviour对象没有发生轨迹,请尝试以下操作:

...
if (gameObject.name == "Button1")
{
   Num = GameObject.Find("Game").GetComponent<GameInit>().Num1;
}
...