1. 程式人生 > >android 和unity互動程式碼說明

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中的非靜態方法,只能通過最開始介紹的那種呼叫方式呼叫