
如何忽略這些缺失的元素?
或者
如何從串列中洗掉我被摧毀的目標?
公共類 SkinMananger : MonoBehaviour {
public GameObject[] characters;
public int selectedCharacter = 0;
public GameObject carrot;
public void NextOption()
{
characters[selectedCharacter].SetActive(false);
selectedCharacter = (selectedCharacter 1) % characters.Length;
characters[selectedCharacter].SetActive(true);
}
public void BackOption()
{
characters[selectedCharacter].SetActive(false);
selectedCharacter--;
if(selectedCharacter < 0)
{
selectedCharacter = characters.Length;
}
characters[selectedCharacter].SetActive(true);
}
public void PlayGame()
{
PlayerPrefs.GetInt("selectedCharacter", selectedCharacter);
}
}
我使用 Destroy(gameObject); 當某些動作生效時,我的角色。所以我需要一個皮膚管理器在它們被破壞時也能作業。就在這一刻,它卡住了。
uj5u.com熱心網友回復:
您可以使用LinqWhere和隱式bool運算子,例如
using System.Linq;
...
public void RemoveInvalidEntries()
{
characters = character.Where(c => c).ToArray();
}
這基本上等于做類似的事情
var list = new List<GameObject>();
foreach(var c in characters)
{
if(c) list.Add(c);
}
characters = list.ToArray();
或者,我通常更喜歡一個專用的類來跟蹤現有實體本身,例如
public class Character : MonoBehaviour
{
private readonly static List<Character> instances = new List<Character>();
public IReadOnlyList<Character> Instances => instances;
private void Awake ()
{
instances.Add(this);
}
private void OnDestroy ()
{
instances.Remove(this);
}
}
所以以后你可以通過
Character.Instances
并確保在該串列中始終只注冊當前存在的實體。
uj5u.com熱心網友回復:
您可以在函式中添加對空參考的檢查:
public void NextOption()
{
if(characters[selectedCharacter])
{
characters[selectedCharacter].SetActive(false);
selectedCharacter = (selectedCharacter 1) % characters.Length;
characters[selectedCharacter].SetActive(true);
}
}
你可以在 BackOption() 函式中做同樣的事情,只是用相同的 If 條件包圍它。它檢查 characters[selectedCharacter] 是否為空。如果它為空,它只是簡單地忽略。但是您需要確保 selectedCharacter 變數始終大于陣列的長度,否則會發生陣列越界錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/362082.html
