使用unity3d获取设备的方向

时间:2015-01-07 19:01:09

标签: c# unity3d 2d

我正在制作我的第一个2D游戏,我试图做一个主菜单。

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"); 
    }
}

如果设备的方向是横向的,我想写出开始游戏按钮,如果它是纵向,我想写出注册。现在它写出了注册按钮,即使我在横向模式下玩游戏。有什么问题?

1 个答案:

答案 0 :(得分:4)

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");
}