Unity(C#)からAndroid(Java)のActivityを拡張したクラスにアクセスしたい
Androidで javaクラスの
package com.xxx;
public class hoge{
public hoge(){}
メソッド...
}
のメソッドにアクセスするときは、
Plugins>Androidフォルダにそのjarを置いて
C#から
AndroidJavaObject Instatnce = new AndroidJavaObject("com.xxx");
var fuga = Instatnce.Call<戻り値>("メソッド名");
などでいけるのですが、
この方法だと以下の継承されたクラスにアクセスできません。
package com.xxx;
import android.support.v7.app.ActionBarActivity;
public class hoge extends ActionBarActivity{
public hoge(){}
メソッド...
}
これは、上記のC#でアクセスすると
java.lang.ClassNotFoundException エラーになってしまいます。
初歩的な質問かもしれませんがご指導お願いします。
↓
AndroidのActivityという概念をまるで理解してなかったのですが、
おかげで2つの方法でメソッドを呼べました。
java
package com.xxx;
import com.unity3d.player.UnityPlayerActivity;
import com.unity3d.player.UnityPlayer;
public class Hoge extends UnityPlayerActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
UnityPlayer.UnitySendMessage("Main Camera", "Hoge", "HOGEHOGE");
}
public String Fuga(){
return "FUGAFUGA";
}
}
このままだとエラーなので、Macでの
/Applications/Unity/Unity.app/Contents/PlaybackEngines/classes.jar
を追加して、jar化。
Plugins>Androidフォルダにそのjarを置いて
AndroidManifest.xml で UnityPlayerActivity を拡張したHogeに変更。
<activity android:name="Hoge"
android:label="@string/app_name">
Main Camera オブジェクトに追加したC#コンポーネント
using UnityEngine;
using System.Collections;
public class test : MonoBehaviour
{
void Start ()
{
// Unity インスタンスを取得
AndroidJavaClass unityPlayer = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
// 現在のアクティビティを取得
AndroidJavaObject activ = unityPlayer.GetStatic<AndroidJavaObject> ("currentActivity");
// インスタンスメソッドを呼ぶ
Debug.Log(activ.Call<string> ("Fuga"));// FUGAFUGA
}
// javaからUnitySendMessageで送られてくる。
void Hoge(string message){
Degub.log(message); // HOGEHOGE
}
}
以上、ありがとうございました。