基于单词随机实例化

Instantiating at random based on word

本文关键字:实例化 随机 于单词      更新时间:2023-10-16

我有一个word =" cat"我有26个字母前a -z-预制阵列我想随机从预制片实例化6个预制因此b,l,t,c,a,t-以任何随机顺序但是我需要它包括构成cat

一词的字母

我的第一个想法是使用词典/哈希图将cat一词映射到数组中的位置,即c = [2] a = [0] t []但是hashmap/词典仅采用一个键值对,但我为它提供了一个以上的值所需的3个字母

这是在Unity中编程的

public GameObject[] letters;
void Start() {
    int x;
    /* for loop execution */
    for (x = 0; x < 5; x = x + 1)
    {
        CreateCubes();
    }
}
     public void CreateCubes()
    {
        GameObject obj = Instantiate(letters[Random.Range(0, 26)]);
        obj.transform.position = new Vector3(
     );

假设您在GameObject[]数组中都有所有预制,您可以使用它自动填充字典

public GameObject[] prefabs = new GameObject[26];
private Dictionary<char, GameObject> CharToPrefab = new Dictionary<char, GameObject>(26);
private void Start()
{
    for (var i = 0; i < 27; i++)
    {
        // add 0 to 26 to the start character A
        // results in A-Z
        CharToPrefab[(char)('A' + i)] = prefabs[i];
    }
}

您可以通过调用

来访问某个预制
CharToPrefab[character];

用于生成实例(最简单的版本而无需考虑任何双打),您可以做例如。

public void RandomLetters(string word)
{
    // 1. spawn the minimum required letters to build the word
    foreach (var letter in word)
    {
        var obj = Instantiate(CharToPrefab[letter]);
        // maybe use obj for something e.g. shuffel all instantiated objects positions
    }
    // 2. fill the rest with random letters
    // assuming always same amount as word letters
    var rand = new System.Random();
    foreach (var letter in word)
    {
        // pics a number from 0 to 26
        // and adds it to the char -> results in A-Z
        var randomChar = (char)('A' + rand.Next(0, 27));
        var obj = Instantiate(CharToPrefab[randomChar]);
        // maybe use obj for something e.g. shuffel all instantiated objects positions
    }
}