2017-05-31 12 views
0

私は解決したいUnityのC#スクリプティングの問題を抱えています。Unity 3DでC#スクリプトを使用してカスタム3D名を作成する方法

  1. は、各文字の入力フィールド
  2. からのInputField
  3. ゲット文字で名前を入力します:すでに作成したキャラクターの3Dゲームオブジェクトを設定

    この

    は私が達成したいものです階層
  4. SetCharacterPositionは隣同士にので、彼らは
  5. この順でSetMaterial(ブルー、グリーン、レッド、イエロー)の名前を作成し、
  6. 上で開始することができます

    1. 階層
    2. に、各文字の3Dプレハブを作成し、ロードされた
    3. を作成:
    4. は、これは私がこれまでに行ったことある

    画面上で3Dカラーのように与えられた入力名を見ますInputFieldとボタン(+スクリプト)を持つGUI

  7. 名前を取得し、文字に分割するためにボタンスクリプト(button_scr)を作成します。

GUI The setup so far 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. 名前が母音にアクセント記号(A、E、Iを持つことができます、Ó、Ú)
  2. 名前には「ñ」文字を使用できます

私は問題を解決するために、いくつかの方向を取得したいと思い場所です:

  • 私はそうのような各文字のすべての 参照してゲームオブジェクトの配列を作成し、充填と考えています
  • GameObject[0] = A 3D Character prefab
  • GameObject[1] = B 3D Character prefab
  • その後にセットアップするために、ゲームオブジェクトの配列内の名前の文字を見つけて、コピーを作成するforループを作成順番(ブルー、グリーン、レッド、イエロー)での3Dキャラクターをゲーム
  • 設定した3D文字位置
  • セットの材質

は、私が欠けている、これを行うための任意の簡単な方法はありますか?

私は類似の問題解決を確認できるいくつかのオリエンテーション/アドバイスやサンプルコードを入手したいと思います。

+0

://コードレビュー.stackexchange.com /)。あなたが解決しようとしている特定の問題がなければ、私は後者を考えています。 – Draco18s

答えて

2

これは簡単な解決策です。未検証。私は団結していません。ちょうどあなたのアイデアを持っている。

はい。最適化のために配列内のすべての文字を割り当てる方が良いです。また、覚醒中のすべての文字()

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); 
} 

}を無効

私はあなたの質問が広すぎるおよび/または[codereview.SE](httpsに移行すべきかどうかを決定しようとしている
関連する問題