欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Unity3d SDK篇之Android开发(一)

来源: 开发者 投稿于  被查看 7837 次 评论:10

Unity3d SDK篇之Android开发(一)


android 项目交互 与 sdk增加指南: (完整版)

通常在处理u3d与android natvice对接时,有两种方案:

 

. U3D 项目交互部分方案:

a. 使用u3d带有jni与使用jar方案直接处理,原理还是在u3d直接打包apk,其实处理过程是把相关工程的目录构建好,在u3d内进行打包完成的c# 与 java进行交互,底层的ndk部分完全忽略掉了,直接用u3d提供的jni接口交互jar中的class地址即可;

b. 传统的方式,导出eclipse android工程采用ndk方式jni通信;

 

下来开始我们介绍方案a:

android 的生命周期介绍:

.制作sdk native思路: 在交互的activity中跳转到新的activity来进行显示部分;

 

 

a方案配置指南:

1.Android创建工程指南

至少配置:(否则可能被坑)

.Minimum Required SDK: API 14 Android 4.0

.Target SDK: API 19 Android 4.4

.Compile With: API 19 Android 5.1.1

Theme: ... ...

 

Activity Name: ... ...

完成项目创建;

 

2. 项目结构:

 

.src: 原文件模块, 一定要追加一个包名;

.libs: 与unity对应要增加一个sdk的类库包;

.res/laytou: 布局管理模块有需求就添加;

.AndroidManifest.xml: 增加xml android项目布局器;

 

 

3. 寻找unity3d支持的libs库文件class.jar:

在u3d的安装目录下

../Contents/PlaybackEngines/AndroidPlayer/release/bin/classes.jar

../Contents/PlaybackEngines/AndroidPlayer/development/bin/classes.jar

 

拷贝到AndroidPlugin下的libs目录下.

进行引用一次:

建议使用release下的jar交互库;

 

 

4. 编辑要测试的布局文件:

.res/layout下的布局文件随便写,根据android native的构建原则来搞;



 

 

5. 回到src工程文件来实现部分代码:

.修改MainActivity.java:(这个文件用来跟u3d进行交互,所以不要实现 setContentView方法)

删除 setContentView(R.layout.activity_main);

删除 onCreateOptionsMenu(Menu menu);

删除 onOptionsItemSelected(MenuItem item);

