如何使用不同的屏幕分辨率
我为我的游戏使用Unity 4.3.3。 我正在为Android和iOS设备制作游戏。 由于我很团结,我似乎无法find一种方式来处理不同的屏幕分辨率。 我用我的脚本的C#。
我想让我的游戏全屏运行。 我已经在iPad 2上进行了testing,它运行的很完美,但是对于iPhone 4来说,两边都是剪裁的,对于iPhone 5来说,它们更加剪裁。 解决办法是什么? 我应该在“播放器设置”>“iOS”>“其他设置”>“目标分辨率”下select哪个选项?
团结改变它的游戏内相机,以匹配所使用的屏幕的纵横比尺寸。 显然这并不总是需要的,所以有几个方法可以解决这个问题:
1)第一种方法很容易实现,虽然很less看起来不错。 您可以简单地改变相机的宽高比,以匹配您devise游戏的宽高比。 所以如果你已经devise了你的游戏在4:3,你会做这样的事情:
Camera.aspect = 4f/3f;
只要记住,这将在不同的长宽比上扭曲游戏。
2)另一种方法稍微复杂一点,但结果看起来好多了。 如果您使用正交相机,请注意一个重要的问题,即不pipe正在使用什么屏幕分辨率,正交相机都将高度保持在一个设定值,并且只会改变宽度。 例如,对于大小为10的正交相机,高度将被设置为2.考虑到这一点,您需要做的是补偿每个级别内最广泛的相机(例如,具有更宽的背景)或dynamic更改相机的正交大小,直到其宽度与您创build的宽度相匹配。
GUI组件更容易实现,只需将其位置设置为取决于所需的屏幕分辨率即可。 例如,如果你想要一个button出现在右上angular,你只需将其位置设置为像position = new Vector2(Screen.width - 50, 50);
编辑:既然你提到你使用的设备,我做了一些查找,找出每个使用的纵横比:Ipad2 = 4:3,Iphone4 = 3:2,Iphone5 = 16:9
既然你说过它在Ipad2上看起来很完美,我猜你已经devise了游戏使用4:3的高宽比,所以你提到的“剪辑”只是你的正交相机已经扩大了。 解决方法是使用上述两种方法之一。
你可以很容易地看到它在Unity编辑器中的每个设备上的显示效果。 如果你进入游戏标签(当你在统一编辑器中按下playbutton时popup),你会看到它有一个设备名称,以及分辨率和纵横比。 改变这个可以让你看到不同长宽比的样子。
您可能想要使用Camera.ScreenWidth和Camera.ScreenHeight来捕获设备分辨率。
然后做一些math来计算你所拥有的分辨率的差异,并将其应用于父对象。
这将扩大/缩小一切,以适应设备分辨率,而不需要为不同的分辨率设备提供多种图像分辨率等。
如果你的目标是获得前一个宽度:
[RequireComponent(typeof(Camera))] public class ResizeCamera : MonoBehaviour { private float DesignOrthographicSize; private float DesignAspect; private float DesignWidth; public float DesignAspectHeight; public float DesignAspectWidth; public void Awake() { this.DesignOrthographicSize = this.camera.orthographicSize; this.DesignAspect = this.DesignAspectHeight / this.DesignAspectWidth; this.DesignWidth = this.DesignOrthographicSize * this.DesignAspect; this.Resize(); } public void Resize() { float wantedSize = this.DesignWidth / this.camera.aspect; this.camera.orthographicSize = Mathf.Max(wantedSize, this.DesignOrthographicSize); } }
您需要根据设备的宽高比更改摄像机视口。 假设你制作了720×1080的游戏
然后在脚本中,你应该做的
float xFactor = Screen.width / 720f; float yFactor = Screen.height / 1080f; Camera.main.rect = new Rect(0,0,1,xFactor/yFactor);
要么
另一种方法是,如果你正在制作一个比例为9:16的宽高比的话
在脚本中这样做,
public float targetRatio = 9f/16f; //The aspect ratio of your game void Start() { Camera cam = GetComponent<Camera>(); cam.aspect = targetRatio; }
我解决这个问题的最简单的方法就像Steven所指出的那样,强制我的透视摄像机纵横比达到我为之开发的水平。 当然,如果我开发的宽高比与设备的不同,这会使一些对象变形。 对于UI对象,如果您正在使用内置function,则根据屏幕大小的百分比创build矩形
Rect(0.5 * Screen.width, 0.5 * Screen.height, 0.25 * Screen.width, 0.25 * Screen.height)
这将把左上angular放在屏幕的中心,并创build一个1/4高度和1/4宽度的矩形。 我使用的是用户界面的NGUI 2.7,到目前为止我还没有看到任何不同长宽比的问题,并且使用正交相机渲染UI
我知道这是一个古老的线索,但人们可能最终还是会寻找答案。
要将透视摄像机调整为与Unity默认值不同的屏幕纵横比,请使用一些三angular函数。 所有必要的信息在这里: https : //en.wikipedia.org/wiki/Angle_of_view
如果你想要一个简单的方法,但是,这是一个适用于所有相机types的解决scheme: http : //u3d.as/oUX
如果你正在开发2D游戏,那么你的相机是在正交视图中,然后只要执行以下代码并将其附加到您的游戏对象。 它将使用屏幕分辨率缩放游戏对象(在本例中为精灵)。
void Resize() { SpriteRenderer sr=GetComponent<SpriteRenderer>(); if(sr==null) return; transform.localScale=new Vector3(1,1,1); float width=sr.sprite.bounds.size.x; float height=sr.sprite.bounds.size.y; float worldScreenHeight=Camera.main.orthographicSize*2f; float worldScreenWidth=worldScreenHeight/Screen.height*Screen.width; Vector3 xWidth = transform.localScale; xWidth.x=worldScreenWidth / width; transform.localScale=xWidth; Vector3 yHeight = transform.localScale; yHeight.y=worldScreenHeight / height; transform.localScale=yHeight; }
资产商店中有关于此问题的免费资产…只需查看…
http://u3d.as/content/palash-bhowmick/fit-all-screen-size/9q9
如果对象的形状发生改变,则删除以下行开头的行: –
transform.localScale.x =
如果你没有select你也可以做一些更多的工作,并添加一个特殊的脚本到你的相机:
- 检查设备的屏幕分辨率
- 为此设定目标分辨率
- 并为此设定目标长宽比(重要)
所有你需要做的只是编写一个基本函数来检查屏幕分辨率(你想要的设备的宽度和高度),然后添加更多的function来设置正确的屏幕分辨率和纵横比!
由于Unity3D具有自己的UI系统,Unity Now非常简单。 对于3D Unity自动调整相机的屏幕尺寸。 实际上UI出现问题,它有点棘手。 首先尝试找出哪些元素需要改变位置和大小的屏幕大小。 例如,如果你有一个button完全在屏幕的中心。 那么它不需要根据屏幕来改变位置。 它将保持在中心位置。
现在让我们看一下在屏幕angular落里有一个button的情景,就像我们看到右上angular或左上angular的暂停button。 现在你将不得不把你的button固定在angular落里。 游戏运行的屏幕大小并不重要,暂停button应该贴在angular落。
现在让我们来看另一个你在菜单中有背景的案例。 现在你将不得不对这个BG精灵进行拉伸。 BG将相应地拉伸和收缩,但其上的所有物品都将具有固定尺寸。 为此,build议将BG平放,以便相同的BG可以在16:10或4:3(其所有关于Unity Native UI)