在Unity中找到地形的宽度和高度

本文关键字:高度 Unity | 更新日期: 2023-09-27 18:09:20

其他开发者:)

我为RTS摄像机编写了一个脚本,它可以防止摄像机偏离地形(当玩家使用方向键移动摄像机时,可以在另一个脚本中找到,不包括在下面)。

可以看到,在下面的代码中,我已经硬编码了地形的宽度和高度。我希望能够自动检测地形的宽度和高度。

注意:我是Unity和c#的新手,所以如果你知道答案,请提供完整的代码,而不仅仅是片段,ty:)

public class CameraBounder : MonoBehaviour {
int minXBound = 50;
int maxXBound = 50;
int minZBound = 100;
int maxZBound = 200;
int terrainWidth = 500;
int terrainHeight = 500;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
    Debug.Log("X: " + transform.position.x + " Z: " + transform.position.z);
    if (transform.position.x > terrainWidth - maxXBound) {
        transform.position = new Vector3 ((terrainWidth-maxXBound), transform.position.y, transform.position.z);
    } 
    if (transform.position.x < minXBound) {
        transform.position = new Vector3 (minXBound, transform.position.y, transform.position.z);
    }
    if (transform.position.z > terrainHeight - maxZBound) {
        transform.position = new Vector3 (transform.position.x, transform.position.y, (terrainHeight-maxZBound));
    }
    if (transform.position.z < minZBound) {
        transform.position = new Vector3 (transform.position.x, transform.position.y, minZBound);
    }
}

}

在Unity中找到地形的宽度和高度

正如你在评论中所说,你手动生成关卡,一个解决方案是将公共Gameobjects并使用它们的坐标作为点。

然后取这个gameobjects的位置来做你的计算。

public class CameraBounder : MonoBehaviour {
  public GameObject right;
  public Gameobject left;
  public Gameobject top;
  public Gameobject bottom;
  float minXBound;
  float maxXBound;
  float terrainWidth;
  int terrainHeight;
  // Use this for initialization
  void Start () {
     minXBound = left.transform.position.x; 
     maxXBound = right.transform.position.x;
     terrainWidth = maxXBound-minXBound;
     terrainHeigh = top.transform.position.y - bottom.transform.position.y;
     //You get the idea
  }
}

当你在检查器中创建关卡时,你需要在边缘创建空的游戏对象,并通过检查器将其设置为脚本的公共变量。