关于unity3d中prefabs的问题 初学者

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于unity3d中prefabs的问题 初学者相关的知识,希望对你有一定的参考价值。

假如我要用若干个砖块垒砌一面墙 ,这个砖块应该设置成prefabs没问题,如果不设置成prefabs就是单纯的cube拉倒脚本里也能正常运行,这样理论上也对么?还是说一定得用prefabs.

顺便再问一句,游戏运行后在scene中不仅实例化的砖块会出现,这个prefabs的cube也出现了,那它是实例化了么?

参考技术A prefab只是一个文件,不会出现在游戏场景里。

prefab只有两种使用方法,一是在代码里调用Instantiate;另一种是拖到场景里产生一个和他关联的物体(在Hierarchy里显示蓝色)。

后一种情况可以发生多次,也就是说你这面墙上的砖都可以在scene里创建,不需要代码。而且他们都是和prefab关联的,你在prefab文件上的修改会在所有砖块上生效。还有一种方法是在场景里随便选个砖块,修改完后点apply,效果是一样的。

关于你最后一个问题,你说的"这个prefabs的cube也出现了"其实并不是prefab,是你用来创建prefab的那个物体,完全可以删了。追问

谢谢你的回答! 那如果我想让这面墙刚好落在新创建的地面上应该怎么设置坐标嘞?

追答

最简单的办法是把调整地面位置使得y=0就是地面,并把砖块的原点设置到底部,这样的话只要砖块的transform.position.y是0它就在地面上。

本回答被提问者和网友采纳

unity, 保存prefab时material丢失问题

在程序运行时用replacePrefab(gameObj,prefab)或createPrefab(gameObj,prefab)保存prefab,遇到保存出来的prefab中material丢失的问题。

最后查到原因是gameObj的material成员引用的是一个material实例,而非material资源,所以保存成prefab后引用会丢失。

而导致gameObj的material成员实例化的原因是某处调用了gameObj.meshRenderer.material。

 

以上是关于关于unity3d中prefabs的问题 初学者的主要内容,如果未能解决你的问题,请参考以下文章

通过代码 (C#) 在 Unity3D 中应用 Prefab 的实例覆盖

Unity3d学习 预设体(prefab)的一些理解

Unity3D的prefab

为Unity3D创建素材(3):预设物体(Prefab)

unity3d开发2d游戏中Assetbundle有啥作用

Unity3D研究院编辑器之不实例化Prefab获取删除更新组件(十五)