android與unity3d互相互動
請參看“Android和Unity3d互相呼叫的Demo”的資源
實際上Android調Unity就是用
//第一個引數為unity類所繫結的遊戲物件
//第二個引數為unity方法名
//第三個引數為unity方法的引數
UnityPlayer.UnitySendMessage("Main Camera", "GetMessage" ,"success");//注,要先有unity打包出的android專案才能寫UnityPlayer,否則沒有這個類
Unity調android使用
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("button0");//button0是我android中的方法
//需要注意的是,這個呼叫好像是執行緒呼叫,換而言之,不能在呼叫的方法中直接建立AsyncTask,而是需要在handler中建立
Unity 檔案
using UnityEngine; using System.Collections; public class Test : MonoBehaviour { public GUIText send1,get1,v1,dis; bool send = false; AndroidJavaObject jo; // Use this for initialization void Start () { v1.text = ""+1.0; if (Application.platform== RuntimePlatform.Android){ AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); } } // Update is called once per frame void Update () { if(Input.GetMouseButtonDown(0)){ send1.text = "send "+Time.time; //jo.Call<float>("time1",Time.time); get1.text = "get "+jo.Call<float>("time1",Time.time); } if (Application.platform== RuntimePlatform.Android){ get1.text = ""+jo.Get<float>("x1"); } } public void GetMessage(string txt){ dis.text = txt; } void OnGUI() { if (GUI.Button(new Rect(10, 50, 150, 50), "Button0")){ if (Application.platform== RuntimePlatform.Android){ jo.Call("button0"); } } if (GUI.Button(new Rect(10, 150, 150, 50), "Button1")){ if (Application.platform== RuntimePlatform.Android){ jo.Call("button1"); } } if (GUI.Button(new Rect(10, 250, 150, 50), "Button2")){ if (Application.platform== RuntimePlatform.Android){ jo.Call("button2"); } } if (GUI.Button(new Rect(10, 350, 150, 50), "Button3")){ if (Application.platform== RuntimePlatform.Android){ jo.Call("button3"); } } } }
android檔案
public class SDKToUnityActivity extends NativeActivity{ private static final int USERINFO_WHAT = 1; private static final int UPDATE_SCORE_WHAT = 2; private static final int RANKING_WHAT = 3; private static final int clientId = 1;//使用者自己的專案id private static final String clientSecret = "971efa9be0ac8d5f088242d9f77f78e4";//專案的祕鑰 OpenCenterAuth auth; SsoHandler ssoHandler; AccessToken accessToken; ObjectAsynTask objectAsynTask; Handler handler = new Handler(){ public void handleMessage(android.os.Message msg) { switch (msg.what) { case USERINFO_WHAT: OpenCenterData.getUserInfo(SDKToUnityActivity.this, auth, accessToken, new MyDataListener()); break; case UPDATE_SCORE_WHAT: Log.d("", msg.what+"---------------------"+msg.arg1); OpenCenterData.updateScore(SDKToUnityActivity.this, auth, accessToken, msg.arg1 , new MyDataListener()); break; case RANKING_WHAT: OpenCenterData.getRanking(SDKToUnityActivity.this, auth, accessToken, new MyDataListener()); break; default: break; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); //初始化授權資訊 auth = new OpenCenterAuth(this, clientId, clientSecret, ""); } /** * 授權的方法auth */ public void button0() { ssoHandler = new SsoHandler(this, auth); ssoHandler.authorize(new MyAuthListener()); } /** * 獲得使用者資訊呼叫的方法getUserInfo */ public void button1() { handler.sendEmptyMessage(USERINFO_WHAT); } /** * 增加分數的呼叫方法 addScore * @param score */ public void button2() { Message msg = new Message(); msg.what = UPDATE_SCORE_WHAT; msg.arg1 = 59; handler.sendMessage(msg); } /** * 獲得使用者的排名getRank */ public void button3() { handler.sendEmptyMessage(RANKING_WHAT); } /** * 授權的監聽器 * @author Gc * */ class MyAuthListener implements OnOpenCenterAuthListener{ /** * 成功時呼叫的方法 */ @Override public void onComplete(String arg0) { //儲存token accessToken = Oauth2AccessToken.parseAccessToken(arg0); //告知unity授權成功 //第一個引數為unity類所繫結的遊戲物件 //第二個引數為unity方法名 //第三個引數為unity方法的引數 UnityPlayer.UnitySendMessage("Main Camera", "GetMessage" ,"success "+arg0); } /** * 取消時呼叫的方法 */ @Override public void onCancel() { UnityPlayer.UnitySendMessage("Main Camera", "GetMessage" ,"onCancel = "); } @Override public void onOpenCenterException(Exception arg0) { UnityPlayer.UnitySendMessage("Main Camera", "GetMessage" ,"Exception "); } } /** * 授權成功與否都會回到這個函式,在這裡面呼叫回撥的方法,ssoHandler會根據返回的值自動呼叫監聽器相應的方法 */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); if (ssoHandler != null) { ssoHandler.authorizeCallBack(requestCode, resultCode, data); } } /** * 獲取資訊的監聽器 * @author Gc * */ class MyDataListener implements OnOpenCenterDataListener{ @Override public void OnSuccess(Object obj, int tid) { UnityPlayer.UnitySendMessage("Main Camera", "GetMessage" ,"OnSuccess--" + obj); } @Override public void OnNoNetWork(int tid) { UnityPlayer.UnitySendMessage("Main Camera", "GetMessage" ,"NoNetWork--" ); } @Override public void OnConnectionTimeout(int tid) { UnityPlayer.UnitySendMessage("Main Camera", "GetMessage","ConnectionTimeout--"); } @Override public void OnConnectionFail(int tid) { UnityPlayer.UnitySendMessage("Main Camera", "GetMessage","OnConnectionFail--"); } } }
Unity for Android 比較特殊,Unity for IOS 打包是將XCODE工程直接交給開發者,開發者可以在工程的基礎上繼續新增新的檢視,最後由開發者自行打包生成IPA包,釋出程式。而Unity for Android打包直接生成APK包,等於說原始碼開發者是看不到的,但是Unity的自身確實有些侷限,針對Android平臺我們需要學習如何在Unity中呼叫Android的JAVA程式碼。本章我們的目標是使用Unity的指令碼開啟Activity。首先我們建立一個普通的Android工程,目錄結構如下圖所示。
因為專案需要使用Unity提供的介面,所以需要將介面classes.jar引入至當前工程但中。介面包的所在地,開啟Finder->應用程式->Unity->點選Unity圖示,滑鼠右鍵選擇“顯示包內容”->Contents->PlaybackEngines->AndroidPlayer->bin->classes.jar 。介面包引入工程後,開始編寫JAVA程式碼。
UnityTestActivity.java
- package com.xys;
- import android.content.Context;
- import android.content.Intent;
- import android.os.Bundle;
- import com.unity3d.player.UnityPlayerActivity;
- publicclass UnityTestActivity extends UnityPlayerActivity {
- /** Called when the activity is first created. */
- Context mContext = null;
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- mContext = this;
- }
- publicvoid StartActivity0(String name)
- {
- Intent intent = new Intent(mContext,TestActivity0.class);
- intent.putExtra("name", name);
- this.startActivity(intent);
- }
- publicvoid StartActivity1(String name)
- {
- Intent intent = new Intent(mContext,TestActivity1.class);
- intent.putExtra("name", name);
- this.startActivity(intent);
- }
- }
UnityTestActivity是主Activity,Unity程式一起動就會呼叫這個Activity,它是在AndroidManifest.xml中配置的。它需要繼承UnityPlayerActivity,然而它就是剛剛我們引入的classes.jar包中提供的介面類。UnityTestActivity對外提供了兩個方法介面,StartActivity0(String name) 方法與StartActivity1(String name)方法,這兩個方法是在Unity中使用C#指令碼呼叫的,意思是呼叫後程序將開啟一個新的Activity,引數name也是由C#指令碼傳遞過來的,接著將傳遞的String引數繼續傳遞給新開啟的Activity。
TestActivity0.java
- package com.xys;
- 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;
- publicclass TestActivity0 extends Activity {
- /** Called when the activity is first created. */
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.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() {
- @Override
- publicvoid onClick(View v) {
- TestActivity0.this.finish();
- }
- });
- }
- }
TestActivity1.java
- package com.xys;
- 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;
- publicclass TestActivity1 extends Activity {
- /** Called when the activity is first created. */
- @Override
- publicvoid onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.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() {
- @Override
- publicvoid onClick(View v) {
- TestActivity1.this.finish();
- }
- });
- }
- publicvoid Start()
- {
- }
- }
使用this.getIntent().getStringExtra(“name”)方法,得到上個介面傳遞過來的字串,並且顯示在螢幕中,用於區分新開啟的Activity。TestActivity0與TestActivity1是兩個新開啟的Activity,它們屬於Unity程式的子Activity所以它不需要繼承UnityPlayerActivity,直接繼承Activity即可,在程式碼中監聽了一個按鈕,意思是點選按鈕後關閉當前的Activity。
接著是程式碼中開啟的一個佈局檔案,這個應該沒什問題,學過Android開發的朋友應該都能看懂,我就不詳細解釋了。
main.xml
- <?xmlversion="1.0"encoding="utf-8"?>
- <ScrollViewxmlns:android="http://schemas.android.com/apk/res/android"android:id="@+id/screen"
-
android:layout_width="fill_parent"
相關推薦
android與unity3d互相互動
請參看“Android和Unity3d互相呼叫的Demo”的資源 實際上Android調Unity就是用 //第一個引數為unity類所繫結的遊戲物件 //第二個引數為unity方法名 //第三個引數為unity方法的引數 UnityPlayer
Android與JS互相調用以及註意
import 調用 spa sha 技術 作用 zhang ces wan 近期項目中常常使用Html5而Android與JS調用常常會用到,這裏記錄一下,測試系統5.0以上。這裏先貼一下源代碼Activity:package jwzhangjie.com.webview
Android混合開發-(Android與Web的互動)
在Android開發中,越來越多的商業專案使用了Android原生控制元件與WebView進行混合開發,當然不僅僅就是顯示一個WebView那麼簡單,有時候還需要本地Java程式碼與HTML中的JavaScript進行互動,Android也對互動做了很好的封裝,所以很容易實現例如:點選網頁中的按鈕A
Android與HTML+JS互動
原創文章 ,首發在 http://blog.csdn.net/leejizhou/article/details/50894531李濟洲的部落格 在Android開發中,越來越多的商業專案使用了android原生控制元件與WebView進行混合開發,當然不僅僅就是顯示一個WebView那
android與java web互動完成簡單的登入和註冊
本文的知識點包括android客戶端的網路程式設計、訊息機制、IO流、多執行緒和java web伺服器端的servlet、資料庫操作、javabean技術、工具類和測試類的使用。 客戶端 執行效果圖 佈局檔案 activity_main.xml <
Android 與 h5 js互動問題,初步瞭解。
接觸Android也算很久了,但是js互動一直不熟也可以說是沒認真接觸過。今天專案修改也完成了,閒來無事忽然想起了這個問題,上網查找了一下,初步瞭解了一下。自己也寫了demo還算ok! 廢話不多說了,咱直接來說一下。(寫這個呢可能幫不到太多人,但是想讓自己印象深刻一些!) 首先,js互動分為
Android與JavaWeb伺服器互動教程(3)-一個簡單的Android專案
1.前言 是時候該寫Android端了。。。 2.建立專案 3.匯入xUtils3框架 送上xUtil3框架的傳送門 附上jar包的下載地址: 百度雲 七牛雲 以及json的下載地址 七牛雲 百度雲 把jar包拷入libs
WebView的使用以及Android與Js的互動
1.WebView基礎使用 1.想要使用WebView,需要在<manifest>中新增許可權: <uses-permission android:name="android.permission.INTERNET" />2.我們可以在xml
Android與H5的互動
webView.setVerticalScrollBarEnabled(false);webView.setHorizontalScrollBarEnabled(false);webView.getSettings().setJavaScriptEnabled(true);//
Android實現登入功能,Android與伺服器資料互動,使用tomcat、mysql實現登入的demo程式,web端和android均可實現登入
1.使用到的開發工具為:Eclipse(Java EE),Android Studio,MYSQL 5.7.21;2.首先在MYSQL資料庫建表,我這裡使用的資料庫視覺化操作軟體為:navicat premium:如圖:這裡你可以取自己喜歡的資料庫名字,但是為了方便起見,我建
android與服務端互動的兩種方式
做android開發的程式設計師必須知道android客戶端應該如何與服務端進行互動,這裡主要介紹的是使用json資料進行互動。服務端從資料庫查出資料並以json字串的格式或者map集合的格式返回到客戶端,客戶端進行解析並輸出到手機螢幕上。 此處介紹兩種方式:
高德地圖元件在Android的應用以及Android與JavaScript的互動(一)
最近在慕課網學習了關於高德地圖元件的課程(其實就是一個廣告,內容和官網的API完全一樣),發現這個JavaScript API比Android API簡單方便多了,於是就打算放在Android APP上來實現,花了一點小功夫,但是最終還是實現了,後來打算擴充套件
android與網頁js互動 json傳參格式問題
如果不進行格式轉換,安卓客戶端獲取到的引數內容是undefined 網上存在多種方法: 1)jQuery外掛支援的轉換方式 $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以將json字串轉換成json物件 2)
Android與JS互相呼叫
1、HTML頁面 <!doctype html> <html> <head> <meta charset="utf-8"> <title>無標題文件</title> <script> va
android中Webview與javascript的互動(互相呼叫)
最近做android專案中遇到要在webview中做與js互動相關的東東,涉及到js中呼叫android本地的方法,於是查了資料整理了一下android和js互相呼叫的過程。如下demo,demo的主要實現過程如下:通過載入本地的html檔案(裡面有js指令碼),實現and
Android Studio 與 Unity3d互動。歸納版。
本來想自己整理下,發現有人整理了,直接搬運過來了。備忘。 原址:http://blog.csdn.net/u014230923/article/details/51363556 這次部落格講解 Android Studio 怎麼匯出專案到 Unity。 在這
Unity3D與Android(eclipse和AndroidStudio)互動問題
1. Android包名與unity的Android平臺簽名一致 2. 如果開發AndroidSDK Android支援版本和unity支援最低版本一致 3. 5.x 搜尋Classes.jar (找到unity安裝路徑 搜尋) Unity\Editor\Data\PlaybackEngines\Androi
Android與JS之間的互相呼叫互動(一)
Android裝置多解析度的問題Android瀏覽器預設預覽模式瀏覽 會縮小頁面 WebView中則會以原始大小顯示Android瀏覽器和WebView預設為mdpi。hdpi相當於mdpi的1.5倍 ldpi相當於0.75倍三種解決方式:1 viewport屬性 2 CS
Android Html互動_二_ JS與App互相呼叫
Android Html互動<二> JS與App互相呼叫 @(Android系統原始碼解析)[Android, html] 宣告:轉載請註明出處,知識有限,如有錯誤,請多多交流指正! 場景:html網頁中JS與App相互呼叫,相互傳輸資料
android與h5的互相互動傳參
最近幾年隨著h5的強勢崛起,越來越多的公司運用h5開發或者採用h5與android的混合開發,前端時間公司就碰到了一個h5就和android互動的專案,本人也是在摸索中一次次改進,廢話不說了直接上程式碼: 1.建議使用new Webview構建webview物件而不是直接