![](/img/trans.png)
[英]Unity C# getting a variable from another script on the same GameObject
[英]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.