LoginSignup
6
5

More than 5 years have passed since last update.

UnityプラグインでviewDidLoadやUIViewControllerにあたるものの話

Posted at

意外と載ってなかったので、覚書。

はじめに

  • 本記事ではUnityプラグインによるアプリ起動時のトリガーとAppDelegate, UIViewControllerの取得方法を解説します。
  • アプリ側でUIViewController取得してUIImagePickerControllerなどを追加したいとかそういう時に使います。
  • Unity2017.2.0f3, XCode9を使用しています。

Unity側

  • サンプルなのでキューブが表示されるだけのプロジェクトを作ります。
  • 空のGameObjectを作りプロジェクトに追加します。
  • スクリプトを新規作成し、GameObjectに紐付けます。

スクリーンショット 2017-11-20 16.07.24.png
こんな感じ

スクリプトは以下のような感じで。殆ど生成時のままです。
initializeView()というところがプラグインの入口になります。

viewController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;

public class ViewController : MonoBehaviour {

    [DllImport("__Internal")]
    private static extern void initializeView();

    // Use this for initialization
    void Start () {
        #if UNITY_IOS
        initializeView ();
        #endif
    }

    // Update is called once per frame
    void Update () {

    }
}

Unityプラグイン

  • UnityのプロジェクトディレクトリにてAssets/Plugins/iOSディレクトリ内にファイルを配置すればUnityプラグインとなります。
  • 無い場合は手動で作ればUnity側で勝手に読み込んで認識してくれます。
  • ここではunity_plugin_ios.mmというファイルで作成します。
unity_plugin_ios.mm
extern "C" {
void initializeView() {
}
}

iOS側

  • UnityのソースをビルドしXCodeプロジェクトにエクスポートした後の話です。
  • Libraries/Plugins/iOS内にunity_plugin_ios.mmがあるのでそれを触ります。
unity_plugin_ios.mm
#import <Foundation/Foundation.h>
#import "UnityAppController.h"

extern "C" {
void initializeView() {
    UnityAppController *unityAppController = (UnityAppController*)[UIApplication sharedApplication].delegate;
    UIViewController *unityRootVC = unityAppController.window.rootViewController;

}
}
  • initializeView()がviewDidLoadと同程度のタイミングでコールされます。
  • unityRootVCにUIViewControllerが取得されます。

どうでもいいですが、エクスポートしたプロジェクトにlibiconv2.dylibが付いてくるの、いい加減修正されませんかねえ・・・(ぼやき
以上です。

6
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
5