c# - 如何按程序将文本附加到生成的游戏对象?

标签 c# unity-game-engine

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

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

现在我想在每个 block 上方添加一个文本,详细说明其位置。立方体的数量及其位置可能会在每次运行时发生变化,因此必须以编程方式完成,就像创建 block 的方式一样。我在这个 Text Mesh 上找不到任何内容,这似乎是一个不错的方法,但没有找到任何在没有先前创建的带有文本网格的游戏对象的情况下创建的示例。这是在 Android 应用程序中完成的,因此我无法使用 OnGizmos() 函数。

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

有什么建议吗?

最佳答案

创建另一个游戏对象并将立方体作为其父对象。使用addComponent添加TextMesh到立方体下的新游戏对象。将立方体的可能性分配给 TextMesh然后设置y TextMesh 的轴这样它将位于立方体的顶部。您还需要制作 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);

   }
}

关于c# - 如何按程序将文本附加到生成的游戏对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36940452/

相关文章:

unity-game-engine - 当 Unity 应用程序安装并在另一个系统中运行时,不会创建 Log4net 日志文件

c# - 如何将计时器信息从主场景传递到另一个(再试一次)场景?统一C#

c# - 从 Windows Azure 存储检索图像 (Base64String)

c# - 在 C# 中存储查询还是在 Postgres 中使用存储函数?

c# - 路径是目录吗?

c# - 如何通过脚本更改 Material 的发射?

c# - 如果在 C# 中第一次运行程序,则显示消息框

c# - 表达式树库和枚举之间的关系

unity-game-engine - Unity Navmesh Agent 在地形上的行为

c# - 如何获得 google-cardboard 相机 FOV?