Mobile Unity3d不同的屏幕尺寸和有限的播放区域

Mobile Unity3d不同的屏幕尺寸和有限的播放区域,mobile,unity3d,Mobile,Unity3d,我已经在unity上玩了很长一段时间了,我在android上发布了一两个应用程序,但我还没有找到一个真正重要的东西,那就是我一直在逃避手机 我看过各种各样的教程,比如unity2d物理和类似性质的东西,我也看过一些教程,在这些教程中,人们把一个地面精灵放在地面上,然后在一边附加一个边缘碰撞器,等等 现在,我可能错了,但对我来说,如果你在制作任何游戏时需要设置任何类型的边界,或者在设置的游戏区域内与之碰撞的对象,你几乎不能使用编辑器进行任何类型的关卡设计,一切都必须由脚本完成,因为您创建的每个对象

我已经在unity上玩了很长一段时间了,我在android上发布了一两个应用程序,但我还没有找到一个真正重要的东西,那就是我一直在逃避手机

我看过各种各样的教程,比如unity2d物理和类似性质的东西,我也看过一些教程,在这些教程中,人们把一个地面精灵放在地面上,然后在一边附加一个边缘碰撞器,等等

现在,我可能错了,但对我来说,如果你在制作任何游戏时需要设置任何类型的边界,或者在设置的游戏区域内与之碰撞的对象,你几乎不能使用编辑器进行任何类型的关卡设计,一切都必须由脚本完成,因为您创建的每个对象都必须在启动时由脚本设置其位置和大小,以适应各种屏幕大小

我错了吗?确实有没有一种简单的方法来创建一个关卡,使用编辑器导入精灵,创建形状、边缘和对象,然后让游戏自动缩放并根据屏幕大小将对象移动到适当的限制

对我来说,每次我都玩过android游戏或任何手机游戏。我必须通过脚本生成所有对象,通过脚本添加组件,通常通过脚本执行所有操作,直到我的实际编辑器几乎只有相机对象和一个脚本连接到它,就这样

有没有更简单的方法?因为到目前为止,我所看到的所有关于2d游戏的教程对于手机来说都是毫无用处的,因为它们使用编辑器手动添加精灵和边缘碰撞器,在我看来,这在90%的情况下看起来都不正确

如有任何想法,将不胜感激

今天的游戏设计确实必须是被动的。 这是非常非常困难的,没有简单或内置的解决方案。 是的,不幸的是,这是我们这个时代游戏设计的一个绝对基本的方面

要让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并不是那么容易,你必须如此。与“游戏布局反应性”相比,这绝对是微不足道的:/)


再说一次——从根本上说——忘记技术上的执行吧!-你会选择“屏幕上的速度相等”或“总是在顶部显示更多的树”之类的解决方案吗?这非常困难。

谢谢你,知道根据屏幕宽度和高度(如大小和速度)做任何事情都会让人感到安慰基于边缘标记的放置是一种比较精确的方法,我一直认为我遗漏了一些东西,因为所有教程都是在编辑器中轻松完成的,我一直认为我遗漏了一些魔术。是的,事实上你是100%正确的。你没有遗漏任何东西。你完全抓住了关键ead:“hello,world”的例子说明了“与Unity一起制作游戏”是多么容易,但不幸的是完全没有抓住要点。你的发现是完全正确的!这是那些你从未见过的奇怪的“房间里的大象”中的一个,它对Unity提到了很多。我猜:Unity已经有了(奇妙的)反应式UI系统。Unity是“新的”游戏2D系统(过去几年)相当不错。我怀疑他们最终会为游戏2D系统引入“反应式”概念。目前,每个团队都有自己的解决方案-就像上面的示例代码,它是“我们的”解决方案代码库的一部分。