Le problème est le fichier UnityViewControllerBaseiOS.mm qui est généré lors de la construction pour iOS a une assertion qui empêche par inadvertance l'utilisation de cette propriété. Il est possible de créer une classe de post-construction qui s'exécute après la génération des fichiers de construction iOS qui peuvent modifier le code généré avant de le compiler dans XCode.
Il suffit de créer un script C# nommé iOSScreenOrientationFix.cs et de le coller dans le code suivant - adapté de this Unity3D forum post. Notez que ce fichier doit être placé dans un dossier nommé Editor ou dans l'un de ses sous-dossiers.
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);
}
}
}
}
Vous pouvez le mettre dans une scène en attachant les éléments suivants MonoBehaviour à un objet de jeu
using UnityEngine;
namespace Holovis
{
public class SetDeviceOrientation : MonoBehaviour
{
public ScreenOrientation orientation = ScreenOrientation.AutoRotation;
void Awake()
{
Screen.orientation = orientation;
}
}
}
REMARQUE: Réglage Screen.orientation
n'a pas d'effet lors de l'exécution sur le bureau, dans l'éditeur Unity, ou lors du test en utilisant Unity Remote.
Si tout le reste échoue, vous pouvez toujours faire pivoter l'appareil photo principal de 90 degrés. – rutter
@rutter Je ne pense pas que ce serait bon pour l'interface utilisateur :) –