在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);
}
}
}
正如你在评论中所说,你手动生成关卡,一个解决方案是将公共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
}
}
当你在检查器中创建关卡时,你需要在边缘创建空的游戏对象,并通过检查器将其设置为脚本的公共变量。