Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Unity3d SDK篇之Android開發(一)

Unity3d SDK篇之Android開發(一)

編輯:關於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" />

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved