我在Unity中遇到了一个我想解决的c#脚本问题。
这就是我想要实现的目标:
这是我到目前为止所做的:
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);
}
}
}
一些注意事项:
这是我想要解决问题的方向:
GameObject[0] = A 3D Character prefab
GameObject[1] = B 3D Character prefab
有没有更简单的方法来做到这一点,我错过了?
我想获得一些方向/建议或一些示例代码,我可以检查类似问题。
答案 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);
}
}