c# - 使用 TreeInstance 将树添加到地形 C#
问题描述
我尝试使用以下代码将树木添加到我的地形中:
// Create Trees
for (int x = 0; x < terrainData.heightmapWidth; x++)
{
for (int z = 0; z < terrainData.heightmapWidth; z++)
{
if (GetBiome(x, z) == "Grasland")
{
int r = UnityEngine.Random.Range(0, 500);
if (r == 0)
{
Terrain terrain = GetComponent<Terrain>();
TreeInstance treeTemp = new TreeInstance();
treeTemp.position = new Vector3(x, 0, z);
treeTemp.prototypeIndex = 0;
treeTemp.widthScale = 1f;
treeTemp.heightScale = 1f;
treeTemp.color = Color.white;
treeTemp.lightmapColor = Color.white;
terrain.AddTreeInstance(treeTemp);
terrain.Flush();
}
}
}
}
该功能GetBiome()
正常工作,我通过将树作为游戏对象进行检查,它工作正常。
有什么我没有想到的吗?
因为没有生成一棵树。
我要生成的树设置在 PaintTrees 下:
解决方案
请阅读我的注释作为下面的评论,我希望这能解释并解决问题。我已经统一对此进行了测试以确认。
// Create Trees
//make these float otherwise your position math below is truncated
for (float x = 0; x < terrainData.heightmapWidth; x++)
{
//heightmapHeight not heightmapWidth
for (float z = 0; z < terrainData.heightmapHeight; z++)
{
Terrain terrain = GetComponent<Terrain>();
int r = UnityEngine.Random.Range(0, 500);
if (r == 0)
{
TreeInstance treeTemp = new TreeInstance
//position is local and expects value between 0 and 1
treeTemp.position = new Vector3(x / terrainData.heightmapWidth, 0, z / terrainData.heightmapHeight),
treeTemp.prototypeIndex = 0;
treeTemp.widthScale = 1f;
treeTemp.heightScale = 1f;
treeTemp.color = Color.white;
treeTemp.lightmapColor = Color.white;
terrain.AddTreeInstance(treeTemp);
terrain.Flush();
}
}
}
推荐阅读
- elasticsearch - 有没有办法在弹性搜索中使用 cat API 排除特定索引?
- python - 如何在 Python 中合并两个 IO 流?
- python - 如何在python中加入两个json文件而不是嵌套for循环
- javascript - 无法通过 whatsapp api 共享 html2canvas 转换后的图像
- android - 通知自定义声音在前台播放,但在后台应用程序时不播放
- sparql - DBpedia SPARQL 球员为特定球队效力的职业生涯
- c# - 每当在asp.net中触发点击事件时,将行一一放入gridView
- android - Android 9 Pie 上的省电模式(和夜间模式)重新启动整个活动,如何防止这种情况发生?
- angular - 在 selectAll 后尝试加入时如何解决“.join 不是函数”?
- java - 打开任何协议的 url 链接(不仅是 http 和 https)