3 votes

Intégration d'Unity IOS

Pour un projet, je dois intégrer Unity3d dans une application existante. Je sais que Unity agit comme un UIApplicationDelegate. J'ai trouvé un article intéressant sur ce sujet mais je ne vois pas très bien comment je peux résoudre mes problèmes de cette façon. Est-il possible de relancer le processus de délégation à partir d'un ViewController ? Ainsi, lorsque je passe à un ViewController à partir de mon délégué et que je veux revenir en arrière, il faut alors initialiser à nouveau l'UIApplicationDelegate ?

Article que j'ai trouvé : http://alexanderwong.me/post/29949258838/building-a-ios-unity-uiview-uiviewcontroller

Merci d'avance

2voto

nerophon Points 42

Avez-vous essayé d'utiliser Unity pour créer une application Unity iOS "standard", puis d'y intégrer votre code existant ?

Lorsque vous construisez pour iOS à partir de Unity, Unity collera automatiquement un crochet dans votre délégué d'application, dans la méthode suivante :

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

Vous pouvez y faire d'autres choses, mais en bas, vous devriez voir la ligne importante :

[self startUnity:application];

Vous pouvez donc retirer cette ligne de la méthode didFinishLaunching et la placer ... où vous voulez. Vous voudrez également conserver une référence à la UIWindow* qu'Unity dessine dans votre délégué d'application, afin de pouvoir y accéder et en sortir à votre guise.

Je ne sais pas exactement ce que vous voulez faire, mais je vous recommande vivement de commencer par une version intégrée d'Unity et de travailler à partir de là, ou du moins de l'utiliser comme modèle si vous voulez créer votre propre version.

0voto

Markus Zancolò Points 332

Cela fait un moment, mais mieux vaut tard que jamais ;)

Vous ne pouvez pas "redémarrer" la délégation. Le UnityAppController est un AppDelegate, pas un ViewController. Mais vous pouvez décider du moment où unity est lancé la première fois. Après cela, unity est en cours d'exécution et vous devez soit utiliser l'appel applicationDidEnterBackground dans le UnityAppController (pour les versions antérieures à Unity 5), soit simplement appeler setPause:true (en utilisant Unity 5) qui arrête la boucle de rendu d'unity. N'oubliez pas de le réactiver lorsque vous retournez dans le UnityViewController.

Pour le "comment démarrer unity quand on le veut" : Soit vous sous-classez UnityAppController et surchargez startUnity :(UIApplication*) application avec une implémentation vide. Ensuite, vous appelez [super startUnity ] lorsque vous voulez l'activer.

L'autre moyen n'est pas de sous-classer mais de créer votre propre objet UnityAppController et d'appeler toutes les méthodes (applicationDidFinsishLaunching etc.). Ensuite, vous attendez simplement l'initialisation jusqu'à ce que vous ayez besoin d'unity pour la première fois. Mais je recommande la première option.

Vous pouvez aussi regarder ici pour une description plus détaillée de la façon dont je l'ai fait : http://www.markuszancolo.at/2014/05/integrating-unity-into-a-native-ios-app

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X