Проблема заключается в файле UnityViewControllerBaseiOS.mm, который генерируется во время сборки для iOS, имеет в нем утверждение, которое непреднамеренно предотвращает использование этого свойства. Можно создать класс пост-сборки, который запускается после создания файлов сборки iOS, которые могут сгенерировать сгенерированный код перед его компиляцией в XCode.
Просто создайте скрипт C# с именем iOSScreenOrientationFix.cs и вставьте следующий код - от this Unity3D forum post. Обратите внимание, что этот файл должен быть помещен в папку с именем Editor или в одну из ее подпапок.
using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;
using System.IO;
namespace Holovis
{
public class iOSScreenOrientationFix : MonoBehaviour
{
#if UNITY_CLOUD_BUILD
// This method is added in the Advanced Features Settings on UCB
// PostBuildProcessor.OnPostprocessBuildiOS
public static void OnPostprocessBuildiOS (string exportPath)
{
Debug.Log("OnPostprocessBuildiOS");
ProcessPostBuild(BuildTarget.iPhone,exportPath);
}
#endif
[PostProcessBuild]
public static void OnPostprocessBuild(BuildTarget buildTarget, string path)
{
#if !UNITY_CLOUD_BUILD
ProcessPostBuild(buildTarget, path);
#endif
}
private static void ProcessPostBuild(BuildTarget buildTarget, string path)
{
if (buildTarget == BuildTarget.iOS)
{
#if !UNITY_CLOUD_BUILD
Debug.Log("Patching iOS to allow setting orientation");
#endif
string filePath = Path.Combine(path, "Classes");
filePath = Path.Combine(filePath, "UI");
filePath = Path.Combine(filePath, "UnityViewControllerBaseiOS.mm");
Debug.Log("File Path for View Controller Class: " + filePath);
string classFile = File.ReadAllText(filePath);
string newClassFile = classFile.Replace("NSAssert(UnityShouldAutorotate()", "//NSAssert(UnityShouldAutorotate()");
File.WriteAllText(filePath, newClassFile);
}
}
}
}
Вы можете установить его в сцене, прилагая следующий MonoBehaviour к объекту игры
using UnityEngine;
namespace Holovis
{
public class SetDeviceOrientation : MonoBehaviour
{
public ScreenOrientation orientation = ScreenOrientation.AutoRotation;
void Awake()
{
Screen.orientation = orientation;
}
}
}
ПРИМЕЧАНИЕ: Установка Screen.orientation
не имеет никакого эффекта при работе на рабочем столе, в редакторе Unity, или при тестировании с использованием Unity Remote.
Если все остальное не удается, вы можете всегда поворачивать основную камеру на 90 градусов. – rutter
@rutter Я не думаю, что это было бы хорошо для UI :) –