如何在程序上将文本附加到生成的游戏对象?

时间:2016-04-29 14:06:09

标签: c# unity3d unity5

我在我的团结程序中创建了一堆像这样的立方体:

foreach (Cube cube in cubeList)
{
   if (cube.canStandOn)
   {
      GameObject block;
      block = GameObject.CreatePrimitive(PrimitiveType.Cube);
      block.transform.localScale = new Vector3(0.5f, 0.5f, 0.5f);
      block.transform.position = new Vector3(cube._mPos.x + CubeSize.half, cube._mPos.y + CubeSize.half, cube._mPos.z + CubeSize.half);
      block.GetComponent<Renderer>().material.color = Color.blue;
   }
}

现在我想在 每个 块中添加一个文本,详细说明其位置。多维数据集及其位置可以在每次运行时更改,因此必须以编程方式完成,就像创建块的方式一样。我找不到任何关于Text Mesh的内容似乎是一个不错的方法,但是如果没有先前创建的带有文本网格的游戏对象,则没有找到任何创建的示例。这是在Android应用程序中完成的,因此我无法使用OnGizmos()函数。

OnGUI()中执行此操作可能没问题,但是在场景窗口中也不会出现,这也是我想要的地方。

任何提示?

2 个答案:

答案 0 :(得分:3)

创建另一个GameObject并使该多维数据集成为其父级。使用addComponentTextMesh添加到多维数据集下的新GameObject。将多维数据集的可能性分配给TextMesh,然后设置y的{​​{1}} a-xis这样它就会在多维数据集的顶部。您还需要将TextMeshtextMesh.anchor置于中间的中心位置,以便textMesh.alignment与多维数据集一起定位。根据多维数据集的大小,您可能需要调整TextMesh变量。没有缩放立方体,它在我身边运作良好。如果它不适合您,只需缩放textOffset的比例,就像缩放立方体一样。

TextMesh

答案 1 :(得分:0)

创建一个预制件,其中包含一个带有画布作为子画面的多维数据集(这反过来又包含一个UI文本)。将画布渲染模式设置为World Space。如果全部具有相同的比例,请调整比例。实际上,你实际上创建了一个空的游戏对象,并让立方体和画布成为其中的孩子。

要放置多维数据集,请执行以下操作:

using UnityEngine.UI;     // required for the text component

public GameObject prefabCube;

...

Vector3 cubePos = new Vector3(x, y, z);
GameObject cube = (GameObject)Instantiate(prefabCube, cubePos, Quaternion.identity);
cube.GetComponentInChildren<Text>().text = x + " " + y + " " + z;    // not quite sure if this line is correct
cube.GetComponent<Renderer>().material.color = Color.blue;     // if all blocks have the same color, change this for the prefab directly
// if you use an empty the last has to be
cube.GetComponentInChildren<Renderer>().material.color = Color.blue;

这应该是正确的。