gpt4 book ai didi

c# - 在 Unity C# 中实例化游戏对象列表

转载 作者:太空宇宙 更新时间:2023-11-03 21:01:55 24 4
gpt4 key购买 nike

如何使用 C# 在 Unity3D 中实例化游戏对象列表?我在检查器窗口中手动用预制件填充列表。

enter image description here

下面是我在 Deck.cs 中编写的代码,但我得到“对象引用未设置为对象的实例”。如果您有一个数组解决方案,我们也将不胜感激。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using UnityEngine.UI;

namespace Assets
{
class Deck:MonoBehaviour
{
public List<GameObject> deck;
public void Fill()
{
GameObject c1 = Instantiate(deck[0]);
GameObject c2 = Instantiate(deck[1]);
GameObject c3 = Instantiate(deck[2]);
GameObject c4 = Instantiate(deck[3]);
GameObject c5 = Instantiate(deck[4]);
GameObject c6 = Instantiate(deck[5]);
}

}
}

我也试过用一个数组来做,我得到“你想实例化的对象是空的”

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEngine;
using UnityEngine.UI;

namespace Assets
{
class Deck:MonoBehaviour
{
public GameObject card1;
public GameObject card2;
public GameObject card3;
public GameObject card4;
public GameObject card5;
public GameObject card6;

public GameObject[] deck;

public void Start ()
{
deck = new GameObject[5];
GameObject c1 = Instantiate(card1) as GameObject;
GameObject c2 = Instantiate(card2) as GameObject;
GameObject c3 = Instantiate(card3) as GameObject;
GameObject c4 = Instantiate(card4) as GameObject;
GameObject c5 = Instantiate(card5) as GameObject;
GameObject c6 = Instantiate(card6) as GameObject;
}

}
}

最佳答案

好吧,考虑到您的评论,并且您提供的第一个脚本可以完美无误地运行(它应该:没有理由返回错误),我觉得您是 Unity 的新手。

因此,我建议您先阅读 Unity 教程(它们制作精良,可以帮助您了解引擎的基础知识)。您可以找到 Roll-a-ball tutorial here .

关于您的问题:

1- 在第一个脚本中,Fill()方法没有在任何地方被调用,你必须做这样的事情:

private void Start()
{
Fill();
}

2- 这个Start()方法来自 MonoBehaviour父类(以及每帧调用的 Update() 方法)并在场景开始时调用一次。看this chart了解统一流程是如何制作的。

3- 使用 List<GameObject>GameObject[]一切都取决于您的情况:如果集合的大小要改变,请查看列表。否则建议使用数组。

4- 考虑到您的脚本,我猜它应该如下所示:

namespace Assets
{
class Deck : MonoBehaviour
{
[SerializeField]
private GameObject[] deck;

private GameObject[] instanciatedObjects;

private void Start()
{
Fill();
}

public void Fill()
{
instanciatedObjects = new GameObject[deck.Length];
for (int i = 0; i < deck.Lenght; i++)
{
instanciatedObjects[i] = Instanciate(deck[i]) as GameObject;
}
}
}
}

如果需要,您当然仍然可以使用列表:)

编辑:
如果您想使用列表,您只需:

  • 更改private GameObject[] instanciatedObjects;private List<GameObject> instanciatedObjects;
  • 替换instanciatedObjects = new GameObject[deck.Length];通过 instanciatedObjects = new List<GameObject>();
  • 替换instanciatedObjects[i] = Instanciated(deck[i]) as GameObject;通过 instanciateObjects.Add(Instanciated(deck[i]) as GameObject);

希望这对您有所帮助,

关于c# - 在 Unity C# 中实例化游戏对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44701073/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com