我使用Unity 3D创建一个简单的菜单。我无法获得ancors,所以我根据Landscape和Portrait使用了两个不同布局的Canvas。
这对我来说很完美。 的 BUT。
我必须在该方向正确设置设备才能正确注册。
要更好地解释:我已将横向值设置为
Start()
中的默认值 并在Update()
我有checkandchanger()
检查 方向并将其更改为适当的布局。所以现在,如果我的设备在Portrait上,我改变了场景,如果我的话 设备并不完美地处于该方向(直线向上)它加载 横向。
因此,回答我的问题,是否可以将前一场景的方向发送到下一个场景?
答案 0 :(得分:1)
是的,确实如此。创建一个名为" OrientationManger "的空游戏对象。附上一个简单的脚本,并确保在加载下一个场景时该脚本不会被破坏。此脚本将具有设置当前方向的公共函数或读取上一个场景中的最后一个方向。
然后,您可以从场景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
}
;