Unity List 添加的每个对象似乎都是同一个项目,而它们应该不同......?

如何解决Unity List 添加的每个对象似乎都是同一个项目,而它们应该不同......?

目前我正在尝试为我正在创建的游戏制作一个动态列表,基本上创建一个如图所示的菱形图案。

并且我希望能够将这些对象的位置保存在数组/列表中,但是正如您看到的每列的长度不同,所以我认为列表会比数组更好用(但如果您有动态数组提示请帮忙)。然而,当我通过 for 循环将对象添加到我的列表中时,我最终会在列表中一遍又一遍地复制相同的对象,即使我在将它添加到列表后更改了它。

void Start()
    {
        for(int i = 0; i < colNum; i++){ //Cycle through columns of numbers 2,3,4,5,6,7,8,9,10,11,12
            climbColumn.Add(new List<GameObject>()); //Create a 2D array list
            if( i < colNum/2){ //Check that you are in the first half of the columns
                for(int c = 0; c < ((i * 2) + gameLength) ; c++){  //cycle through rows (2 has 3 rows in a regular game,3 has 5 rows in a regular game... etc)
                   SpawnclimbSpots(i,c);
                }
            }else{
                for(int c = 0; c < (-2 * i + 20 + gameLength) ; c++){ //cycle through rows (12 has 3 rows in a regular game,11 has 5 rows in a regular game... etc)
                   SpawnclimbSpots(i,c);
                }
            }
            
        }
       
        dice = new Die[] //Create 4 dice
        {
            new Die(tempObj),new Die(tempObj),new Die(tempObj)
        };
         for(int i = 0; i < dice.Length; i++){ //assign the 4 die with the proper gameobjects.
            if(dice[i].dieGameObject.tag == "Untagged"){
                dice[i].dieGameObject = GameObject.FindGameObjectWithTag("Die" + (i + 1));
            }
         }
    }
    void SpawnclimbSpots(int i,int c){
        GameObject temp = Instantiate(climbSpot); //create new temp object for climbspot
         if( i < colNum/2){ //Check that you are in the first half of the columns
                    
                    climbColumn[i].Add(temp); //add to list
                    climbColumn[i][c].name = (i.ToString()+c.ToString());
                    climbColumn[i][c].transform.Find("Number").GetComponent<SpriteRenderer>().sprite = numSprites[i];
                   //temp.GetComponentInChildren<SpriteRenderer>().sprite = numSprites[i];
                    climbColumn[i][c].transform.position = new Vector2 (gameObject.transform.position.x - 10 + (i * 2),gameObject.transform.position.y + 1.5f - (c*1 - i) * 1.5f); //set position of newly created object
                    Instantiate(climbColumn[i][c]);//create object
                  
         }else{
                    climbColumn[i].Add(temp);//add to list
                    climbColumn[i][c].name = (i.ToString()+c.ToString());
                    climbColumn[i][c].transform.Find("Number").GetComponent<SpriteRenderer>().sprite = numSprites[i];
                    climbColumn[i][c].transform.position = new Vector2 (gameObject.transform.position.x - 10 + (i * 2),gameObject.transform.position.y + 1.5f  - (c*1 + i - 10)* 1.5f );//set position of newly created object
                    Instantiate(climbColumn[i][c]); //create object
         }
    }

到目前为止,我尝试在自己的函数中创建“临时”对象,以便每次 forloop 运行时都会创建一个新对象,但这没有帮助。我已经没有办法解决它了。

感谢您提供的任何帮助! :D

解决方法

您正在复制参考int main() { std::vector<int> possible_numbers; for (int i = 1; i < 101; i++) { possible_numbers.push_back(i); } } 是一个 class 所以与线

GameObject

不是你想象的GameObject temp = climpSpot;

现在 create new temp object for climpSpottemp 指代同一个 climpSpot


我认为您更愿意首先创建新对象,然后将其添加到相应的集合中

GameObject

并删除其他 GameObject temp = Instantiate(climpSpot); 调用。


另请注意,您的 Instantiate 块非常相似,您应该将它们合并在一起,并且只检查它们之间实际不同的一行:

if -else

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?