我正在团结一场游戏。在游戏中,随着玩家向前移动,等级会在场景中随机生成新对象。是否需要删除以前生成的随机等级对象? (在Unity中)
那么当玩家向前移动时,是否有必要删除/销毁先前生成的物体?
它会改善内存使用情况吗?
在此先感谢。
我正在团结一场游戏。在游戏中,随着玩家向前移动,等级会在场景中随机生成新对象。是否需要删除以前生成的随机等级对象? (在Unity中)
那么当玩家向前移动时,是否有必要删除/销毁先前生成的物体?
它会改善内存使用情况吗?
在此先感谢。
除非你是初学者,并且只是乱搞Unity3D,然后生成并销毁对象。如果你计划发布任何游戏,那不是。不要这样做!
那么当玩家向前移动时,是否需要删除/销毁先前生成的物体 ?
它会改善内存使用情况吗?
如果您生成一个新对象或者内存不足,则需要删除/销毁对象。 但是生成和删除/销毁GameObjects会减慢你的游戏速度,因为这会调用垃圾回收器。
正确地做到这一点的方法是使用称为对象池的东西。 您必须创建自己的对象池类。
它很长的解释,但我会尽量保持它的简短。
对象池的工作原理是再使用游戏对象,而不是实例化/生成新的对象和销毁旧的。
有很多方法可以做到这一点,但我会谈论我做到这一点。
找出假设在场景中的最大物体。 让你的枪使用7颗子弹,你需要20个子弹在你的FPS游戏的游泳池。
在游戏开始之前,在场景中创建20个子弹,并通过禁用所有子弹来隐藏它们。
在start
或Awake
功能,得到所有的子弹性能那会变化当你拍它。 变换和旋转/四元数是通常会改变的事情之一。
Vector3 defaultPosition = bullet.transform.position; Quaternion defaultRotation = bullet.transform.rotation;
有一个bool变量来确定项目符号何时被使用,以便它不能被重新分配,直到它不再被使用。我们可以称之为bool isInUse = false
;
使重置功能重置子弹。里面的复位,所有你所要做的就是重置那些改变他们默认值值拍摄,然后禁用子弹时。还将isInUse
设置为false。 例如,
空隙复位{
bullet.transform.position = defaultPosition;
bullet.transform.rotation = defaultRotation;
bullet.SetActive(false);
isInUse = false;
}
创建一个名为 “WaitForReset” 协程函数,确定当子弹应复位。 您可以根据距离重置项目符号,它已被移除,它已被移除多少次后,或者何时移除与另一个GameObject碰撞。这是由你来实现的。我下面有一个将等待5秒钟,然后重置GameObject /项目符号。
`的IEnumerator WaitForReset(){
收率返回新WaitForSeconds(5);
reset();
}`
要拍摄子弹,检查如果20发子弹财产isInUse
之一是false
,然后加载第一一个返回false
。如果当前项目符号是InUse,请转到下一个项目。一旦你射击子弹,调用WaitForReset()函数,以便子弹可以稍后重置。
StartCoroutine(WaitForReset());
这将会一遍又一遍地发生,无需分配和释放内存,从而提高游戏速度。
解决方案为大型独特模型在现场如建筑物。 假设你有大对象与他们的HQ纹理,池可能不是最好的方式去做这件事。
详细程度(LOD)应该被使用。所以基本上你会为每个大型游戏对象创建多个3D模型。高细节的物体,中细节,低细节,真的是真正的细节多边形。
当你远离那个物体时,Unity只会显示低详细的3D模型。只要您靠近物体,Unity就会自动将3D模型与高度详细的3D模型交换。这提高了游戏的内存和速度。要了解如何设置Google的“细节层次统一”并观看视频。它需要视觉来理解。
Unity不会为您删除实例化的GameObjects。我不知道你在谈论什么水平,但如果它是某种无尽的水平,你最终必须照顾内存,可能需要删除创建的GameObjects。
如果有可能重用这些GameObjects,您应该看看一个名为“对象池”的方法。下面是从团结的官方视频教程:
https://unity3d.com/learn/tutorials/modules/beginner/live-training-archive/object-pooling
注意:这仅仅是一个建议,以稀疏的信息。根据你的关卡类型,根本不删除游戏对象也是有意义的。例如,如果您不希望它们消失,因为您可以重新访问部分级别,并且内存使用率较低而不在意。 (在Unity编辑器的“游戏”窗口中激活统计面板。)
我在说'庙宇跑'那种游戏。当玩家前进时,我认为游戏会产生新的物体。 – RainingComputers