【问题标题】:Can't change transform.position of Instantiated GameObject无法更改实例化游戏对象的 transform.position
【发布时间】: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);

xy 是 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 来移动它会有所不同吗?

标签: c# unity3d


【解决方案1】:

您可以创建另一个游戏对象并将此实例作为该游戏对象的子对象,因此即使该实例始终位于 (0, 0, 0),您也可以随时更改父对象的位置。

【讨论】:

  • 我试过了,但同样的问题,它们仍然在 0、0、0 时生成。
  • 可能与标签和图层有关。所有的树都有相同的标签,但其他预制件有不同的标签。也许有一个代码可以操纵标记为“木头”或类似内容的对象的位置。只需检查此预制件与其他预制件不同的不同之处
  • 我的游戏中有四棵不同的树,其他三棵工作正常,并且与不工作的那棵具有相同的标签和层。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多