问题:
unity iOS横屏时,主工程Portrait,unity工程AutoRotation,主工程打开unity后设置横屏方向会偶现出现摄像机翻转镜像问题。
unity iOS横竖屏切换时,主工程Portrait,unity工程AutoRotation,在手机设备iPhone 13Pro必现,横屏进入后在切换竖屏进入必镜像翻转。
原因:
在进入unity后,哪怕主工程设置正确的屏幕方向:Portrait和LandscapeLeft(iOS端设置朝右侧),但是进入unity后根据打印日志发现并不是正确的屏幕方向,会出现PortraitUpsideDown和LandscapeRight异常朝向方向。
解决方法:
Update监测横竖屏状态,强制翻转屏幕朝向。
cs
public bool isPortrait = true;
public bool isCheck = true;
private void UpdateRotate()
{
if(!isCheck) return;
if (isPortrait && Screen.orientation != ScreenOrientation.Portrait)
{
Debug.Log($"ScreenManager::UpdateRotate - IOS端,竖屏但是监测到屏幕:{Screen.orientation}不是竖屏,强制翻转");
Screen.orientation = ScreenOrientation.AutoRotation;
Screen.autorotateToPortrait = true;
Screen.autorotateToPortraitUpsideDown = false;
Screen.autorotateToLandscapeRight = false;
Screen.autorotateToLandscapeLeft = false;
Screen.orientation = ScreenOrientation.Portrait;
}
else if (!isPortrait && Screen.orientation != ScreenOrientation.LandscapeLeft)
{
Debug.Log($"ScreenManager::UpdateRotate - IOS端,横屏但是监测到屏幕:{Screen.orientation}不是横屏,强制翻转");
Screen.orientation = ScreenOrientation.AutoRotation;
Screen.autorotateToPortrait = false;
Screen.autorotateToPortraitUpsideDown = false;
Screen.autorotateToLandscapeRight = false;
Screen.autorotateToLandscapeLeft = true;
Screen.orientation = ScreenOrientation.LandscapeLeft;
}
}
注意事项:
- iOS的左右朝向和Unity的左右朝向是相反的,Screen.orientation = ScreenOrientation.LandscapeLeft;相当于iOS的右侧。
- unity打包的工程设置为AutoRotation,并在unity启动成功后等待iOS发送过来横竖屏切换在设置,否则iOS主工程会报错,操作相同屏幕朝向参数异常。
- unity工程退出的时候,需要还原屏幕朝向,否则iOS主工程退出异常。
cs
Screen.orientation = ScreenOrientation.AutoRotation;
Screen.autorotateToPortrait = true;
Screen.autorotateToPortraitUpsideDown = true;
Screen.autorotateToLandscapeRight = true;
Screen.autorotateToLandscapeLeft = true;