Как создать собственное 3D-имя с помощью скрипта c # в Unity 3D

Я застрял на проблеме написания сценариев C # в Unity, которую я хотел бы решить.

Вот чего я хочу добиться:

  1. Введите имя в поле ввода
  2. Получить символы из поля ввода
  3. Для каждого персонажа: установите 3D GameObject персонажа, уже созданного в Иерархии.
  4. SetCharacterPosition рядом друг с другом, чтобы они могли создать имя
  5. Установите материал в этом порядке (синий, зеленый, красный, желтый) и начните заново.
  6. Просмотр заданного имени входа в цветном 3D-режиме на экране

Вот что я сделал до сих пор:

  1. Созданы 3D префабы каждого персонажа и загружены в иерархию.
  2. Создал графический интерфейс с InputField и кнопкой (+ Script)
  3. Создайте скрипт кнопки (button_scr), чтобы получить имя и разбить его на символы

GUI  Все настройки SCRIPT button_scr

public class button_scr : MonoBehaviour 
{
    public Button myButton;
    public InputField un;
    public GameObject go;

    void Start () 
    {
        myButton = GetComponent<Button>();
        myButton.onClick.AddListener(ProcessText);
    }

    void ProcessText()
    {
        Debug.Log("Your name is : "+un.text);
        getCharacters(un.text);
    }

    void getCharacters(string text)
    {
        foreach (char c in text) 
        {
            go = GameObject.Find(""+char.ToUpper(c));
            go.SetActive (true);
            // setPosicionNext2EachOther
            // setColoredMaterial(Blue,Green,Red,Yellow) in this order 
            Debug.Log("GameObject name Log: "+go.name);     
        }
    }
}

Некоторые соображения:

  1. Имена могут иметь несколько повторяющихся символов
  2. Имена могут иметь знаки ударения на гласных (Á, É, Í, Ó, Ú).
  3. Имена могут содержать символ "ñ".

Вот где я хотел бы немного сориентироваться, чтобы решить проблему:

  • Я подумал о создании и заполнении массива GameObject со всеми ссылками на каждого персонажа следующим образом:
  • GameObject[0] = A 3D Character prefab
  • GameObject[1] = B 3D Character prefab
  • Затем создайте цикл for, чтобы найти имя персонажа в массиве GameObject и сделать копию для настройки в игре.
  • Установить положение 3D-символа
  • Установите Материал для 3D-символа в последовательном порядке (синий, зеленый, красный, желтый)

Есть ли более простой способ сделать это, что мне не хватает?

Я хотел бы получить некоторую ориентацию / совет или образец кода, где я могу проверить решение аналогичной проблемы.


person Iker    schedule 31.05.2017    source источник
comment
Я пытаюсь решить, не является ли ваш вопрос слишком общим и / или его следует перенести на codereview.SE. Я думаю последнее, если у вас нет конкретной проблемы, которую вы пытаетесь решить.   -  person Draco18s no longer trusts SE    schedule 31.05.2017


Ответы (1)


это быстрое решение. не испытано. У меня нет единства. просто для того, чтобы у вас была идея.

да. Лучше назначить все буквы в массиве для оптимизации. Также отключите все буквы в Awake ()

public Material materials[]; // assign the materials in the order you want

public void getCharacters (string name)
{
int materialIndex = 0;

for (int i = 0; i < text.lenght; i++)
{
    char c = char.ToUpper(text[i]);
    GameObject go = GameObject.Find("" + c);
    go.SetActive (true);

    go.transform.position = new Vector3(i, 0, 0); // place the letters in the x axis separated by one meter

    // change the material
    go.GetCOmponent<Renderer>().sharedMaterial = materials[materialIndex];      
    materialIndex = (materialIndex + 1) % materials.length; // cycle the materials

    // setPosicionNext2EachOther
    // setColoredMaterial(Blue,Green,Red,Yellow) in this order 
    //Debug.Log("GameObject name Log: "+go.name);  
}

}

person COBO    schedule 31.05.2017