【问题标题】:Find the Terrain Width and Height in Unity在 Unity 中查找地形宽度和高度
【发布时间】:2016-09-29 10:23:27
【问题描述】:

各位开发者:)

我为 RTS 摄像机编写了一个脚本,以防止摄像机离开地形(当玩家使用 WASD/箭头键移动摄像机时,在另一个脚本中找到,未包含在下面)。

如您所见,在下面的代码中,我硬编码了地形的宽度和高度。我希望能够自动检测地形的宽度和高度。

注意:我是 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);
    }
}

}

【问题讨论】:

  • 你是否通过脚本自动生成地形?
  • @cj93 不,我手动创建地形。但我希望能够将脚本用于多个场景/关卡,而不必为每个场景更改脚本中的宽度和高度。
  • 您尝试过使用 TerrainData.size 吗? docs.unity3d.com/ScriptReference/TerrainData-size.html
  • 是的,但我不知道如何使用它。就像我说的,我是新手 :( 您能否提供从 TerrainData 获取地形宽度和高度的代码行,并将其分配给我的自定义变量 terrainWidth 和 terrainHeight?
  • 似乎 TerrainData.size.y 可以返回最大高度点。但是,我从来没有使用过它......你也可以尝试一下,看看它返回什么值。

标签: c# unity3d camera terrain


【解决方案1】:

正如您在评论中所说,您手动生成关卡,因此一种解决方案是公开游戏对象并将其坐标用作点。

然后拿这个游戏对象的位置来做你的计算。

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

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

【讨论】:

    猜你喜欢
    • 2021-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 2012-04-30
    • 2011-06-12
    • 1970-01-01
    • 2016-01-05
    相关资源
    最近更新 更多