2016-09-30 14 views
0

(если у вас есть лучший сценарий с той же функцией, я не принимаю все независимо от того, C# или JavaScript)Единство объекта изменения размера на основе высоты экрана сделал неправильно

[мое разрешение предпочтение 1366 х 768]

я дон Я не знаю, что делать сейчас, с этим C# (c sharp) скриптом я могу вычислить любой объект с использованием любого размера ширины разрешения, но когда я изменяю размер высоты разрешения (с 768), изменение размера объекта неправильным образом, это мой C# (c sharp) сценарий: (извините, я использую фрагмент из-за ошибки при отправке кода!)

using UnityEngine; 
 
using System.Collections; 
 

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

 
\t \t } 
 

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

если есть какие-либо предыдущие сообщения, ответьте на это скажите мне! или дайте мне лучший скрипт (javascript или c sharp все, что я принимаю), но все же с такой же функцией пожалуйста :).

Скриншот:
(1024 х 768)
1024 x 768
(300 х 768)
300 x 768 EASTER EGG !
(1024 х 600) (неверно) 1024 x 600

вы можете увидеть разные на скриншоте, любая помощь будет оценена! :).

EDITED!
EDITED! 01/10/2016
Когда я использую холст и удаляю свой скрипт из любого объекта, холст просто делает худшую вещь, это нормальная работа для разрешения предпочтений (1366 x 768), но когда я меняю разрешение, это неправильно в разрешении 1024 x 768 (который ранее работал) (смотрите на скриншоте, что 1024 x 768 работа с скриптом)

Скриншот: 1024x768 Canvas

ответ

0

вся эта вещь не нужна. Начиная с Unity 4.6, если вы хотите сделать кнопку, используйте компонент Button. Используйте новый пользовательский интерфейс Unity. Если вы хотите отобразить изображение пользовательского интерфейса, используйте компонент Image или RawImage.

Единственный раз, когда вы должны использовать SpriteRenderer, является изображение, которое является символом или частью среды, которая коллирует с персонажем, а также должна использовать Жесткое тело. Если изображение просто там как пользовательский интерфейс или фон и не сталкивается ни с чем, вам нужно использовать пользовательский интерфейс, чтобы сделать это вместо SpriteRenderer.

Когда интерфейс используется, вы можете легко сделать автоматическое изменение размеров с Canvas Scaler, анкеров и точки поворота, не написав ни строчки кода. Canvas Scaler автоматически изменит размер вашего изображения на любой размер экрана.

Чтобы создать простую кнопку в Unity, перейдите к GameObject ->UI ->Кнопка. Вот учебник для Unity UI.

Вы также можете увидеть UI TOOLS: RESOLUTION & DEVICE INDEPENDENCE. Он показывает способы автоматического изменения размера пользовательского интерфейса для любого устройства.

+0

спасибо, что рассказал мне о холсте :), но все еще не работает –

+0

Вы делаете что-то неправильно. Эта игра для мобильных (iOS, Android) или настольных компьютеров? – Programmer