我已经玩了很长时间了,我已经在Android上发布了一个或两个应用程序,但我还没有弄清楚一个让我一直关注移动的重要事情。
我已经看过关于unity2d物理学和那种性质的东西的各种教程,我已经看过教程,其中人将地面精灵放在地上,然后将边缘对撞机连接到一侧,依此类推。
现在,我可能错了,但对我来说,似乎你要制作任何涉及必须设置任何界限的游戏,或者你在一个游戏区域内碰撞的物体,你可以几乎从不使用编辑器进行任何级别的设计,并且所有内容都必须通过脚本完成,因为您创建的每个对象都必须在启动时通过脚本设置其位置和大小以考虑各种屏幕大小。
我错了吗?确实有一种简单的方法可以使用编辑器创建一个级别来导入精灵并创建形状和边缘以及对象,然后让游戏自动缩放并根据屏幕大小将对象移动到适当的限制?
对我来说,每次我都做了一个Android游戏或任何手机游戏。我不得不通过脚本生成所有对象,通过脚本添加组件,并且通常通过脚本完成所有操作,直到我的实际编辑器几乎只有相机对象和附加到它的脚本,这就是它。
有更简单的方法吗?因为到目前为止我所看到的关于2D游戏的所有教程对于移动设备来说都是无用的,因为他们使用编辑器手动添加精灵和边缘对撞机,这对我来说似乎在90%的时间看起来都不正确。
任何想法都将不胜感激。
答案 0 :(得分:1)
是的,遗憾的是,这是我们这个时代游戏设计的绝对基本方面。
让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();
}
}
你只需将它贴在标记上(标记:空GameObject)
有“左上角”一个......
确实你会有像这样的“反应性标记”的整个星座。
然后,你在游戏中做的每一件事都与这些事情有关。
因此,例如,你将有一个标记,用于“屏幕右边的屏幕右边缘存在的地方”。并且你会广泛地使用它来发射敌人,或者其他什么。
你无法在编辑器中做任何事情:一切都是被动的。 (嗯,的确,你必须对编辑器代码进行编程,以便它在开发过程中也能完全被反应:你
请注意 - 谢天谢地 - Unity的真棒.UI系统当然是被动的,谢天谢地,它负责“现代frickin'反应式游戏布局”的UI方面。 (再说一次,绝对不容易成为.UI的专家,你必须这样。而且与“游戏布局反应性”相比,这绝对是微不足道的:/)
再次 - 从根本上说 - 忘记在技术上执行它! - 你打算寻找像“屏幕上的速度相同”或“总是在顶部显示更多树木”的解决方案 - 或者其他什么?这很困难。