问题:
unity iOS横屏时,主工程Portrait,unity工程AutoRotation,主工程打开unity后设置横屏方向会偶现出现摄像机翻转镜像问题。
unity iOS横竖屏切换时,主工程Portrait,unity工程AutoRotation,在手机设备iPhone 13Pro必现,横屏进入后在切换竖屏进入必镜像翻转。
原因:
在进入unity后,哪怕主工程设置正确的屏幕方向:Portrait和LandscapeLeft(iOS端设置朝右侧),但是进入unity后根据打印日志发现并不是正确的屏幕方向,会出现PortraitUpsideDown和LandscapeRight异常朝向方向。
解决方法:
Update监测横竖屏状态,强制翻转屏幕朝向。
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主工程退出异常。
Screen.orientation = ScreenOrientation.AutoRotation;Screen.autorotateToPortrait = true;Screen.autorotateToPortraitUpsideDown = true;Screen.autorotateToLandscapeRight = true;Screen.autorotateToLandscapeLeft = true;