unity創建Android原生插件


1.首先打開https://developer.android.com/studio/projects/android-library學習如何創建一個Android Library

2.打開Android Studio 創建項目

  - 輸入項目名稱

  - 輸入Company domain或者用默認的

  - 點擊next

 

 

 

3.點擊next

 

 

4.因為是創建Android plugin 所以選擇Add No Activity點擊Finish

 

 

 

5.創建的項目目錄如下

 

 

 

6.

  +點擊File—》New—》New Module 彈出下面界面

         + 選擇Android Library

         + 點擊Next

 

 

7.

  + 輸入Application/Library name

    + 點擊Finish

    + 創建

 

 

 

8.創建后的目錄

 

 

9.創建JavaClass

 

 

 

10.

  + 輸入名稱

    + 點擊OK

 

 

11.  腳本內容

package com.wawagame.app.game.mediaplayerplugin;

import android.util.Log;

public class TutorialClass {
    public void LogNativeAndroidLogcatMessage(){
            Log.d("Unity", "Native LogCcat Message!!!");
    }
}
 
        

12.Make Moudule Library(jar 包)

   + BuildàMake Module ’mediaplayerplugin’

     

 

 

 

 

 

 

E:\work\androidStudio\mediaplayerplugin\build\intermediates\packaged-classes\debug

 

 

 



 

13.在Android Sudio

雙擊打開:build.gradle(Module:mediaplayerplugin)

 

 

14.將下面代碼復制到build.gradle建中

task exprotJar(type: Copy){

    from('build/intermediates/packaged-classes/debug/classes.jar')

    into('../../../../../../unity/PluginTurial/Assets/Plugins/Android')

    rename('classes.jar','MediaPlayerPlugin.jar')

}
task deleteOldJar(type:Delete){

    delete('../../../../../../unity/PluginTurial/Assets/Plugins/Android/MediaPlayerPlugin.jar')

}
exprotJar.dependsOn(deleteOldJar)

  

 

 

 

15.

afterEvaluate {

    assembleDebug.finalizedBy(exprotJar)

    //build.finalizedBy(exprotJar)

}

  

 

 

 

 

16.如下圖操作這樣就講classes.jar復制並重命名到Unity項目中了

 

 

17.在unity中調用javaClass

  有兩種方式:   

    1). AndroidJavaClass對象(用法見Unity Api)

    2).AndroidJavaObject 對象(用法見Unity Api)

 

  +在unity創建C#

 

    private AndroidJavaObject javaClass;

    public Text myText;

    // Use this for initialization

    void Start () {

        javaClass = new AndroidJavaObject("com.wawagame.app.game.mediaplayerplugin.TutorialClass");

        javaClass.Call("LogNativeAndroidLogcatMessage");

        string a = javaClass.Call<string>("LogNativeAndroidLogcatMessageReturn");

        Debug.Log("a=============" + a);

        myText.text = javaClass.Call<string>("LogNativeAndroidLogcatMessageReturn");
    }

    // Update is called once per frame
    void Update () {   
    }

  

 

 

二.Java 調用Unity Function

1. android Project 需要一個Unity classes.jar文件

2.復制classes.jar文件

    + 如果你的打包方式為Mono

      復制文件是:C:\ProgramFiles\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\ classes.jar

  + 如果你的打包方式為L2CPP

  復制文件是:C:\ProgramFiles\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes\ classes.jar

3.將classes.jar文件復制到如下圖所示的文件中

 

 

4.在build.gradle(Module:mediaplayerplugin)中加入下面代碼

include('clasess.jar')

 

 

 

 

 

 

5.調用unity使用的對象com.unity3d.player.UnityPlayer (在Unity Api 說明Building Plugins for Android可以看到)

  使用方法:com.unity3d.player.UnityPlayer.UnitySendMessage

6.首次使用沒有自動導入怎們辦

  +  File—》Settings—》Anto Import

  +  勾上Add unambiguous imports on ths fly和 Auto import in completion

  +  點擊Apply然后點擊OK

7.在Android Sudio中的代碼:

public void CallAorB(String value){

    if("A".equals((value))){

        DoSomethingA();

    }else if("B".equals(value)){

        DoSomethingB();
    }
}

public void DoSomethingA() {

    UnityPlayer.UnitySendMessage("MyGameObject","ChangeTextA","1111111");
}
public void DoSomethingB()
{
    UnityPlayer.UnitySendMessage("MyGameObject","ChangeTextB","2222222");
}

  

8.在Unity中的代碼:

    public void CallJavaFunction(string value)
    {
        javaClass.Call("CallAorB", value);
    }
    public void OnABtnClick()
    {
        CallJavaFunction("A");
    }

    public void OnBBtnClick()
    {
        CallJavaFunction("B");
    }

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM