我已经在我的统一程序中创建了一堆这样的多维数据集:

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()中执行此操作可能还可以,但不会显示在我也想要的场景窗口中。

有小费吗?

最佳答案

创建另一个GameObject并将多维数据集作为其父级。使用addComponentTextMesh添加到多维数据集下的新GameObject中。将多维数据集的可能性分配给TextMesh,然后设置yTextMesh a-xis,使其位于顶部立方体。您还需要使textMesh.anchortextMesh.alignment居中居中,以便TextMesh与立方体一起定位。根据多维数据集的大小,您可能需要调整textOffset变量。在不缩放多维数据集的情况下,它对我而言效果很好。如果对您不起作用,请像缩放多维数据集一样缩放TextMesh的缩放比例。

int textOffset = 2;
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 CODE//////////////////////

        //Create new GameObject
        GameObject childObj = new GameObject();

        //Make block to be parent of this gameobject
        childObj.transform.parent = block.transform;
        childObj.name = "Text Holder";

        //Create TextMesh and modify its properties
        TextMesh textMesh = childObj.AddComponent<TextMesh>();
        textMesh.text = "Blah Blah Blah";
        textMesh.characterSize = 1;

        //Set postion of the TextMesh with offset
        textMesh.anchor = TextAnchor.MiddleCenter;
        textMesh.alignment = TextAlignment.Center;
        textMesh.transform.position = new Vector3(block.transform.position.x,  block.transform.position.y + textOffset, block.transform.position.z);

   }
}

10-05 18:26