Unity 3D 调用 Android
来源:互联网 发布:holy cross学院知乎 编辑:程序博客网 时间:2024/06/07 04:38
首先,说明一下,我是Unity3D 和Android的小白。
Unity3D 版本:5.2.1f1
U:表示Unity3D的操作顺序
E:表示Eclipse的操作顺序
U1.创建一个Unity3D工程,如下图:
U2.点击NEW,出现下图(记得给工程一个合适的Name,并选择好工程路径):
U3.点击Create project,出现Unity3D工作界面,如下图:
注:可能画面布局不同,没关系,点击右上角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,当然,也可以自己起一个名字,随意):
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,弹出如下界面:
E8.点击Android,弹出如下界面:
把Is Library勾选上,点击Apply
E9.点击Java Build Path,出现如下界面:
E10.点击Add External JARs… ,找到classes.jar->打开,界面如下:
点击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工程目录如下图:
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…右边出现界面:
把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到此结束,希望对你有所帮助
- Unity 3D 调用 Android
- Unity 3D Android 入门
- Unity 3D 调用DLL的方法
- Unity 3D 调用DLL的方法
- Unity 3D 导出Android Eclipse项目
- unity 3d与ios代码相互调用
- unity 3d与ios代码相互调用
- 安卓调用unity的3D界面
- Unity 3D之调用摄像头并存储
- Unity调用Android
- Unity调用Android
- unity 调用android函数
- unity 调用android函数
- Unity调用Android
- Unity调用Android
- unity 调用android函数
- Unity调用Android
- Unity调用Android录音
- iOS cell排序
- AndroidManifest.xml文件解析
- HTML5之客户端存储数据
- C 字符串拷贝
- MPAndroidChart Library Wiki翻譯
- Unity 3D 调用 Android
- list遍历时删除元素
- Swift开发IOS-UISegmentedControl
- Session共享实现方案调研
- 在控制台程序中不显示控制台界面
- ios non-arc to arc 之三
- 《从零开始学Swift》学习笔记(Day 57)——Swift编码规范之注释规范:文件注释、文档注释、代码注释、使用地标注释
- C++中覆盖、隐藏、重载
- memcached安装