簡體   English   中英

無法從其他游戲對象的腳本中獲取變量

[英]Unable to get variables from script in other game object

我試圖生成6個隨機整數,然后將它們分配給6個不同的對象,但是我發現,簡單地在對象內生成整數會導致每個數字都相同,因為它們都在相同的時間加載。 要變通解決此問題,我試圖連續生成6,以便時鍾時序不同並給出不同的數字。 我試圖弄清楚如何訪問這6個變量。

我已經嘗試過使用'GetComponent <>()'和'GameObject.Find(“”)'一起使用多種不同格式,並將生成的腳本存儲在單行為變量中(我認為這可能使我困惑),然后嘗試通過將腳本存儲在其中的變量訪問數字。但是,當我這樣做時,Unity表示腳本中沒有數字變量(在我的情況下為Num1,Num2等)。

這就是我所擁有的,在驗證變量生成有效的前提下,我只會顯示試圖獲取變量的代碼。

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抓取任何東西,盡管GameInit中的變量不為0,但抓取器對象中的所有Num變量都等於0。

編輯

抱歉,我誤解了您的問題所在。 編譯器告訴您,這些變量在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;
}
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM