我正在開發一個 2D 游戲,我正在創建一個健康系統。我已經設定好了,現在我希望能夠更新滑塊值以顯示每個角色的健康水平。請注意,健康條不是每個角色的子物件。而是 GameManager UI 物件的一部分。我這樣設定是因為玩家最多可以選擇 4 個角色帶入戰斗場景。
在下面的這個塊中,您可以看到在 awake 函式中,我得到了場景中角色的串列,并為每個角色實體化了一個健康欄預制物件。
問題是:如何更新每個滑塊以匹配每個字符的值?
private void Awake()
{
characters = GameObject.FindGameObjectsWithTag("Draggable");
foreach (GameObject character in characters)
{
var location = GameObject.Find("Character Health Window");
GameObject healthBar = Instantiate(healthBarPrefab, location.transform);
healthBar.GetComponent<HealthSlider>().characterName.text = character.name;
listOfHealthBars.Add(healthBar);
listOfCharacters.Add(character);
}
}
private void Update()
{
foreach (GameObject character in listOfCharacters)
{
foreach (GameObject healthBar in listOfHealthBars)
{
healthBar.GetComponent<HealthSlider>().slider.value = character.GetComponent<CharacterHealthAndLevel>().currentHealth;
healthBar.GetComponent<HealthSlider>().slider.maxValue = character.GetComponent<CharacterHealthAndLevel>().maxHealth;
}
}
}
在這里您可以看到我在游戲中有兩個角色,因此正在實體化兩個健康條物件。然后他們受到了傷害,所以他們的生命值為 50(最大值為 100)。當這些滑塊未附加到角色時,如何更新它們?但取而代之的是 GameManager 腳本的實體化預制件?
編輯:我已經讓健康欄正確實體化,健康欄旁邊有正確的名稱。但它們會同時更新。他們都從第一個實體中讀取值。如何將它分開,以便每個條都與正確的字符相關聯?
uj5u.com熱心網友回復:
在您的GameManager
腳本中,您必須存盤對您的角色和健康條的參考。然后在更新方法中,您必須相應地更新健康欄。
因此,只需將您的角色集合存盤在您GameManager
的健康棒集合中即可。
一種實作方式是為這些值保留一個字典:
Dictionary<GameObject, HealthSlider> characterHealthBars = new Dictionary<GameObject, HealthSlider>();
要添加帶有健康條的角色:
characterHealthBars.Add(yourCharacterGameObject, yourHealthSlider);
對于更新:
foreach (var item in characterHealthBars) {
// update health slider
// item.Key is the character object, item.Value is the health slider
}
有關更多資訊有關c# 中字典的此處
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/520009.html
標籤:unity3d
上一篇:無法在c#中將ExpandoObject隱式轉換為IDictionary
下一篇:錯誤CS1519(無效令牌“;”)和CS1001(需要識別符號)。矢量3問題(Brakeys多人游戲教程ep2)