問題是,我如何比較兩個相同類型的列表(在這種情況下是雪碧),並檢查它們是否相等。 爲了進入我的代碼,我有GameObjects符號,陰影和電纜,並用buttonclick(不同的腳本)改變它們的精靈。另一方面,我有GameObject [],並且我已經插入了GameObjects。現在我製作一個帶有GameObject的字典作爲鍵和一個特定的Sprites List作爲值,我搜索一個鍵並將該值返回到List ActualList,並將其與由GameObjects符號,陰影,電纜的當前精靈組成的List進行比較。 我的問題是,它沒有將RigidBody應用於GameObject,所以if語句似乎不起作用。是否有其他方式來比較兩個列表。我如何檢查2個列表是否具有相同的精靈C#
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using UnityEngine.UI;
public class Rigi : MonoBehaviour
{
public GameObject[] Akkus;
public Button Generator;
public GameObject symbol, shadow, cable;
int count1;
public Sprite[] spriteSymbols, spriteShadows, spriteCables;
public Dictionary<GameObject, List<Sprite>> AkkuDic = new
Dictionary<GameObject, List<Sprite>>();
public List<Sprite> ActualList = new List<Sprite>();
public void On_Click_Button1()
{
List<Sprite> CompareList = new List<Sprite>();
CompareList.Add(symbol.GetComponent<SpriteRenderer>().sprite);
CompareList.Add(shadow.GetComponent<SpriteRenderer>().sprite);
CompareList.Add(cable.GetComponent<SpriteRenderer>().sprite);
AkkuDic.TryGetValue(Akkus[count1], out ActualList);
if(ActualList.SequenceEqual(CompareList))
{
Rigidbody RigidbodyGameobject =
Akkus[count1].AddComponent<Rigidbody>();
}
}
public void Awake()
{
List<Sprite> mySpritesWind = new List<Sprite>();
mySpritesWind.Add(spriteSymbols[5]);
mySpritesWind.Add(spriteShadows[0]);
mySpritesWind.Add(spriteCables[0]);
List<Sprite> mySpritesOel = new List<Sprite>();
mySpritesOel.Add(spriteSymbols[4]);
mySpritesOel.Add(spriteShadows[2]);
mySpritesOel.Add(spriteCables[1]);
List<Sprite> mySpritesWasser = new List<Sprite>();
mySpritesWind.Add(spriteSymbols[5]);
mySpritesWind.Add(spriteShadows[0]);
mySpritesWind.Add(spriteCables[0]);
List<Sprite> mySpritesSolar = new List<Sprite>();
mySpritesWind.Add(spriteSymbols[3]);
mySpritesWind.Add(spriteShadows[5]);
mySpritesWind.Add(spriteCables[0]);
List<Sprite> mySpritesKern = new List<Sprite>();
mySpritesWind.Add(spriteSymbols[1]);
mySpritesWind.Add(spriteShadows[1]);
mySpritesWind.Add(spriteCables[1]);
List<Sprite> mySpritesKohle = new List<Sprite>();
mySpritesWind.Add(spriteSymbols[2]);
mySpritesWind.Add(spriteShadows[4]);
mySpritesWind.Add(spriteCables[1]);
AkkuDic.Add(Akkus[0], mySpritesWind);
AkkuDic.Add(Akkus[1], mySpritesOel);
AkkuDic.Add(Akkus[2], mySpritesWasser);
AkkuDic.Add(Akkus[3], mySpritesSolar);
AkkuDic.Add(Akkus[4], mySpritesKern);
AkkuDic.Add(Akkus[5], mySpritesKohle);
}
}
那麼我應該將AssetID添加到字典中的列表中,是否有辦法將一個.GetComponent()。sprite轉換爲一個AssetID,所以我可以將它們與這些進行比較,因爲如果這樣做的話,這很可能是答案 –
我認爲Unity有一個GetInstanceID()函數,它獲取唯一的對象引用(https://docs.unity3d.com/ScriptReference/Object.GetInstanceID.html)。 – PhillipH