Unity 调用Android方法

原文:http://blog.csdn.net/u011500192/article/details/52005051

多谢那位博主的分享!

简述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的方法
    }
}
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

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>
 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

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

 
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

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

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值