Unity对象根据屏幕高度调整大小错误

时间:2016-09-30 15:50:58

标签: javascript c# unity3d unityscript

(如果你有更好的脚本具有相同的功能,我接受所有无论c#或javascript)

[我的偏好决议是1366 x 768]

我现在不知道该做什么,使用这个c#(c sharp)脚本我可以使用任何分辨率宽度大小计算任何对象,但是当我更改分辨率高度大小(从768开始)时,对象调整大小错误方式,这是我的c#(c sharp)脚本:(抱歉我在发布代码时因错误而使用片段!)

using UnityEngine;
using System.Collections;

public class guicontrol : MonoBehaviour {
	void CalculateResolution(string ObjectName) {
		GameObject theobject = GameObject.Find (ObjectName);
		float selectedwidth = 1366;
		float selectedheight = 768;
		float objectscaley = theobject.transform.localScale.y;
		float objectscalex = theobject.transform.localScale.x;
		Debug.Log ("current object [ x : " + objectscalex + " | y : " + objectscaley + " ] ");
		float screenwidth = Screen.width;
		float screenheight = Screen.height;
		float coordinatey = theobject.transform.localPosition.y;
		float coordinatex = theobject.transform.localPosition.x;
		Debug.Log ("work at current stats : " + screenwidth + " " + screenheight);
		if (screenwidth != selectedwidth || screenheight != selectedheight) {
			float halfthree = 1 / 3;
			float coordinateytomove = (screenheight / selectedheight) * coordinatey;
			float coordinatextomove = (screenwidth / selectedwidth) * coordinatex;
			theobject.transform.position = new Vector2 (coordinatextomove, coordinateytomove);
			Debug.Log (coordinateytomove + " " + coordinatextomove);
			float scaleytochange = (screenheight / selectedheight) * objectscaley;
			float scalextochange = (screenwidth / selectedwidth) * objectscalex;
			theobject.transform.localScale = new Vector2 (scalextochange, scaleytochange);
			Debug.Log (scaleytochange + " " + scalextochange);

		}

	}
	// Use this for initialization
	void Start () {
		Debug.Log ("current position of startbox : " + transform.localPosition);
		Debug.Log ("current screen resolution : " + Screen.currentResolution);
		Debug.Log ("current screen width : " + Screen.width);
		Debug.Log ("current screen height : " + Screen.height);
		CalculateResolution ("startbox");
		CalculateResolution ("background");
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}

如果有任何先前的帖子回答这个告诉我!或给我更好的脚本(javascript或c sharp我接受)但仍然具有相同的功能请:)。

屏幕截图:
(1024 x 768)
1024 x 768
(300 x 768)
300 x 768 EASTER EGG !
(1024 x 600)(错误) 1024 x 600

你可以在屏幕截图中看到不同,任何帮助将不胜感激! :)。

已编辑!
编辑! 2016年1月10日
当我使用canvas并从任何对象中删除我的脚本时,画布只做最糟糕的事情,它的工作正常的偏好分辨率(1366 x 768),但当我改变分辨率时,它在分辨率1024 x 768(之前的工作)中做错了)(查找1024 x 768与脚本一起使用的屏幕截图)

截图: 1024x768 Canvas

1 个答案:

答案 0 :(得分:0)

这一切都是不必要的。从Unity 4.6开始,如果要创建按钮,请使用Button组件。使用新的Unity UI。如果要显示UI图像,请使用Image或RawImage组件。

您应该使用SpriteRenderer的唯一时间是图像是角色或环境的一部分,与角色发生碰撞并且还需要使用Rigidbody。如果图像只是作为UI或背景而不与任何内容发生碰撞,则需要使用UI代替SpriteRenderer来执行此操作。

使用UI时,您可以轻松地使用Canvas Scaler,锚点和轴心点自动调整大小,而无需编写任何代码。 Canvas Scaler会自动将图像调整为任何屏幕大小。

要在Unity中创建简单的按钮,请转到 GameObject - > UI - > 按钮。 这是Unity UI的教程。

您还可以看到UI TOOLS: RESOLUTION & DEVICE INDEPENDENCE。它显示了为任何设备自动调整UI大小的方法。