游戏开发小结——使用小控件在运行unity3d项目实时显示网格

我正在开发一个类似于地下城的游戏,使用程序生成的网格和基于网格的移动系统。
我需要检查我的控制器是否正在使用正确的单元格,以及我的角色网格是否被适当地定位,所以我尝试使用运行模式(play-mode)网格进行检查。
在这里插入图片描述

Unity在编辑器中没有为运行模式(play-mode)提供网格可视化器,因此您必须使用自己的代码系统。
主要有三种主要可能性:

  • 用调试(debug)网格材质球替换地面的材质球(material)
  • 编写一个着色器(shader)
  • 使用Gizmos
    在我的情况下,我决定使用Gizmos,因为我只对编辑器运行模式(play-mode)感兴趣。逻辑很简单:创建一个Monobehaviour并添加一个OnDrawGizmos函数。如果您想要,也可以将此函数添加到场景中的任何其他Monobehaviour中。然后,我们将不断迭代并以网格格式绘制线条。
public class GridDraw: Monobehaviour {
  public int minX;
  public int maxX;
  public int minY;
  public int maxY;


  void OnDrawGizmos() {
    Gizmos.color = Color.white;
    
    Vector3 pos0 = new Vector3();
    Vector3 pos1 = new Vector3();
    for (int i = -minX; i < maxX; i++)
    {
        pos0.x = i;
        pos0.z = -minY;
        pos1.x = i;
        pos1.z = maxY;
        Gizmos.DrawLine(
            pos0,
            pos1
        );
        /*for (int j = 0; j < 100; j++) {

        }*/
    }

    for (int i = -minY; i < maxY; i++)
    {
        pos0.x = -minX;
        pos0.z = i;
        pos1.x = maxX;
        pos1.z = i;
        Gizmos.DrawLine(
            pos0,
            pos1
        );
}  

这就是我们的网格!我还会在我的角色所在的当前方格上画一个正方形。将此代码添加到您的控制器脚本中。

void OnDrawGizmos() {
  Gizmos.color = Color.cyan;
  Vector3 pos = new Vector3(Mathf.RoundToInt(transform.position.x), 0f, Mathf.RoundToInt(transform.position.z));
  Gizmos.DrawCube(pos + new Vector3(-0.5f, 0.5f, -0.5f), new Vector3(1f, 1f, 1f));

} 

添加的Vector3偏移量将位置偏移以使其位于单元格中心,以便适当地绘制正方形

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