亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

UnityEngine.GameObject與Generic.List

UnityEngine.GameObject與Generic.List

C#
慕無忌1623718 2021-04-02 22:18:57
public void FindClosestEnemy(){    List<GameObject> pList = GameObject.FindGameObjectsWithTag("Player");                                 pList.OrderBy(obj=>Vector3.Distance(FindLocalPlayer().transform.position, obj.transform.position)).ToList();}我不明白兩個列表之間的區別。如何將“ UnityEngine.GameObject []”列表轉換為System.Collections.Generic.List> UnityEngine.GameObject <
查看完整描述

2 回答

?
交互式愛情

TA貢獻1712條經驗 獲得超3個贊

GameObject.FindGameObjectsWithTag返回一個GameObjects數組。


C#中的數組是一種數據結構,用于存儲相同類型的多個對象。


一個列表是對象的泛型集合。


盡管數組和列表在概念上非常相似,但是兩者在數據訪問和使用方面有所不同。通常,數組在創建時只會填充一次,之后只能讀取,而List可以隨時更改其元素(有一些注意事項)。


這個StackOverflow問題總結了為什么您可能想要另一個:Array vs List <T>:何時使用哪個?


在您的特定情況下,您想對您的GameObject集合應用一些Linq排序,因此您需要將接收FindGameObjectsWithTag到的數組轉換為列表。


您可以通過多種方式來執行此操作。最簡單的方法是在列表上使用構造函數重載來一次分配整個數組:


GameObject[] gameObjectArray = GameObject.FindGameObjectsWithTag("Player");

List<GameObject> gameObjectList = new List<GameObject(gameObjectArray);

其他一些選項在這里可用:System.Array到List的轉換


查看完整回答
反對 回復 2021-04-17
?
LEATH

TA貢獻1936條經驗 獲得超7個贊

正如史蒂夫(Steve)正確解釋的那樣,但我想以不同的方式回答:

實際上,在您的代碼中,您是將數組類型對象(GameObject.FindGameObjectsWithTag("Player"))分配給列表類型(List<GameObject> pList)對象,而編譯器并不隱式支持該對象。您必須將列表轉換為數組類型:

List<GameObject> pList = new List<GameObject>(GameObject.FindGameObjectsWithTag("Player"));

之后,您將可以使用您的代碼。

現在問題的第一部分

我不明白兩個列表之間的區別。

實際上,您是在詢問不同的黑白數組和列表,并且需要記住的主要區別是,當您具有固定長度的數據時,則應使用數組,如果數據長度可變,則應使用列表。


查看完整回答
反對 回復 2021-04-17
  • 2 回答
  • 0 關注
  • 249 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號