Unity 预制件的行为不同,具体取决于是将它们静态拖动到场景中还是让它们由代码动态生成

Posted

技术标签:

【中文标题】Unity 预制件的行为不同,具体取决于是将它们静态拖动到场景中还是让它们由代码动态生成【英文标题】:Unity prefabs acting differently based on whether dragging them into the scene statically or having them dynamically generated by code 【发布时间】:2017-08-27 20:07:26 【问题描述】:

如果我像这样实例化一个预制件:

GameObject asteroid = GameObject.Instantiate(thing2spawn);
//then set the location and some other stuff

预制小行星的碰撞根本没有记录,但如果我只是将小行星拖到场景中,碰撞就会完全按照预期工作。

【问题讨论】:

【参考方案1】:

想通了。

我的小行星物体有两个子物体,其中包含做不同事情的对撞机。击中小行星的某个部分会治愈你,而击中另一部分会伤害你。这两个孩子有刚体组件,所以当我在代码中设置小行星(父对象)的速度时,这两个孩子不会随之移动。所以看起来对撞机似乎没有工作,而实际上它们只是被留在了其他地方。从孩子身上移除刚体解决了这个问题。

很奇怪。

【讨论】:

如你所见,你不能真正将刚体作为另一个刚体的孩子,否则你会遇到这样的随机非工作行为。

以上是关于Unity 预制件的行为不同,具体取决于是将它们静态拖动到场景中还是让它们由代码动态生成的主要内容,如果未能解决你的问题,请参考以下文章

Unity UI 缩放和实例化预制件

Unity之自动生成预制体脚本

Unity之自动生成预制体脚本

如何将 Unity3d 预制文件批量导出为 FBX 格式?

Unity2D:在订单中禁用实例化的预制件

Unity:使用动画师实例化预制件