我是C#、Unity和这里的新手,这是我的第一篇文章,如果我错过了一些信息,很抱歉。
我在试着用24张牌做一个记忆游戏,你必须找到配对。所以,我有12个预设的卡片对象,它们应该以随机的顺序生成一个网格,我在网上搜索过,对我有用的方法是使用for循环创建网格,然后示例化以在不同的位置生成对象(行和列)直到我得到24个对象。问题是我找不到一种方法来产生12个预制件列表和每个的副本。
我试过寻找不同的方法或者如何示例化一个完整的对象列表,但我只找到了如何创建一个索引和Random.Range列表,但这不是我想要的,因为我需要所有的卡,每个两次。这是我的代码现在的样子。
public class GridManager : MonoBehaviour
{
public int columnLenght;
public int rowLenght;
public float x_Space;
public float y_Space;
public float x_Start;
public float y_Start;
public float z_Start;
public List<GameObject> cardPrefabs;
// Start is called before the first frame update
void Start()
{
for (int i = 0; i < columnLenght * rowLenght; i++)
{
int index = Random.Range(0, cardPrefabs.Count);
Instantiate(cardPrefabs[index], new Vector3(x_Start + (x_Space * (i % columnLenght)), y_Start + (-y_Space * (i / columnLenght)), z_Start + (0)), Quaternion.Euler(270, 0, 0));
}
}
你的建议是什么?哪种方法最简单有效,可以在一个网格中随机生成12个预制件 * 2?
谢谢,顺便说一句,对不起我的英语,它不是我的第一语言。
1条答案
按热度按时间rekjcdws1#
你所写的代码已经差不多了,在你选择并示例化下一张卡片之后,你可以进入列表并删除这张卡片(在index或object本身)。
如果你需要多次重置游戏,我建议你复制一份列表,以保存卡片供下次使用。
关于每张牌需要生成两次,你可以只将每张牌添加到列表中两次。如果你想像程序员一样懒惰,你也可以让计算机以编程方式为你做这件事。
这并不重要,但是你可以改进for循环,通过循环网格的x和y来使它更容易阅读,而不是每次都用一个i来计算坐标。