首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TreeInstance将树添加到Terrain C#

使用TreeInstance将树添加到Terrain C#
EN

Stack Overflow用户
提问于 2018-12-21 14:57:57
回答 2查看 1.3K关注 0票数 2

我尝试使用以下代码将树添加到我的地形中:

代码语言:javascript
复制
// 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()运行正常,我通过将树设置为GameObjects进行了检查,它运行得很好。

是不是少了什么我没想到的东西?

因为没有生成一棵树。

我想要生成的树设置在PaintTrees下:

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-21 15:54:33

请阅读我下面的注释,我希望这能解释并解决这个问题。我已经统一测试了这一点以确认。

代码语言:javascript
复制
// 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();
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2020-06-19 16:23:17

有点晚了,但是,不是

代码语言:javascript
复制
int r = UnityEngine.Random.Range(0, 500);
        if (r == 0)

代码语言:javascript
复制
int r = UnityEngine.Random.Range(0, 500);
        if (r >= 0 && <= 1) 

检查范围。因为你正在检查一个不可能的数字,所以它总是很接近,但永远不会是0例如0.000230...如果你需要像我一样计算它的底数或检查范围

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53880451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档