- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 Unity5 中,假设名称为“SomeObject”的游戏对象作为预制件存储在 Assets/Resources/SomeObject.prefab
中,我知道我可以创建预制件的实例,如下所示:
GameObject prefab = Resources.Load<GameObject>("SomeObject");
GameObject instance = GameObject.Instantiate(prefab);
执行后,instance
GameObject 将成为原始“SomeObject”预制件的副本,并将以名称“SomeObject(Clone)”放置在当前事件场景中。
据我了解,GameObject prefab
代表实际的预制 Assets ,对其所做的任何更改(设置名称、添加组件等)都会写入原始预制 Assets ,并且这些即使退出编辑器播放模式,更改仍然存在。
由于所有游戏对象通常都存储在一个场景中,而上例中 GameObject prefab
上的 scene
属性似乎是 Unloaded/Invalid/Unnamed,我到底应该在哪里考虑这个特殊的游戏对象?我似乎能够用它做我能用普通游戏对象做的所有事情,只是在层次结构/场景 View 中不可见。
它实际上处于某种边缘状态,还是特殊的 PseudoScene?它似乎通过 LoadSceneMode.Single
场景变化持续存在,但不像特殊的 DontDestroyOnLoad
场景,对象在传递到 GameObject.DontDestroyOnLoad(.. .)
.
在上面的例子中,prefab
和 instance
之间是否还有其他值得注意的区别,除了生命周期变化、无效场景和彼此不同的对象(有不同的 GetInstanceID()
等)?
由于在 prefab
上调用 GameObject.Instantiate(...)
会产生 在有效场景中的游戏对象,因此有什么方法可以手动创建处于类似“无场景”状态的游戏对象?我知道 Unity 打算让所有游戏对象都出现在场景中,所以这纯粹是一个学术问题。
我试过查看 documentation的 functions involved ,但没有人深入了解当您在预制资源上调用 Resources.Load
时具体发生了什么的技术细节。
最佳答案
1.Where exactly should I consider this special GameObject to be?
它位于单独的文件中,未在场景中引用。一次Resources.Load<GameObject>("SomeObject");
被调用,在GameObject.Instantiate
时加载到内存中等待使用被称为。
如果声明为public GameObject prefab;
并从编辑器而不是 GameObject prefab Resources.Load<GameObject>("SomeObject");
分配,它会在场景加载时自动加载到内存中。
2.Are there any other noteworthy differences between prefab and object?
是的。
预制件不能用 Destroy
销毁或 DestroyObject
功能。它必须用 DestroyImmediate
销毁通过传递函数 true
其第二个论点:DestroyImmediate(prefab, true);
3.Is there any way to manually create GameObjects that are in a similar 'no scene' state?
不,没有办法手动创建处于类似“无场景”状态的游戏对象。
尽管您可以伪造它。
最接近的是通过修改游戏对象的 hideFlags
使游戏对象在编辑器的层次结构 和检查器 选项卡中不可见。变量然后停用该游戏对象。
GameObject obj = new GameObject("SomeObject");
obj.hideFlags = HideFlags.HideInHierarchy | HideFlags.HideInInspector;
之后,停用游戏对象:
obj.SetActive(false);
现在,GameObject 在编辑器中是不可见的,在场景和游戏 View 中也是不可见的。
预制件和典型的游戏对象之间确实没有太大区别。 Prefab 只是一个容纳 GameObject 的容器,以便它可以在场景之间重复使用和共享。修改一个预制件将更新它的任何实例。
想象一下,当场景中有数百个相同类型的游戏对象并且需要修改所有这些对象时。使用预制件,您只需修改其中一个或仅修改预制件,然后单击应用 以更新其他实例。这是您唯一应该想到的预制件。
关于c# - 非实例化加载预制件与实例化预制件相比如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44559004/
当涉及到 UI 设计时,我通常不关心自定义样式(外观方面),我不是一个艺术家,我讨厌尝试想出有趣的配色方案等。是否有任何预制 WPF 样式和/或控件模板的在线存储库?我本可以发誓我以前见过一个,但我现
我正在尝试让 premake4 helloworld c++ 工作但是在使用 premake 创建 makefile 后调用带有 release config 的 make 时会出错。 (我在 osx
我是一名优秀的程序员,十分优秀!