我试图生成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。
答案 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;
}
...