zoukankan      html  css  js  c++  java
  • unity调用Android功能

    Unity需要调用Android的功能主要涉及两种方式,一种是使用Android的插件,另一种是导出为GoogleAndroid 工程,进行处理。用途是使用第三方的插件 或者 接入渠道的SDK。

    1:使用Android的插件处理。
    具体过程,搜索引擎有很多结果,不再赘述。
    主要要注意: 导出的jar的时候直接使用Eclipse中的export选项,选择src中的所有以及gen中的R.java即可。另外unity-classes.jar不需要再次包含。

    当需要同时使用多个插件的时候:
    AndroidManifest 中只能设置一个MainActivity,那么另一个插件的activity可以采用以下方式启动。

    Untiy C#

    AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

    AndroidJavaClass jc2 = new AndroidJavaClass("com.foo.bar.Start");
    jc2.CallStatic("StartIntent",jo);


    Android Java
    Class Start
    {
    public static void StartIntent(Activity main)
    {
    Intent intent = new Intent(main,AnotherMain.class)
    main.StartActivtiy(intent);
    }
    }

    //另一个插件的main activity
    Class AnotherMain extends Activity
    {
    //...

    }

    2:导出为GoogleAndroid Project
    projectSettings 中设置为导出android工程,导出后用Eclipse打开即可。
    导出后src下有3个文件。
    UnityPlayerAcitivity,UnityPlayerProxyActivity,UnityPlayerNativeActivtiy
    前两个类都是不再使用了,直接继承自 UnityPlayerNativeActivity,在UnityPlayerProxyActivity中直接启动UnityPlayerNativeActivity.
    都是让用户直接使用UtniyPlayerNativeActivity。

    我的理解是用户的类继承自其中之一才能被AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); 所获得。
    官方的文档是要求继承自UnityPlayerActivity。
    但是UnityPlayerActvtiy 其实有2份,一份在unity-classes.jar中,另一份就是src中。继承任何一份都可以使用。
    差别就在于如果你需要接的sdk中包含有悬浮窗之类的工具时,继承自jar包中的无法修改,继承自src中的可以将
    UnityPlayerNativeActivtiy extends NativeActivity
    改为
    UnityPlayerNativeActivtiy extends Activity 来使得悬浮窗可以获得点击事件。

    另外修改AndroidManifest MainActivity(android.intent.action.MAIN)为自己需要的activity。导出时默认为UntiyPlayerNativtiActivtiy。

    发现的问题:
    用Eclipse运行或者打包安装程序apk时,在unity c#代码中的
    #if UNTIY_EDITOR 是成立的。也就是说。需要把android执行的相关代码直接写而不是放在宏定义中。
    我就是使用了 #if UNITY_EDITOR
    #else
    #endif 跳了坑。 这点待更新。

    //更新  后来发现可能是直接copy c# 代码dll(Assembly-CSharp.dll) 过去 而不是copy导出的bin文件夹到Eclipse工程导致。最后成功是 UNITY_ANDROID。

    其实两种方式差别不是很大,可能写插件前者方便,接sdk后者方便。unity 调用 android 如果是static方法可以直接new class 然后callStatic,否则只能继承自UntiyPlayerActivity 来做。
    Android调用Untiy使用 UnityPlayer.UnitySendMessage("GameObjectName","MethodName", "args");
    三个参数分别是 脚本所在的物体名,方法名,参数。 unity处理。
    public void MethodName(string message)
    {
    //to-do
    }

  • 相关阅读:
    qemu-kvm磁盘读写的缓冲(cache)的五种模式
    关于追踪qemu 源码函数路径的一个方法
    准备升大三啦
    关于Vim的一个配置文件
    POJ 3253
    hihocoder 第二十五周 spfa 最短路
    POJ 2718 穷举
    《鸟哥Linux私房菜基础学习篇》命令索引
    博文流
    《SDN核心技术剖析和实战指南》3.3读书笔记
  • 原文地址:https://www.cnblogs.com/binpan/p/4580992.html
Copyright © 2011-2022 走看看