在Unity中调用Android原生Activity的方法

在Android studio 中创建新工程

创建新工程

  • 设定的Mininum SDK不要太高,我设定的API 21

在工程中引入Unity的接口包

接口包的位置可能随版本有所不同我用的是 Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes

  • 把目录下的classes.jar放入新建的工程的app\libs下

在项目管理器调成project模式比较好找位置

TODO:加个图

  • 右键classes包Add as Library,把包加入环境中

修改MainActivity为UnityPlayerActivity

接下来我们要把MainActivity继承于UnityPlayerActivity,让他在Unity项目打开的时候就启动并在这个类中提供打开新的有界面的Activity的接口

  • 改变MainActivity的继承并删除setContentView方法(因为我们一开始不需要界面,只需要它能启动,不删掉会直接出现Android界面就没有我们想要的效果了)
public class MainActivity extends UnityPlayerActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
}

创建新界面的Activity和layout并在MainActivity中写出相应的调用函数

  • 新创建一个java类作为新的Activity并创建相应的layout

KouyuActivity.java

package me.acring.mainkouyu;

import android.app.Activity;
import android.os.Bundle;

/**
 * Created by Acring on 2017/3/17.
 * 口语练习
 */

public class KouyuActivity extends Activity{

    @Override
    public void onCreate(Bundle saveIntentState){
        super.onCreate(saveIntentState);
        setContentView(R.layout.activity_kouyu);
    }
}

activity_kouyu.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="口语练习"/>
</LinearLayout>
  • 在MainActivity中添加函数
public void startMyActivity(){
        Intent intent = new Intent(MainActivity.this, KouyuActivity.class);
        startActivity(intent);
    }

配置AndroidManifest.xml

  • 配置Activity
<activity
            android:name=".KouyuActivity"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            >
        </activity>
  • 配置UnityActivity
  • 添加 <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
  • 注意添加位置
<activity android:name=".MainActivity">
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

修改style.xml的配置

  • 打开style.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>
  • 以上全部删去修改为
<style name="AppTheme" parent="android:Theme.Light">
</style>

目的是去掉对V7包的引用,否则Unity在Build的时候会报错

  • 上述步骤会使layout显示以下警告,目前不知道怎么解决,但是对程序运行似乎没有影响

Missing styles. Is the correct theme chosen for this layout?
​ Use the Theme combo box above the layout to choose a different layout, or fix
​ the theme style references.

修改build.gradle文件

  • build.gradle文件(Module:app)顶部类似线面的代码中:
apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        applicationId "me.acring.mainkouyu"
  • apply plugin: 'com.android.application' 修改为apply plugin: 'com.android.library'
  • 注释掉applicationId "me.acring.mainkouyu"
  • 删除:
compile 'com.android.support:appcompat-v7:25.0.0'
testCompile 'junit:junit:4.12'

做完之后程序不能单独在AS运行并且Junit程序会报错,不过都是正常的

Build APK并取出关键文件

  • 最后一步 Sync NowBuild APK
  • 可能提示 Error:(6, 30) 错误: 程序包android.support.v7.app不存在
  • import android.support.v7.app.AppCompatActivity;注释掉就行了
  • 取出\app\build\outputs\aarapp-debug.aar文件和\app\src\main\AndroidManifest.xml文件(放到一个临时位置)
  • 用压缩软件打开aarapp-debug.aar文件并删除掉目录下的 \libs\classes.jar 文件。(避免重复引用)

安卓部分到此结束


Unity工程的配置和调用


创建目录并引用文件

  • 新建Unity项目,在Assets目录下新建Plugins\Android\目录
  • 把刚刚取出的两个文件放到该目录下

创建按钮并配置脚本

  • 新建一个C#脚本,添加如下函数
public void startMyActivity()
    {
        //AndroidJavaClass:通过指定类名可以构造出一个类
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

        // UnityPlayer这个类可以获取当前的Activity
        // currentActivity字符串对应源码中UnityPlayer类下 的 Activity 变量名。
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");

        // 在对象上调用一个Java方法
        jo.Call("startMyActivity");
    }
  • 把脚本配置到按钮上并绑定OnClick(具体方法应该都知道)

切换平台并配置必要参数

  • 打开Build Settings切换到Android平台,打开Player Settings修改Bundle Indentifier为Android工程中AndroidManifest.xml下package的名称,修改Minimum API Level为Android工程对应的API级别
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容