簡體   English   中英

嘗試將 GameObject 分配給另一個腳本中的變量(Unity C#)

[英]Trying to assign GameObject to variable in another script (Unity C#)

注意:較新的游戲編碼

我目前有我的游戲設置,當你按下一個按鈕時,它會添加一個預制件,其中包括一個單位需要的所有特征(如移動、健康等)。 然而,該預制件只是父母,它需要一個孩子來附加。 那個孩子是實際不同的單位。 我試圖在函數中同時調用團隊和子預制件,但是 UI 按鈕只允許一個參數。 作為一種解決方法,我讓按鈕調用 GameManager 中的一個函數來實例化父預制件。 在 GameManager 函數中,它還將新創建的 GameObject 分配給在不同腳本中定義的變量。 然后按鈕調用第二個腳本並將子預制添加到父預制(我還沒有構建這個函數)。 但是,當嘗試將父 GameObject 傳遞給第二個腳本時,我收到此錯誤:

Assets\Scripts\GameManager.cs(27,9): error CS0120: An object reference is required for the non-static field, method, or property 'Spawn.parentObject'

下面是 GameManager 函數的片段:

public void Spawner(Team team)
    {
        Vector3 Orientation;
        if(team.FacingLeft)
        {
            Orientation= new Vector3(-1,1,1);
        }
        else
        {
            Orientation= new Vector3(1,1,1);
        }

        var obj =Instantiate(UnitPrefab, new Vector3(team.SpawnPosition.x,team.SpawnPosition.y,0), Quaternion.identity);
        obj.transform.localScale = Orientation;
        gEntity = obj.GetComponent<Entity>();
        team.AddUnit(gEntity);
        Spawn.parentObject=obj;
    }

第二個腳本的片段:

public class Spawn : MonoBehaviour
{
    public GameObject parentObject;
    public void UnitChild(GameObject unit)
    {
        
    }
}

您收到此錯誤是因為您嘗試直接從類訪問Spawn.parentObject 但是parentObject不是靜態的。 您只能從Spawn的實例訪問它。 有 2 個選項可以解決此問題:

  • 您可以獲得對Spawn實例的引用。 例如你可以把

    public Spawn mySpawn; 進入你的游戲管理器。 然后,在 UnityEditor 中,您可以將附加了Spawn腳本的對象拖到 GameManager 上名為mySpawn的插槽中。 現在您可以像這樣訪問Spawn的實例:
    mySpawn.parentObject = obj;

  • 或者您可以將Spawn或至少Spawn.parentObject靜態。
    這意味着,您不會有Spawn的實例。 您將能夠直接訪問Spawn.parentObject 您可以通過將Spawn.parentObject的聲明更改為:

     public static GameObject parentObject;

    現在您可以像現在一樣訪問Spawn 在這種情況下,您可能還希望Spawn.UnitChild()是靜態的,以便您也可以輕松訪問它。

要決定要使用哪些修復程序,您需要考慮您希望Spawn是什么:

您想在 UnityScene 中有多個Spawn並稍后動態訪問它們嗎? 或者你只是想讓Spawn成為一個可以在任何地方輕松使用的小助手類?

很難解釋static和非static之間的區別,但也許這有助於您理解它: https ://www.techopedia.com/definition/4913/static-c#

如果你想在你的場景中有一個Spawn實例,你還可以查看 Singletons: https ://gamedevbeginner.com/singletons-in-unity-the-right-way/ 它們基本上是一種輕松確保只有一個類的實例存在,並允許您全局訪問這個單個實例。

暫無
暫無

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

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