增加: 需要交互的方法 (c#(u3d) / java);

 

public void StartActivity1(String name) { // u3d call android

 

// // TODO Auto-generated method stub

 

// Intent intent = new Intent(mContext,OpenActivity1.class);

 

// intent.putExtra("name", name);

 

// mActivity.startActivity(intent);

 

Log.e("U3D: ", "StartActivity1: " + name);

 

}

 

 

public void StartActivity2(String name) //

 

{

 

UnityPlayer.UnitySendMessage("Main Camera","messgae","android call u3d sucess!!!" + name);

 

}

 

public void StartActivity3(String name) { // native 跳转 sdk等

 

// TODO Auto-generated method stub

 

Intent intent = new Intent(mContext,TestActivity0.class);

 

intent.putExtra("name", name);

 

mActivity.startActivity(intent);

 

}

 

补: 如果调试中可以使用Activity

u3d接入需要修改:

 

import com.unity3d.player.UnityPlayerActivity;

 

public class MainActivity extends UnityPlayerActivity {//UnityPlayerActivity

// 修改后要重新进入eclipse clean and build;

 

 

 

6. 开始打包bin下 class目录 :

.控制台打开进入当前android工程的 bin目录下:

.执行java命令行: jar -cvf class.jar *;

.打包出来的class.jar随意改名;


 

 

7.构建AndroidManifest文件

.创建activity 磨垮

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

android:name=".OpenActivity1">

 

增加权限文件:

 

. 创建初始状态android部分构建完成;


 

 

 

8. 进入unity3d项目设置部分;

. 新建u3d工程;

. 创建Plugins 文件夹, 创建Android文件夹 , 创建bin 文件夹, 创建 libs文件夹, 创建 res文件夹

. 拷贝AndroidManifest 到 Android;

. 拷贝生成好的jar文件到 bin;

. 拷贝第三方库到 libs;

. 拷贝当前工程下的res内容到 res内,注意检查layout;



 

 

9. 制作相关代码:

void Start () {

#if UNITY_EDITOR

#elif UNITY_IPHONE

#elif UNITY_ANDROID

AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");

m_activity = jc.GetStatic ("currentActivity");

#endif

}

 

void OnGUI(){

//call hello world

if(GUI.Button(new Rect(50,50,200,40),"Open Activity download")){

m_activity.Call("StartActivity1","Unity中调出android的方法了");

}

//call hello world

if(GUI.Button(new Rect(50,250,200,40),"Open Activity N2")){

m_activity.Call("StartActivity2","Unity中调出android的方法了222");

}

}

将脚本挂入Main Camera对象上;

 

 

10. U3D BuildSetting:


 

11. 打包后生成apk 文件使用;


 

 

12. 搭建tomcat web 服务器:

Mac OS:http://blog.csdn.net/kaitiren/article/details/44871181 安装;

 

 

 

扩展部分: (跳转一个activity来实现布局或者sdk的添加部分)

1. 回到android项目中,创建相关代码过程:

Android 增加native 测试类OpenActivity1.java:

 

package com.example.androidplugin;

 

import android.app.Activity;

 

import android.os.Bundle;

 

import android.view.View;

 

import android.view.View.OnClickListener;

 

import android.widget.Button;

 

import android.widget.TextView;

 

 

 

public class OpenActivity1 extends Activity {

 

 

 

@Override

 

public void onCreate(Bundle savedInstanceState) {

 

super.onCreate(savedInstanceState);

 

setContentView(R.layout.activity_main);

 

 

 

TextView text = (TextView)this.findViewById(R.id.textView1);

 

text.setText(this.getIntent().getStringExtra("name"));

 

 

 

Button close = (Button)this.findViewById(R.id.button0);

 

close.setOnClickListener(new OnClickListener() {

 

public void onClick(View v) {

 

OpenActivity1.this.finish();

 

}

 

});

 

}

 

}

 

 

 

MainActivity.java 中:

 

public Context mContext = null;//增加

 

public Activity mActivity = null;//增加

 

protected void onCreate(Bundle savedInstanceState) {// 修改

 

super.onCreate(savedInstanceState);

 

mContext = this;//增加

 

mActivity = this;//增加

 

// setContentView(R.layout.activity_main);

 

}

 

 

public void StartActivity3(String name) // android call unity

 

{

 

Intent intent = new Intent(mContext,OpenActivity1.class);

 

intent.putExtra("name", name);

 

mActivity.startActivity(intent);

 

}

 

 

xml 配置:

 

 

xmlns:android="http://schemas.android.com/apk/res/android"

 

xmlns:tools="http://schemas.android.com/tools"

 

android:id="@+id/container"

 

android:layout_width="match_parent"

 

android:layout_height="match_parent"

 

tools:context="com.ITFFuture.testua.MainActivity"

 

tools:ignore="MergeRootFrame" >

 

 

android:orientation="vertical"

 

android:layout_width="match_parent"

 

android:layout_height="wrap_content">

 

 

android:id="@+id/textView0"

 

android:layout_width="fill_parent"

 

android:layout_height="wrap_content"

 

android:textColor="#000000"

 

android:textSize="18sp"

 

android:background="#00FF00"

 

android:text="测试Unity和Android之间额通讯"

 

android:gravity="center_vertical|center_horizontal" />

 

 

android:id="@+id/textView1"

 

android:layout_width="fill_parent"

 

android:layout_height="wrap_content"

 

android:textColor="#FFFFFF"

 

android:textSize="18sp"

 

android:background="#0000FF"

 

android:text="大家好,我是安卓的OpenActivity1"

 

android:gravity="center_vertical|center_horizontal" />

 

相关文章

    暂无相关文章

用户评论