您的位置:首页 > 移动开发 > Unity3D

简述Unity中调用Android方法

2016-07-23 16:21 711 查看

简述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安装后闪退的问题。

源码网盘地址如下:

链接: https://pan.baidu.com/s/1hszLRKg 密码: 9z8w

若有什么不对的地方,请大家指出,大家一起学习一起进步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android unity