C# FindGameProject标记列表获取重复项
在unity c#中制作一个fisher-yates牌洗牌器,这些牌被编译在一个列表上,CardObjects=GameObject.FindGameObjectsSwithTag(“牌”)并被该对象洗牌,但findgameobjects对象总是“找到”带有该标记的游戏对象的副本,例如,列表中的elemnt23可能是10个俱乐部,但element17和element41也可能是10个俱乐部,这些重复项填满了列表中的空间,这意味着列表中没有其他卡的空间,这意味着有一些卡只是到处乱放,没有做任何事情,也不在列表中。一切都在正常工作,没有bug。唯一的问题是,它只会多次找到同一个对象 代码(如果有任何含义,则由按钮触发):C# FindGameProject标记列表获取重复项,c#,unity3d,C#,Unity3d,在unity c#中制作一个fisher-yates牌洗牌器,这些牌被编译在一个列表上,CardObjects=GameObject.FindGameObjectsSwithTag(“牌”)并被该对象洗牌,但findgameobjects对象总是“找到”带有该标记的游戏对象的副本,例如,列表中的elemnt23可能是10个俱乐部,但element17和element41也可能是10个俱乐部,这些重复项填满了列表中的空间,这意味着列表中没有其他卡的空间,这意味着有一些卡只是到处乱放,没有做任何事情
FindGameObjectsSwithTag
工作完美,罪魁祸首是错误的洗牌逻辑
来自维基百科():
public void Shuffler()
{
CardObjects = GameObject.FindGameObjectsWithTag("cards");
for (int positionOfArray = 0; positionOfArray < CardObjects.Length; positionOfArray++)
{
GameObject obj = CardObjects[positionOfArray];
int randomizeArray = Random.Range(0, positionOfArray);
CardObjects[randomizeArray] = obj;
}
CardObjects[0].transform.position = new Vector3(Locationator1.position.x, Locationator1.position.y, Locationator1.position.z);
-- To shuffle an array a of n elements (indices 0..n-1):
for i from 0 to n−1 do
j ← random integer such that i ≤ j < n
exchange a[i] and a[j]
for (int positionOfArray = 0; positionOfArray < CardObjects.Length - 1; positionOfArray++)
{
GameObject obj = CardObjects[positionOfArray];
int randomizeArray = Random.Range(positionOfArray, CardObjects.Length);
CardObjects[positionOfArray] = CardObjects[randomizeArray];
CardObjects[randomizeArray] = obj;
}