Unity与JavaScript互操作:安卓平台调用技巧

首先,说明一下,我是Unity3D 和Android的小白。
Unity3D 版本:5.2.1f1
U:表示Unity3D的操作顺序
E:表示Eclipse的操作顺序


U1.创建一个Unity3D工程,如下图:
Unity调用JavaScript unity调用安卓_Unity调用JavaScript


U2.点击NEW,出现下图(记得给工程一个合适的Name,并选择好工程路径):

Unity调用JavaScript unity调用安卓_Android_02



U3.点击Create project,出现Unity3D工作界面,如下图:

Unity调用JavaScript unity调用安卓_eclipse_03


注:可能画面布局不同,没关系,点击右上角layout,选择2 by 3到这里,我们的Unity3D部分先告一段落,下边是Android部分,用到eclipse

E1.打开eclipse,点击File->New->Android Application Project创建一个Android工程

E2.给该工程起一个霸气的名字,例如:Demo

E3.点击Next->Next->Next->Next到达如下这个界面(在这里我们就用默认的Activity Name的名字MainActivity,当然,也可以自己起一个名字,随意):

Unity调用JavaScript unity调用安卓_Unity调用JavaScript_04


E4. 点击Finish,这样,我们的eclipse的工程就创建好了。

E5.在这里我们说一下,Android只能显示一个界面(如果有多个界面,这几个界面会相互覆盖),当然,在这里我们也只想显示Unity3D的界面以下是MainActivity.java的默认代码:

登录后复制

package com.example.demo;//工程包

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

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

我们先简单的修改成以下代码:

登录后复制

package com.example.demo;

import android.os.Bundle;
import android.app.Activity;
//import android.view.Menu;

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);//Unity中不需要显示该界面
    }

/*
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
  */  
}

下边是重点请注意:

下边是重点请注意:

下边是重点请注意:

E6.重要的事情说三次:找到你的Unity3D的安装路径(你自己Unity3D的安装的路径我是不知道滴),找一个classes.jar的.jar包,我的路径是:

unity3D安装路径\Unity\Editor\Data\PlaybackEngines\androidplayer\Variations\il2cpp\Development\Classes

E7.右击你的刚创建的工程名,选择最下边倒数第二个选项Properties,弹出如下界面:

Unity调用JavaScript unity调用安卓_eclipse_05


E8.点击Android,弹出如下界面:

Unity调用JavaScript unity调用安卓_android_06


把Is Library勾选上,点击Apply

E9.点击Java Build Path,出现如下界面:
Unity调用JavaScript unity调用安卓_android_07


E10.点击Add External JARs… ,找到classes.jar->打开,界面如下:
Unity调用JavaScript unity调用安卓_eclipse_08


点击OK.

E11.把MainActivity.java的代码改成如下:

登录后复制


package com.example.demo;

import com.unity3d.player.UnityPlayerActivity;
import android.os.Bundle;

public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    } 
    /*
    *写自己想实现的功能
    *函数随意
    */
    /*增加*/
    public float increase(float m){
        return (m + 0.1f);
    }
    /*减少*/
    public float decrease(float m){
        return (m - 0.1f);
    }
}

E12.选中工程名,点击菜单栏的Project->Clean…
E13.查看工程目录下的bin文件,下边生成了一个.jar包,报名与工程名相同。



以下转到Unity3D,注意U1 U2 U3在开始,同时最重要

U4.在Unity3D 工程目录下的Assets下创建Plugins文件夹,再在Plugins文件夹下创建Android文件夹,把Eclipse Demo 工程下的bin下的demo.jar拖到Unity3D 中的Android文件夹下。

U5.在Unity3D的安装路径下找到AndroidManifest.xml文件,我的路径是:

unity3D安装路径\Unity\Editor\Data\PlaybackEngines\androidplayer\Apk 然后拖到Unity3D中的Android文件夹下,与demo.jar同一级别。

最终的Unity3D工程目录如下图:

Unity调用JavaScript unity调用安卓_eclipse_09


U6.双击AndroidManifest.xml文件:

登录后复制


<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    android:installLocation="preferExternal"
    android:versionCode="1"
    android:versionName="1.0">
    <supports-screens
        android:smallScreens="true"
        android:normalScreens="true"
        android:largeScreens="true"
        android:xlargeScreens="true"
        android:anyDensity="true"/>

    <application
        android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
        android:icon="@drawable/app_icon"
        android:label="@string/app_name"
        android:debuggable="true">
        <activity android:name="com.unity3d.player.UnityPlayerActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>

把其中的 com.unity3d.player.UnityPlayerActivity替换成你自己的主Activity,我的是替换成com.example.demo.MainActivity

U7.点击Unity3D的菜单栏中的File->Build Settings… 选择Platform下边的Android,

选择Player Settings…右边出现界面:
Unity调用JavaScript unity调用安卓_unity3d_10


把Bundle Identifier 中的内容改成com.example.demo

最上边Company Name 中的内容改成example

Product Name中的内容改成demo

保存

U8.在Unity中创建一个3D物体Cube,我们通过调用Android的程序,来改变Cude的位置。

创建一个C#脚本:

登录后复制


using UnityEngine;
using System.Collections;

public class moveCubeScript : MonoBehaviour {
    AndroidJavaClass jc;
    AndroidJavaObject jo;
    private float x = 0.0f;
    private Vector3 CubePosition = new Vector3(0.0f, 0.0f, 0.0f);
    private int count = 20;
    private bool flag = false;
    // Use this for initialization
    void Start () {
        jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");
    }

    // Update is called once per frame
    void Update () {
        CubePosition = this.transform.position;
        x = CubePosition.x;
        if (count > 0 && !flag) {
            count --;
            if (count <= 0) {
                flag = true;
            }
            x = jo.Call<float> ("decrease", new object[]{x});
            CubePosition.x = x;
            this.transform.position = CubePosition;
        } else if (flag) {
            count ++;
            if(count >= 20){
                flag = false;
            }
            x = jo.Call<float> ("increase", new object[]{x});
            CubePosition.x = x;
            this.transform.position = CubePosition;
        }
    }
}

把这个脚本托给Cube,保存。

jc = new AndroidJavaClass (“com.unity3d.player.UnityPlayer”);//不能改变字符串
jo = jc.GetStatic (“currentActivity”);//不能改变字符串
代码中的increase decrease 是Android中的函数名,new object[]{,,,……}传的参数
jo.Call返回值为float 型数据

Unity3D 调用Android到此结束,希望对你有所帮助


免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空