首先,我是Unity的新手,我现在正在学习c#,请保持温和!
作为一个项目,我想创建一个简单的3D平台游戏。玩家的想法是在方形瓷砖上开始,这是游戏平台游戏区域。他们通过四处走动探索这块瓷砖上的不同元素。
视角是第三人,所以玩家正在低头看动作。当他们接近瓷砖的边缘时,Unity会认出这一点并为现有瓷砖添加另一个瓷砖,基本上会使播放面积加倍。
当玩家进一步移动到瓷砖边缘时,会添加其他瓷砖,每次都会增加发现的区域。
我想要实现这一点的目的是拥有5个平铺游戏对象,它们具有不同的元素,例如已经在其上构建的树。问题是实现这一目标的最佳方法是什么。
是否使用所有图块构建完整关卡然后使用代码限制玩家可以看到的距离,基本上是关于图块的宽度和长度。
或者当玩家接近当前图块的边缘时触发新图块会更好。
想想,我可以回收的示例代码链接非常方便。
谢谢。
答案 0 :(得分:2)
问题主要是基于意见,但这里有一些建议:
没有正确的方法来统一游戏。正确性主要集中在绩效上;记忆和处理。
这里有两种方法:
提示:
对于重复的对象,池化是一种很好的做法。 Pool基本上是一个带有脚本的空游戏对象,以及许多已停用的子游戏。
运行时的实例化成本很高,尤其是在移动设备中。每当您需要同时实例化多个游戏对象时,请考虑使用协程来防止滞后或冻结(这也适用于加载阶段)。
e.g。
IEnumerable CreateObjects(Data[] data)
{
foreach(var e in data)
{
Instantiate(e);//instantiate here and then wait
yield return null;//this line prevents lag
}
}
//...
StartCoroutine(CreateObjects(data));
//...
拥有许多活跃的游戏对象也很昂贵,尤其是在移动设备中。如果许多活动游戏对象具有繁重的脚本,则更新方法将破坏性能。如果许多活动游戏对象具有刚体或碰撞体,则物理引擎处理会变得很重。
激活游戏对象代价高昂,但实例化程度较低,因为它只在其脚本上运行Start方法(如果有的话),并且如果它具有静态对撞机或刚体,也会导致物理引擎重新评估其结构。
如果只有渲染的视觉效果(完全或部分)对相机可见,渲染成本很高。
创建一个编辑器项目,您可以在其中设计关卡。在这个项目中,您将使用unity的编辑器类来生成代表您整个世界的某种数据(JsonObject)。 (级别的集合,每个级别中的区块和每个区块中的对象)。此外,您可以将其他数据(例如目标和内容)存储在不同的JsonObject中。然后通过阅读并将其结构存储在内存中,在游戏中使用这些数据。