设备方向结转

Device Orientation Carry Over

我正在使用 Unity 3D 创建一个简单的菜单。我无法获得 ancors,所以我使用了两个 Canvas 根据风景和肖像的不同布局。

这非常适合我。 但是。

我必须将设备正确设置为该方向才能正确注册。

To explain better: I've put Landscape values as default in Start() and in Update() I have the checkandchanger() which checks the orientation and changes it to the appropriate layout.

So now, if I have my device on Portrait and I change scenes, and if my device isn't perfectly in that orientation (straight up) it loads the Landscape.

所以,回到我的问题,是否可以将前一个场景的方向发送到下一个场景?

是的,是的。创建一个名为“OrientationManger”的空游戏对象。将一个简单的脚本附加到它,并确保在加载下一个场景时该脚本不会被破坏。此脚本将具有 public 功能,可 设置 当前方向或 读取 上一场景的最后方向。

然后您可以从场景 1 和场景 2 中引用这些值。

为了防止这个"OrientationManger"游戏对象和附加到它的脚本在加载[时销毁下一个场景,使用:

使用

void Awake() {
        DontDestroyOnLoad(this.gameObject);
    }

编辑: 这就是 OrientationManager 应该看起来的样子。您可以选择任何方法。

public class OrientationManger : MonoBehaviour
{
    private OrientationType currentOrientation; ///////////////Method 1 (ENUM)
    int orientationType = 1; ///////////////Method 2 (OR use Integer 1,2)

    //Makes sure there is only once instance running
    void Awake ()
    {
        // singleton
        if (FindObjectsOfType (typeof(OrientationManger)).Length > 1) {
            Debug.Log ("OrientationManger already exist");
            DestroyImmediate (gameObject); //Destroy this gameobject because it already exist
        } else {
            DontDestroyOnLoad (this.gameObject); //Wont destroy when loading another level/scene
        }
    }

    ///////////////Method 1 Set (ENUM)
    public void setOrientation (OrientationType orientType)
    {
        currentOrientation = orientType;
    }

    ///////////////Method 1 Get (ENUM)
    public OrientationType getOrientation ()
    {
        return currentOrientation;
    }

    ///////////////Method 2 Set (OR use Integer 1,2)
    public void setOrientation2 (int orientType)
    {
        if (orientType == 1) {
            orientationType = orientType;
        } else if (orientType == 2) {
            orientationType = orientType;
        }
    }

    ///////////////Method 2 Get (OR use Integer 1,2)
    public int getOrientation2 ()
    {
        if (orientationType == 1 || orientationType == 2) {
            return orientationType;
        } else {
            return 0;
        }
    }

}

///////////////Method 1 (ENUM)
public enum OrientationType
{
    UKNOWN,
    Portrait,
    Landscape
}
;