Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么布局组上实例化的最后一个元素显示为第一个且错误?_C#_Unity3d_User Interface_Scripting_Scriptable Object - Fatal编程技术网

C# 为什么布局组上实例化的最后一个元素显示为第一个且错误?

C# 为什么布局组上实例化的最后一个元素显示为第一个且错误?,c#,unity3d,user-interface,scripting,scriptable-object,C#,Unity3d,User Interface,Scripting,Scriptable Object,我正在统一编程一个纸牌游戏,需要在水平布局组绑定的UI区域上显示绘制的纸牌,这些纸牌是预先编写的可脚本对象,绘制时显示,但由于某些原因,我创建和洗牌的纸牌的最后一张牌显示为随机不同的纸牌,作为这个地区的第一个孩子搬家了 我试着检查所有涉及的函数的逻辑,我发现删除洗牌可以解决问题,但在调试洗牌函数时,我发现一切都按预期工作,因此我得出结论,这肯定只是一个图形问题。我还尝试添加布局元素和内容大小调整器,但没有用。我将留下下面的DrawCards、CreateDeck和Shuffle函数作为参考。 更

我正在统一编程一个纸牌游戏,需要在水平布局组绑定的UI区域上显示绘制的纸牌,这些纸牌是预先编写的可脚本对象,绘制时显示,但由于某些原因,我创建和洗牌的纸牌的最后一张牌显示为随机不同的纸牌,作为这个地区的第一个孩子搬家了

我试着检查所有涉及的函数的逻辑,我发现删除洗牌可以解决问题,但在调试洗牌函数时,我发现一切都按预期工作,因此我得出结论,这肯定只是一个图形问题。我还尝试添加布局元素和内容大小调整器,但没有用。我将留下下面的DrawCards、CreateDeck和Shuffle函数作为参考。 更新:用静态的手和牌组重写DrawCards函数也无法修复它

   public class DrawCards : MonoBehaviour
{
    public GameObject playerCard;
    public GameObject playerArea;
    public CardDisplay display; 

public List<Card> Draw(List<Card> deck, int num)
{
    List<Card> handTemp = new List<Card>();
    RectTransform root = playerArea.GetComponent<RectTransform>();
    for (int i = 0; i < num; i++)
    {
        GameObject card = Instantiate(playerCard, playerArea.transform);
        Debug.Log("card instatiated");
        LayoutRebuilder.ForceRebuildLayoutImmediate(root);
        handTemp.Add(deck[0]);
        Debug.Log(deck[0].name);
        display.Set(deck[0]);
        deck.RemoveAt(0);
    }
    return handTemp;
    
  }

}

private List<Card> CreateDeck()
{
    List<Card> deck = new List<Card>();
    for (int i = 0; i < 6; i++)
    {
        deck.Add(startingCards[0]);
    }
    for (int i = 0; i < 6; i++)
    {
        //Debug.Log(i);
        deck.Add(startingCards[i]);
    }
    //Debug.Log("deck created");
    return deck;
}

public void Shuffle(List<Card> zone)
{
    int count = zone.Count;
    //Debug.Log("count" + count);
    int last = count - 1;
    //Debug.Log("last" + last);
    for (int i = 0; i < last; i++)
    {
        int random = Random.Range(i, count);
        //Debug.Log("random " + random);
        Card tmp = zone[i];
        //Debug.Log("tmp " + tmp.name);
        //Debug.Log("og " + zone[i].name);
        //Debug.Log("random card " + zone[random].name);
        zone[i] = zone[random];
        //Debug.Log("switched card " + zone[i].name);
        zone[random] = tmp;
        //Debug.Log("switched card " + tmp.name);
        
    }
}
公共类提款卡:单行为
{
公共游戏对象玩家卡;
公共游戏对象玩家区;
公共卡显示;
公共列表绘制(列表组,整数)
{
List handTemp=新列表();
RectTransform root=playerArea.GetComponent();
for(int i=0;i
以防任何人有类似问题:我解决了这个问题,问题出在DrawCards函数上:因为我在实例化后调用了牌组顶部的Set函数,所以第一张牌总是实例化“unset”,即随机。在实例化之前移动Set调用可以修复此问题。

是否使用水平布局组?是的,为了保持卡的位置,为什么?如果需要,我可以发送检查员的截图。