今天的游戏设计确实必须是被动的。
非常非常困难,没有简单的或内置的解决方案。
是的,不幸的是,在我们这个时代,这绝对是游戏设计的基本方面。
要让 2D 游戏在所有不同的屏幕形状上运行确实非常非常困难。
考虑说某种风景 2D 街机游戏 - 也许你会在其中互相射击。如果两个人在比赛,一个人的屏幕是 4:3,一个人的屏幕是 16:9,这实际上意味着什么?
真的应该一个用户飞过屏幕需要更长的时间吗?!?您是否应该调整船的速度,使屏幕行驶时间保持不变?!?
您是否应该在边缘显示更多内容?但是等等 - 这是否意味着某些玩家会收到更多警告来了解敌人或风景的到来??!
没有人知道答案——这非常非常困难。
这在概念上很困难,而且编程真的很痛苦。
在回答您的问题时,Unity(或任何游戏引擎)中绝对没有内置方法来处理这些麻烦。
几乎所有团队都有这样的代码......
/*
Call this dynamically, probably from SizeCare or RotationCare
Position something in relation to the dynamic screen edges
- reactively so to speak
This is critical for (for example) knowing where to launch sprites from,
knowing where to dispose of them, and so on.
*/
using UnityEngine;
using System.Collections;
public class KeepAtScreenEdges:MonoBehaviour
{
[Header("Left and right...")]
public bool keepOnLeftEdge;
public bool keepOnRightEdge;
[Header("Bottom and top...")]
public bool keepOnBottomEdge;
public bool keepOnTopEdge;
public void ScreenMaybeChanged()
{
if (keepOnLeftEdge) gameObject.ScreenLeft();
if (keepOnRightEdge) gameObject.ScreenRight();
if (keepOnBottomEdge) gameObject.ScreenBottom();
if (keepOnTopEdge) gameObject.ScreenTop();
}
}
你只要把它贴在一个标记上(标记:空游戏对象)
有一个“左上角”...
确实,您将拥有像这样的“反应性标记”的整个星座。
然后,你在游戏中所做的每一件事,都与这些相关。
因此,例如,您将有一个标记,用于“屏幕外敌人出现的地方,就在屏幕右边缘之外”。你会广泛地使用它来发射敌人,或者其他什么。
您在编辑器中无能为力:一切都是反应式的。 (嗯,确实,你必须编写编辑器代码,使其也完全反应,因为在开发过程中:你
请注意 - 谢天谢地 - Unity 令人敬畏的 .UI 系统当然是反应式的,谢天谢地,它负责“现代 frickin 反应式游戏布局”的 UI 方面。 (话说回来,要成为 .UI 方面的专家并不是那么容易,而且你必须做到。与“游戏布局反应性”相比,这绝对是微不足道的:/)
再次 - 只是从根本上 - 忘记在技术上执行它! - 您是否会寻求“屏幕上的速度相等”或“始终在顶部显示更多树”之类的解决方案 - 或其他什么?太难了。