iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど
Unity Plug-insは外部で作成したコードをUnityに組み込む仕組みで、Managed plug-insとNative plug-insの2種類ある。
大雑把に説明すると、Managed plug-insはC#のコードで、Native plug-insはiOSやAndroidなどのプラットフォーム固有のコードとなる。
Unityの特殊フォルダは以下のとおり。
Native plug-insのネイティブ・ソースを決められた形式のフォルダに格納すると、自動的に統合される。
iOSの場合は、Assets/Plugins/iOS に、ファイル名のsuffix が.a、.m、.mm、.c、.cpp のものが対象となる。
例えば、Assets/Plugins/iOS/Utils.c というファイルを配置する。
float FooPluginFunction()
{
return 5.0F;
}
このコードを呼び出すC#スクリプトは以下の通り。
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
public class Utils : MonoBehaviour
{
#if UNITY_IPHONE
[DllImport ("__Internal")]
private static extern float FooPluginFunction ();
#endif
void Awake () {
#if UNITY_IPHONE
print (FooPluginFunction ());
#endif
}
}
このコードはiOSフレームワークを追加で必要としていないので、iOSビルドすれば動作する。
Androidでは、JavaやKotlinのソースファイルをプラグインに追加できて、InspectorウィンドウのSelect platforms for plubinでAndroidのみ選択されている状態にすればいい。
例えば、Assets/Plugins/Android/Utils.java というファイルを配置する。
package com.example;
class Utils {
public static double fooPluginFunction() {
return 5.0;
}
}
このコードを呼び出すC#スクリプトは以下の通り。
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
public class Utils : MonoBehaviour
{
void Awake () {
#if UNITY_ANDROID
using (AndroidJavaClass cls = new AndroidJavaClass("com.example.Utils")) {
Debug.Log("FooPluginFunction: " + cls.CallStatic("fooPluginFunction"));
}
#endif
}
}