android 和unity互動程式碼說明
PS. elipse 匯入專案報錯: https://jingyan.baidu.com/album/a24b33cd0ca3c319fe002baf.html?picindex=1
1.開始呼叫android程式碼
//Part1:unity程式碼:
public void StartLuYin()
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("StartActivity1
}
//LinK:StartActivity1 ----雙方保持一致
//Part2: Android程式碼:
//
Android這邊的StartActivity1()不一定要寫在com.unity3d.palyer包名下的UnityPalyer類下。
你只需要把StartActivity1()寫在你自己定義包名下的UnityPlayerActivity.java中就可以了。當然了,該類肯定是繼承Activity的。
你可以把滑鼠放在unity程式碼的Call上檢視方法可以填寫的引數, 你會發現方法可以填寫的引數可以是params object[]。也就是可以傳遞多個引數,以陣列的形式傳遞給Android。
public void StartActivity1(){
// 寫上自己的操作
// UnityPlayer.UnitySendMessage("Main Camera", "Voice", "初始化完成");
}
接下來是Android呼叫unity了。
UnityPlayer.UnitySendMessage("Main Camera", "Voice", "初始化完成");
UnitySendMessage的第一個引數是unity控制元件的名字(如Main Camera),第二個引數是方法名,第三個引數是要傳遞的引數。而且只能傳遞一個引數。你可以把你要傳遞的引數做成一個字串傳遞過去,unity那邊做分割字串就行了:例如 a-b-c
那麼問題來了,指令碼掛在的unity控制元件名字不好找怎麼辦。其實還有個辦法輕鬆搞定,那就是在指令碼的Start()方法中指定name為你方法傳遞的控制元件名字就OK了。
如我上面的方法中要找的控制元件是Main Camera,則:
unity程式碼:
void Start () { this.name = "Main Camera"; } void Voice(string str){ Debug.Log("str:" + str ); }
以上就是unity呼叫Android的非靜態方法,接下來介紹下unity呼叫Android的靜態方法:
引用別人提供的方式:
unity程式碼:
public void PKBtnClick() { this.test("test1", "test2", "test3", 1, true); } public void test( params object[] args ){ AndroidJavaClass jc = new AndroidJavaClass ("com.Indra.Dark.UnityPlayerActivity"); jc.CallStatic ("login", args); }
Android程式碼:
public static void login( String str1, String str2, String str3, int a, boolean isShow ) { if( isShow ){ Log.e("test", str1 + "==" + str2 + "==" + str3 + "==" + a ); } }
(unity程式碼中"com.Indra.Dark.UnityPlayerActivity"為真實的包名.類名,即com.Indra.Dark是包名,UnityPlayerActivity為類名)
還有一種方式:(該方式行不通!!)
unity程式碼:
public void PKBtnClick() { this.test("test1", "test2", "test3", 1, true); } public void test( params object[] args ){ AndroidJavaClass jc = new AndroidJavaClass ("com.Indra.Dark.UnityPlayerActivity"); jc.Call ("login", args); }
Android程式碼:
public void login( String str1, String str2, String str3, int a, boolean isShow ) { if( isShow ){ Log.e("test", str1 + "==" + str2 + "==" + str3 + "==" + a ); }
UnityPlayerActivity為主activity, 經過測試,這種呼叫不成功!!! 看來如果呼叫主activity中的非靜態方法,只能通過最開始介紹的那種呼叫方式呼叫