2015-01-07 3 views
1

Im делает мою первую 2d игру с единством и im пытается сделать главное меню.получить ориентацию устройства с единством3d

void OnGUI(){ 
    GUI.DrawTexture (new Rect (0, 0, Screen.width, Screen.height), MyTexture); 
    if (Screen.orientation == ScreenOrientation.Landscape) { 
     GUI.Button(new Rect(Screen.width * .25f, Screen.height * .5f, Screen.width * .5f, 50f), "Start Game"); 
    } else { 
     GUI.Button(new Rect(0, Screen.height * .4f, Screen.width, Screen.height * .1f), "Register"); 
    } 
} 

Я хочу выписывать кнопку запуска игры, если ориентация устройства в ландшафтном и регистр, если он находится в портрете. Теперь он записывает кнопку Register, даже если я играю в игру в ландшафтном режиме. Что не так?

ответ

3

Screen.orientation используется, чтобы сообщить приложению, как обращаться с событиями ориентации устройства. Вероятно, он действительно установлен в ScreenOrientation.AutoOrientation. Присвоение этого свойства диктует приложение, что ориентация переключиться, но чтение из него не обязательно сообщить вам, что ориентация устройство в настоящее время.

Используя ориентацию

устройства Вы можете использовать Input.deviceOrientation, чтобы получить текущая ориентация устройства. Обратите внимание, что перечисление DeviceOrientation довольно специфично, поэтому ваши условия, возможно, придется проверять на предмет таких вещей, как DeviceOrientation.FaceUp. Но это свойство должно дать вам то, что вы ищете. Вам просто нужно будет проверить разные ориентации и посмотреть, что имеет смысл для вас.

Пример:

if(Input.deviceOrientation == DeviceOrientation.LandscapeLeft || 
    Input.deviceOrientation == DeviceOrientation.LandscapeRight) { 
    Debug.log("we landscape now."); 
} else if(Input.deviceOrientation == DeviceOrientation.Portrait) { 
    Debug.log("we portrait now"); 
} 
//etc 

Используя разрешение

дисплея Вы можете получить разрешение дисплея с помощью Screen класса. Простая проверка для пейзажа:

if(Screen.width > Screen.height) { 
    Debug.Log("this is probably landscape"); 
} else { 
    Debug.Log("this is portrait most likely"); 
} 
+0

что мне сравнивать input.deviceOrientation, чтобы получить ориентацию в ландшафте или нет? –

+1

См. Гиперссылку в моем ответе на 'DeviceOrientation' (http://docs.unity3d.com/ScriptReference/DeviceOrientation.html). Это содержит такие значения, как «DeviceOrientation.LandscapeLeft», представляющие ландшафтное устройство с кнопкой «Дом» слева. Он имеет несколько других более конкретных значений, хотя для таких случаев, как устройство, которое параллельно с землей, которое вы, вероятно, должны обрабатывать (то есть, многие приложения по умолчанию имеют пейзаж в этой ситуации). Я добавил пример к моему ответу. – SirBraneDamuj

+0

Я пробовал это Input.deviceOrientation == DeviceOrientation.LandscapeLeft || Input.deviceOrientation == DeviceOrientation.LandscapeRight, но он по-прежнему не работает. Я начинаю думать, что, возможно, когда вы играете в игру и меняете разрешение устройства, она фактически не моделирует устройство в любой ориентации, даже если, например, говорит «WVGA Landscape 800x480» –

Смежные вопросы