C# FindGameProject标记列表获取重复项

C# FindGameProject标记列表获取重复项,c#,unity3d,C#,Unity3d,在unity c#中制作一个fisher-yates牌洗牌器,这些牌被编译在一个列表上,CardObjects=GameObject.FindGameObjectsSwithTag(“牌”)并被该对象洗牌,但findgameobjects对象总是“找到”带有该标记的游戏对象的副本,例如,列表中的elemnt23可能是10个俱乐部,但element17和element41也可能是10个俱乐部,这些重复项填满了列表中的空间,这意味着列表中没有其他卡的空间,这意味着有一些卡只是到处乱放,没有做任何事情

在unity c#中制作一个fisher-yates牌洗牌器,这些牌被编译在一个列表上,CardObjects=GameObject.FindGameObjectsSwithTag(“牌”)并被该对象洗牌,但findgameobjects对象总是“找到”带有该标记的游戏对象的副本,例如,列表中的elemnt23可能是10个俱乐部,但element17和element41也可能是10个俱乐部,这些重复项填满了列表中的空间,这意味着列表中没有其他卡的空间,这意味着有一些卡只是到处乱放,没有做任何事情,也不在列表中。一切都在正常工作,没有bug。唯一的问题是,它只会多次找到同一个对象

代码(如果有任何含义,则由按钮触发):


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;
}