如何使用Unity 3D中的c#脚本创建自定义3D名称

时间:2017-05-31 09:08:58

标签: c# unity3d 3d unity5 gameobject

我在Unity中遇到了一个我想解决的c#脚本问题。

这就是我想要实现的目标:

  1. 在InputField上输入名称
  2. 从输入字段中获取字符
  3. 对于每个角色:设置已在层次结构中创建的角色的3D游戏对象
  4. SetCharacterPosition彼此相邻,以便他们可以创建名称
  5. 按此顺序设置SetMaterial(蓝色,绿色,红色,黄色)并重新开始
  6. 在屏幕上以3D彩色方式查看给定的输入名称
  7. 这是我到目前为止所做的:

    1. 创建每个角色的3D预制件并加载到层次结构
    2. 使用InputField和Button(+ Script)
    3. 创建GUI
    4. 创建一个按钮脚本(button_scr)以获取名称并拆分为字符
    5. 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. 名称可以有一些重复的字符
      2. 名字可以在元音上有重音符号(Á,É,Í,Ó,Ú)
      3. 姓名可以包含“ñ”字符
      4. 这是我想要解决问题的方向:

        • 我考虑用all创建和填充GameObject数组 每个角色的引用都是这样的:
        • GameObject[0] = A 3D Character prefab
        • GameObject[1] = B 3D Character prefab
        • 然后创建一个for循环以在GameObject数组中找到名称字符并制作副本以便在游戏中进行设置
        • 设置3D角色位置
        • 按顺序(蓝色,绿色,红色,黄色)将材质设置为3D角色

        有没有更简单的方法来做到这一点,我错过了?

        我想获得一些方向/建议或一些示例代码,我可以检查类似问题。

1 个答案:

答案 0 :(得分:2)

这是一个快速的解决方案。未经测试。我没有安装统一。只是为了让你有个主意。

是。最好分配一个数组中的所有字母进行优化。同时停用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);  
}

}