有人可以幫助我了解我所缺少的嗎?
我的問題是,我有一個管理場景的腳本,當它啟動時,它會從預制件中創建一堆按鈕。
void InitializeCharacters()
{
int index = 0;
foreach (CharacterSelectionItem character in CharacterSelectionData.CharacterList)
{
CharacterButton.GetComponent<CharacterButton>().Character = character;
CharacterButton.GetComponent<CharacterButton>().fullSource = character.FullCharacterSource;
GameObject newButton = Instantiate(CharacterButton) as GameObject;
newButton.transform.SetParent(CharacterPanel.transform, false);
}
}
CharacterButton 是預制件,由編輯器分配給腳本,附有此腳本:
using static CharacterSelectionItem;
public class CharacterButton : MonoBehaviour
{
public CharacterSelectionItem Character;
public string fullSource;
void Start()
{
Debug.Log("Full" fullSource);
Debug.Log("Character image source" Character.FullCharacterSource);
}
}
public class CharacterSelectionItem
{
public string Description;
public string ImageSource;
public string FullCharacterSource;
public string CharacterHistory;
public CharacterSelectionItem(
string descr,
string img,
string fullSource,
string histroy,
Race race
)
{
Description = descr;
ImageSource = img;
FullCharacterSource = fullSource;
CharacterHistory = histroy;
Race = race;
}
};
現在,第一個除錯列印字串,而第二個回傳“物件參考未設定為物件的實體”,我真的不明白為什么。我試圖在 SetCharacter(ref CharacterSelectionItem character) 中傳遞字符以獲取參考,但仍然不起作用。目標不是傳遞 CharacterSelectionItem 的每個欄位,而是傳遞整個物件。這是我的第一個統一專案,我松散地遵循了一個教程。并希望我能在那里找到答案,但它沒有來。我想我錯過了一些非常基本的東西,但不知道是什么,有人可以幫忙嗎?
uj5u.com熱心網友回復:
我最近遇到了類似的情況,發現雖然Instantiate基本上創建了預制件的深層克隆,但它似乎只接管了序列化的自定義欄位。
至少從您共享的代碼來看,情況并非如此
public CharacterSelectionItem Character;
因為型別CharacterSelectionItem不是[Serializable]
努力做到
[Serializable]
public class CharacterSelectionItem
{
...
}
如果您不希望它出現在 Inspector 中,您仍然可以另外裝飾該欄位
[HideInInspector] public CharacterSelectionItem Character;
或者,不要在預制件上分配欄位,Instantiate而是首先將其分配給實體:
var newButton = Instantiate(CharacterButton);
newButton.transform.SetParent(CharacterPanel.transform, false);
newButton.GetComponent<CharacterButton>().Character = character;
newButton.GetComponent<CharacterButton>().fullSource = character.FullCharacterSource;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/528953.html
標籤:C#unity3d
