こんにちは、Unityエンジニアのオオバです。
UnityとSwiftのやり取りを進めていたのですが、
なかなかうまく行かなかったので、一旦初心に帰ります。
Objective-CとUnityのやり取りを確認していきます。
【Unity】世界一カンタンなiOSプラグインの作り方
👉DOTweenの教科書を読んでUnityアニメーションをプログラミングしてみよう!
ディレクトリ構成
Assets/
└──Plugins/
├── Test.cs
└── iOS/
├── SampleObjC.mm
└── SamplePlugin.cs
拡張子.mmの理由
Objective-Cの拡張子はもともと.m
です。
しかし、.mm
に変更されています。
この理由はObjective-Cファイル内に、
C++を内包するからです。
📚 参考サイト : Objective-CのクラスをC++でラップする方法 - Faith and Brave - C++で遊ぼう
このようなファイル構成です。
以下3ファイルのサンプルコードを公開します。
💻ソースコード : SampleObjC.mm
#import <Foundation/Foundation.h>
extern "C"
{
void _callObjcMethod(const char *msg)
{
// コンソールにログを出力
NSString *str = [NSString stringWithCString:msg encoding:NSUTF8StringEncoding];
NSLog(str);
}
}
💻ソースコード : SamplePlugin.cs
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;
// ネイティブとC#をつなぐブリッジ役
public class SamplePlugin : MonoBehaviour
{
#if UNITY_IOS && !UNITY_EDITOR
[DllImport ("__Internal")]
static extern void _callObjcMethod (string msg);
#endif
public static void CallObjcMethod (string msg)
{
#if UNITY_IOS && !UNITY_EDITOR
_callObjcMethod (msg);
#endif
}
}
💻ソースコード : Test.cs
using UnityEngine;
public class Test : MonoBehaviour
{
public int cnt;
void Update ()
{
SamplePlugin.CallObjcMethod (cnt.ToString ());
cnt++;
}
}
特に壁にぶつからずスムーズに実装できました。
ただSampleObjC.mm
はテキストエディタやRiderで記述するとコード補完が効きません。
Xcodeで開いてもファイル単品をオープンするだけではコード補完が効かず、
もっと複雑な処理を書く場合は結構厳しい気がしました。
プラグインのコード補完を有効にする
そこでXcodeプロジェクトを、
ネイティブプラグインのフォルダに作り
コード補完が効く状態にします。
XcodeのFile > New > Project から
Cocoa Touch Framwork
を選択。
適当なProductNameを付けて、
Languageを Objective-C
を選択します。
File > New > File からObjective-C File
を選択。
SampleObjC.m
と命名。
コチラのディレクトリに格納します。
※Xcode上でSampleObjC.mmにリネームしました
するとコード補完の利くSampleObjC.mmを調整できるようになります。
この記事が気に入ったらフォローしよう
- Unity2017.1.0f3
- Xcode 8.3.3
- macOS 10.12.4