的唯一實體我知道,如果我有像Unity3d,得到具體的組件類型
Component tmp = (myClass)gameObject.GetComponent<myClass>();
可以返回空值,或者輸入「MyClass的」的實例,如果它存在於我的具體遊戲對象。現在,讓我們假設我有一個來自給定半徑的物理球體捕獲的對象數組。我有20個遊戲對象返回。
如何創建一個例程以僅返回具有組件的遊戲對象,因此我不必一遍又一遍地編寫自己的迭代器。再次是泛型,因爲在一個領域我可能需要另一個地方。我不想爲了使可讀性變得很痛苦而全力投入類型轉換。
反饋(每西普里安的答案)
我想你的方法逐字,並沒有得到任何人的「類」,我想,即使它是一個附加組件。所以,我試着稍微修改一下例程。首先,確保一個合適的「遊戲對象」。然後從那裏,嘗試撥打GameObject's .GetComponent<T>()
。但是這會導致錯誤,即使<T>
與我通過獲取組件的類型相同。
public static IEnumerable<T> GetItemsAsT<T>(this object[] objects)
where T:class
{
GameObject gObj;
foreach(var obj in objects)
{
if(obj is GameObject)
{
gObj = (GameObject)obj;
if(gObj.GetComponent<T>() != null)
{
Debug.Log ("Found via IEnumerable");
yield return gObj.GetComponent<T>();
}
}
}
yield break;
}
每輕微修訂的Ciprian的答案。
Error CS0311: The type 'T' cannot be used as type parameter 'T' in the generic type or method 'UnityEngine.GameObject.GetComponent<T>()'. There is no implicit reference conversion from 'T' to 'UnityEngine.Component'. (CS0311) (Assembly-CSharp)
感謝修改後的問題,稍後將在家中嘗試,但認爲這是因爲我錯過了「where T:class」子句 – DRapp 2014-09-24 13:19:48
我試過並更新了我的帖子和修改後的實現。你能看看它,看看它對你有意義嗎? – DRapp 2014-09-24 21:09:09
經過反饋後更新了回覆 – 2014-09-25 07:01:57