如何使用脚本在Unity3d中从Terrain更改树的顶点?

时间:2015-12-10 12:12:25

标签: c# unity3d tree mesh vertices

我已经通过编辑器在地形上放置了一些树木。我有一个通过树木的物体,当这个物体与某些树碰撞时,我想改变它的顶点。

void OnTriggerEnter (Collider col) {
    DestroyableTree tree = col.gameObject.GetComponent<DestroyableTree>();

    if (tree == null)
        return;

    Mesh mesh = tree.GetComponent<MeshFilter>().mesh;
    Vector3[] vertices = mesh.vertices;

    for (var i = 0; i < 100; i++){  // 100 just random number, as well as 50 bellow
        vertices[i].x = 50;
        vertices[i].z = 50;
    }
    mesh.vertices = vertices;
    mesh.RecalculateBounds ();
    mesh.RecalculateNormals ();
    tree.GetComponent<MeshFilter> ().mesh = mesh;

    //tree.UpdadeMesh(tree, mesh);
    //tree.Delete();
}

DestroyableTree来自http://rene.klacan.sk/unity3d/games/2014/10/28/destroyable-terrain-trees-in-unity/

取消注释时tree.Delete()让我确定我正在尝试编辑正确的树。 当我调试时,我可以看到网格的顶点已经改变,但为什么它们不会在游戏场景的运行期间更新?

编辑:这可能是因为我正在访问胶囊组件的网格而不是树本身。我如何访问地形上的树网格(不一定是上面显示的代码)?

1 个答案:

答案 0 :(得分:0)

使用上面链接中提供的代码并对其进行了修改。虽然它没有解决根本问题,但为什么我不得不首先提出这个问题:(

所以这就是我如何做到的,简单:在RenéKlačan所写的班级DestroyableTree中,我添加了额外的字段public TreeInstance treeInstance;,在标记语句之后(在下面的图片中)通过添加{ {1}}: René Klačan's code 之后,我必须在我的代码中使用tree.treeInstance = treeInstance;在问题的开始时到达树的网格。我希望有人会觉得这很有用。