【Unity】 UnityからJavaの関数を呼び出す

DEVELOP, Unity

目次

概要

Unity からAndroid、Javaのプログラムを呼び出してみます。ライブラリの作成にはEclipseを使います。※この投稿は2014年頃にWikiにメモしていたもののバックアップです。従いまして今の方法にはマッチしない可能性も高いですがこんなこともあったよと眺めて頂ければ幸いです。

手順

Android開発環境の構築

Android開発環境の構築 Eclipse編を参考にしてEclipseのAndroid開発環境を構築します。

Jarライブラリを作成する

Eclipse を起動しファイル → 新規 → Androidアプリケーション・プロジェクトを選択し新規アプリケーションを作成します。

アプリケーション名HelloWorld
プロジェクト名HelloWorld
パッケージ名plugin.helloworld

「カスタム・ランチャーアイコンを作成する」「アクティビティーの作成」のチェックを外し、「このプロジェクトをライブラリとしてマークする」にチェックを入れプロジェクトを作成します。

ソースを追加します。srcフォルダを右クリック → 新規 → クラスと選択しソースファイルを追加します。

パッケージplugin.helloworld
名前HelloWorld

空のHelloWorld クラスが作成されました。次はプラグインを実装していきます。

package plugin.helloworld;
 
public class HelloWorld
{
	public HelloWorld()
	{
	}
 
	public static String getHelloWorld_Static()
	{
		return "Call getHelloWorld_Static() Method";
	}
 
	public String getHelloWorld()
	{
		return "Call getHelloWorld() Method";
	}
}

文字列を返すだけのシンプルなプラグインです。この状態でビルドするとプロジェクトのbinフォルダにhelloworld.jar ファイルが作成されます。Eclipse 側の作業はここまでです。

Java プラグインの配置

Unity を起動し新規プロジェクトを作成します。HelloWorld とします。プロジェクトのツリーからCreate → Folder と選択し「Plugins」フォルダを作成します。Plugins フォルダの中に「Android」フォルダを作成します。作成したAndroidフォルダに先ほど作成したhelloworld.jar ファイルを入れます。

プラグイン呼び出しスクリプトの作成

Assets/Plugins 以下にファイルを追加します。Assets を右クリック → Create → C# Script と選択し、名前をHelloWorldPlugin として作成します。HelloWorldPlugin をダブルクリックして編集します。呼び出し用の関数を作成します。

using UnityEngine;
using System.Collections;
using System;
 
ublic class HelloWorldPlugin : MonoBehaviour
{
	public static String getHelloWorld_Static()
	{
#if UNITY_ANDROID
		AndroidJavaClass plugin = new AndroidJavaClass("plugin.helloworld.HelloWorld");
		String hello = plugin.CallStatic<String>("getHelloWorld_Static");
		return hello;
#endif
	}
 
	public static String getHelloWorld()
	{
#if UNITY_ANDROID
		AndroidJavaObject plugin = new AndroidJavaObject("plugin.helloworld.HelloWorld");
		String hello = plugin.Call<String>("getHelloWorld");
		return hello;
#endif
	}
}

これでUnity から呼び出す準備が整いました。

使ってみる

作成したHelloWorld プラグインが使用できるか試してみます。Assets フォルダにC# スクリプトを追加します。名前は「test」として アプリケーションの中身を実装していきます。今回は動作確認さえできれば良いので、ログを出力するだけのものを実装します。

using UnityEngine;
using System.Collections;
 
public class test : MonoBehaviour
{
	void Start ()
	{
		Debug.Log ( HelloWorldPlugin.getHelloWorld() );
		Debug.Log ( HelloWorldPlugin.getHelloWorld_Static() );
	}
	void Update ()
	{
	}
}

testスクリプトをHierarchy のMain Camera のドラッグ&ドロップして関連付けします。

ビルドと実行

実際にAndroid端末にインストールして実行してみます。 Unity Editor ではエラーが出ますので注意して下さい。

  • 出力されるログを確認するために、C:\usr\local\Android\android-sdk\tools\ にあるddms.bat を実行します。
  • Unity のFile → Build Setting → Platform にAndroid を選択した状態で、Switch Platformを選択します。
  • 端末をUSB で接続した状態で、Build And Run でビルド/実行します。

結果

getHelloWorld() getHelloWorld_Static() 関数が呼ばれているのが確認できます。

Posted by kazupon