【发布时间】:2018-07-12 03:22:35
【问题描述】:
我有一个随机世界,其中有一些随机实例化的树。
我使用下面的代码来实例化它们:
GameObject go = Instantiate(treePrefab);
go.name = "Tree";
go.tag = "Wood";
go.layer = 9;
go.transform.position = new Vector3(y + UnityEngine.Random.Range(-0.5f, 0.5f), heightPos, x + UnityEngine.Random.Range(-0.5f, 0.5f));
go.transform.Rotate(0, UnityEngine.Random.Range(0, 360), 0);
x 和 y 是 for 循环的一部分,它遍历我的世界的所有位置(如网格)。
heightPos 是地形在特定点 (x/y) 的当前高度。
我的问题是树的预制件的位置是 0,0,0。
每棵被实例化的树也被设置为 0、0、0。
我使用完全相同的代码来实例化岩石、仙人掌、羽毛、汽车和许多其他东西,而且效果很好。
但它总是在树上失败。
我查看了代码,与其他对象没有区别,除了预制件(当然)。
所以我认为这与预制件的设置有关。
但是我的预制件没有动画师,它不是静态的。
这就是我的树预制在检查器中的样子:
这就是它在场景视图中的样子:
【问题讨论】:
-
你能提供一些关于你调用你显示的代码的信息吗?
-
@RodrigoRodrigues 我刚刚添加了整个代码。它位于一个空的 GameObject 的 Start()-Method 中,它只是用于创建世界。
-
当我使用以下代码实例化它时: GameObject.Instantiate(treeUF1, new Vector3(y + UnityEngine.Random.Range(-0.5f, 0.5f), heightPos, x + UnityEngine.Random.Range (-0.5f, 0.5f)), Quaternion.identity) 它可以工作,但之后我不能改变位置。
-
...hmmm...我不是故意让您发布整个课程代码。您应该提供一个minimal reproducible example,我们任何人都可以在我们的编辑器上进行测试并重现错误的行为。
-
这个预制件还有什么不同吗?它的父母不同吗?没有附加其他脚本?如果您使用 transform.localPosition 而不是 transform.position 来移动它会有所不同吗?