unity创建Android原生插件

摘要:
1.首次打开https://developer.android.com/studio/projects/android-library了解如何创建AndroidLibrary 2.打开AndroidStudio以创建项目-输入项目名称-输入Companydomain或使用默认值-单击next 3.单击next 4.因为要创建Androidplugin,请选择AddNoActivity并单击F

1.首先打开https://developer.android.com/studio/projects/android-library学习如何创建一个Android Library

2.打开Android Studio 创建项目

  - 输入项目名称

  - 输入Company domain或者用默认的

  - 点击next

unity创建Android原生插件第1张

3.点击next

unity创建Android原生插件第2张

4.因为是创建Android plugin 所以选择Add No Activity点击Finish

 unity创建Android原生插件第3张

5.创建的项目目录如下

unity创建Android原生插件第4张

6.

  +点击File—》New—》New Module 弹出下面界面

         + 选择Android Library

         + 点击Next

 unity创建Android原生插件第5张

7.

  + 输入Application/Library name

    + 点击Finish

    + 创建

 unity创建Android原生插件第6张

8.创建后的目录

 unity创建Android原生插件第7张

9.创建JavaClass

 unity创建Android原生插件第8张

10.

  + 输入名称

    + 点击OK

 unity创建Android原生插件第9张

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’

     

 unity创建Android原生插件第10张

 unity创建Android原生插件第11张

unity创建Android原生插件第12张

E:workandroidStudiomediaplayerpluginuildintermediatespackaged-classesdebug

 unity创建Android原生插件第13张



13.在Android Sudio

双击打开:build.gradle(Module:mediaplayerplugin)

 unity创建Android原生插件第14张

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)

  

 unity创建Android原生插件第15张

15.

afterEvaluate {

    assembleDebug.finalizedBy(exprotJar)

    //build.finalizedBy(exprotJar)

}

  

 unity创建Android原生插件第16张

16.如下图操作这样就讲classes.jar复制并重命名到Unity项目中了

 unity创建Android原生插件第17张

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:ProgramFilesUnityEditorDataPlaybackEnginesAndroidPlayerVariationsmonoReleaseClasses classes.jar

  + 如果你的打包方式为L2CPP

  复制文件是:C:ProgramFilesUnityEditorDataPlaybackEnginesAndroidPlayerVariationsil2cppReleaseClasses classes.jar

3.将classes.jar文件复制到如下图所示的文件中

 unity创建Android原生插件第18张

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

include('clasess.jar')

 unity创建Android原生插件第19张

unity创建Android原生插件第20张

 unity创建Android原生插件第21张

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");
    }

  

免责声明:文章转载自《unity创建Android原生插件》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇鼠标指针下总出现一个滚动条似的方框,怎么办?有图ID生成策略(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mac下发布Unity3d中Android平台下出现“android (invokation failed)”的错误

 昨天想要给Murphy同学编译一个Andorid版本的工程,但我本机没有Android SDK,于是安装了Murphy发给我的安装包,并升级设置,结果在发布的最后出现了如下错误: Error building Player: Exception: android (invokation failed)ERROR: unknown errorcmd:an...

Unity3d在Android环境下读取XML的注意事项

PC环境下读取一般可以直接用 XmlDocument doc = new XmlDocument(); doc.Load(path);可以直接加载进来。 path为直接路径。 此时路径可以为streamingAssets文件夹下,也可以是自己自建的文件夹下面,如果是你自己建的文件夹下打包后需要手动添加一下,就是说比如你自己在Assets文件下新建了一个Co...

unity实现文本打字机效果(支持富文本)

一.效果图: 二.代码如下: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; using System; public class CommonStoryText : BaseMeshEffect {...

使用点云数据在Unity中渲染场景

  最近接触了一个用点云数据渲染的方案, 非常给力, 几乎就是毫秒级的加载速度, 特别是在显示一些城市大尺度场景的时候, 简直快的没法形容, 之前的城市场景用了很多重复模型, 并且大量优化之后加载一个城市不仅时间很久, 10分钟级的, 而且内存消耗巨大, 10G级别的, 运行时CPU裁剪都能耗掉40ms, 几乎没有任何意义了...   这个方案好的地方在于...

Unity表面着色器

表面着色器和之前无光照着色器不同,其中没有顶点着色器和片元着色器,而增加了光照函数; 接下写了一个求两个贴图的光照效果 两个贴图做插值运算: Shader "Custom/SurfaceShader" { Properties { _Color ("Color", Color) = (1,1,1,1)...

Unity编辑器扩展

Unity引擎除了提供大部分通用的功能以外,还为开发者提供了编辑器的扩展开发接口,开发者可以编写编辑器脚本,打造适合自己的游戏辅助工具和定制的编辑器。 以前脚本开发中使用的一些API和组件类,都属于运行时类,Unity还提供了编辑器类用于编辑器的扩展开发,包括编辑器环境下使用的GUI类,编辑器工具类,编辑器操作类(例如拖放、撤销操作)等。 注意:编辑器扩展...