简述Unity中调用Android方法

来源:互联网 发布:网络歌曲今夜不醉不归 编辑:程序博客网 时间:2024/06/07 00:27

简述Unity中调用Android方法

本人现读大二,在老师指导下做些小项目。现在正值暑假,时间较多,因项目需要,所以琢磨了下在unity环境中如何调用Android的方法。我阅读了大部分网上的关于这个问题的教程,他们都写的很好(特别是雨松MOMO)。不过因为unity版本升级过快,或是有些细节教程里没有特别说明,又或是教程重点不够突出,所以导致我花了几天的时间都没有成功,最后在不懈努力下还是成功了。我是初学unity,而且又是第一次发帖,在这里我就冒昧地综合一下大家的教程,分享一下我的经验,不好勿喷。话不多说,开始搞。

开发环境: Unity 5.3.4f1 + eclipse
开发步骤: 具体分为两大部分,第一部分在eclipse中操作,第二部分在unity中操作。

第一部分:
1.首先我们创建一个Android工程,这个很简单我相信大家都会。
这里写图片描述

2.设置包名和版本信息
这里写图片描述

3.添加classes.jar包,这个包是unity提供给Android开发用的。因为unity版本的不同,所以classes.jar已经不在某些教程说的那个路径了,我使用的是这个路径下的
C:\ProgramFiles\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Developmen\Classes
找到classes.jar然后放入安卓工程对应的库中
这里写图片描述

4.添加关系
这里写图片描述

5.然后我们就可以编辑MainActivity里面的内容了
这里写图片描述

6.因为我们要调用SecondActivity,所以我们先去创建SecondActivity,然后回来写自定义方法。
这里写图片描述

7.编辑SecondActivity
这里写图片描述

8.准备工作做好了,我们可以编辑MianActivity了
这里写图片描述

import android.content.Intent;import android.os.Bundle;import android.os.Vibrator;import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        // setContentView(R.layout.activity_main);    }    public void SetVibrator() {        Vibrator mVibrator = (Vibrator) getSystemService(VIBRATOR_SERVICE);        mVibrator.vibrate(new long[] { 200, 2000, 2000, 200, 200, 200 }, -1);         //实现震动的方法                                                                           }    public void intentSecoendActivity() {        Intent intent = new Intent(this, SecondActivity.class);        startActivity(intent);        //实现调用第二个Activity的方法    }}

9.配置一下manifest
这里写图片描述

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    package="com.example.demo"    android:versionCode="1"    android:versionName="1.0" >    <uses-sdk        android:minSdkVersion="14"        android:targetSdkVersion="21" />    <application        android:allowBackup="true"        android:icon="@drawable/ic_launcher"        android:label="@string/app_name"        android:theme="@style/AppTheme" >        <activity            android:name=".MainActivity"            android:label="@string/app_name" >            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>        <activity android:name=".SecondActivity" ></activity>          </application>    <uses-permission android:name="android.permission.VIBRATE"></uses-permission></manifest>

10.然后我们打开eclipse 项目栏 project,去勾选 build automatically,然后 clean,build project。
这里写图片描述

11.打包class文件,先找到class文件路径,我的在 E:\Android\eclipse\demo\bin\classes (自己项目的工作空间->bin->classes), 然后win + R ,cmd进入命令提示符,切换到你的classes目录下
执行打包命令 jar -cvf class.jar * ,打包完成目录如下。
这里写图片描述
这里写图片描述

到此第一部分结束。

第二部分:
1.创建一个unity工程并创建如下目录 Assets->Plugins->Android->bin 将刚才打包好的class.jar文件放入bin文件夹。在eclipse工程里拖动 assets、res、androidManifest 到unity Android文件夹内。如下
这里写图片描述
这里写图片描述

2.编写一个js001的脚本,并绑定到主摄像机

using UnityEngine;using System.Collections;public class js001 : MonoBehaviour {    void Update ()    {        //当用户按下手机的返回键或home键退出游戏        if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home) )        {            Application.Quit();        }    }    void OnGUI()    {        if (GUILayout.Button ("zhen_dong", GUILayout.Height (100))) {            if (Application.platform == RuntimePlatform.Android) {            AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");            jo.Call ("SetVibrator");            }        }        if (GUILayout.Button ("OPEN Activity", GUILayout.Height (100))) {            if (Application.platform == RuntimePlatform.Android) {            AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");            AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");            jo.Call ("intentSecoendActivity");            }        }    }}

3.按 ctrl + s 保存当前的场景命名为Scene
这里写图片描述

4.打开file->build settings -> player settings 修改下图表格,根据自己的项目来。
这里写图片描述

5.build 项目,得到apk文件后,由夜神模拟器测试如图。无法测试震动,震动只能在真机上测试。
这里写图片描述
这里写图片描述

第二部分到此结束。

总结:
unity调用android方法主要是通过将classes.jar导入安卓工程,让MainActivity继承UnityPlayerActivity,注释掉setcontentview方法,因为系统启动第一个activity,会通过scene渲染,不使用setcontentview。然后在MainActivity里编写自定义方法,然后打包到unity。unity在使用特殊方法调用。

本文图片中用红色标注的都是重点,如果不注意可以会造成 打包apk 不成功,apk安装后闪退的问题。

源码网盘地址如下:
http://pan.baidu.com/s/1c1D87JU ku84

若有什么不对的地方,请大家指出,大家一起学习一起进步。

1 0
原创粉丝点击