Unity3D和IOS的互動教程——通過URL啟動APP並傳遞引數
最近專案(麻將手遊)中遇到這樣一個需求:在建立一個私人房後通過ShareSDK分享一個連線到微信,點選這個連線後設備將跳轉至下載頁面或是啟動APP並直接進入到指定房間。由於目前沒有原生IOS的開發經驗,在發揮面向百度程式設計師的特長之後,寫出來下面的方案並用於專案中,實測可行,特來分享,希望不足之處還請指出;
工程環境:Unity 5.2.2 + Xcode7.3.1
1.喚醒APP並傳遞引數
在Unity釋出出的Xcode工程中按下圖進行設定;URL Schemes位置填寫的內容可以理解為你給你的APP起的名字,當其他人喊你的名字後你將會迴應(PS.感興趣的同學可以在Safari裡面輸入 weixin://dl/profile ,可以看到世界上程式設計最厲害的人),當然,你可以有很多名字或是外號,你都可以新增進去;
設定完成後將會在下圖位置看到你剛才給APP“起的名字”;
如果此時真機除錯,我們將能通過 WarTree:// 啟動這個APP;
WarTree://Content 將啟動APP並將這一整句傳進APP(Content處為想傳遞的引數,我在我的專案裡傳遞的是Mahjong://pid=0&roomID=0&time=0);
2.接收URL傳遞的引數
讓我們回到Xcode工程裡,找到下圖中的UnityAppController.mm指令碼;// 新增這句程式碼,它負責向Unity傳遞引數; extern void UnitySendMessage(const char *, const char *, const char *); // 新增這個全域性變數,用於儲存APP啟動時URL傳遞的引數; // 由於需要等遊戲的主要模組載入完畢後再向Unity傳送訊息,所以此處用了這個全域性變數;等待遊戲載入完後通知IOS; NSString *URLString = @""; // 此處是個坑,IOS9以後的系統走的是這個介面,而我在Unity5.2.2中釋出的Xcode工程只有下面那個介面; - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options { URLString = [url absoluteString]; // 針對喚醒APP的情況傳遞引數; UnitySendMessage( "Main Camera", [@"OpenIosApp" UTF8String], [URLString UTF8String] ); return YES; } // 這個是我釋出成Xcode後自帶的,裡面的內容不只有這些,只需加上前兩行即可; - (BOOL)application:(UIApplication*)application openURL:(NSURL*)url sourceApplication:(NSString*)sourceApplication annotation:(id)annotation { URLString = [url absoluteString]; // 針對喚醒APP的情況傳遞引數; UnitySendMessage( "Main Camera", [@"OpenIosApp" UTF8String], [URLString UTF8String] ); return YES; }
3.IOS傳送訊息給Unity
經過上一步我們通過UnitySendMessage即向Unity傳送了資訊,它有三個引數;如果我在一個名字為Script.cs的腳本里寫了一個名字為Function的方法,並且這個指令碼掛載了一個名字為GameObject的物體上; 那麼就可以在Xcode的腳本里這麼寫:UnitySendMessage(GameObject,Function,"我來傳話啦"); 結合上文,我此處應該在掛在Main Camera上的某個腳本里寫如下函式;
public void OpenIosApp( string parmaters ) { GameDebug.Log( "openUrl傳過來的字串為: " + parmaters ); }
4.Unity傳送訊息給IOS
在Unity中寫如下程式碼;using System.Runtime.InteropServices;
[DllImport("__Internal")]
private static extern void _GetURLString ();
// 當遊戲模組載入完畢後呼叫;
public static void GetURLString()
{
_GetURLString();
}
回到剛才Xcode工程的指令碼中寫如下程式碼;
extern "C"
{
void _GetURLString();
}
void _GetURLString()
{
// 針對啟動APP的情況傳遞引數;
UnitySendMessage( "Main Camera", [@"OpenIosApp" UTF8String], [URLString UTF8String] );
// 清空,防止造成干擾;
URLString = @"";
}
至此,Unity和IOS之間的互相通訊已經建立成功。
相關推薦
Unity3D和IOS的互動教程——通過URL啟動APP並傳遞引數
最近專案(麻將手遊)中遇到這樣一個需求:在建立一個私人房後通過ShareSDK分享一個連線到微信,點選這個連線後設備將跳轉至下載頁面或是啟動APP並直接進入到指定房間。由於目前沒有原生IOS的開發經驗,在發揮面向百度程式設計師的特長之後,寫出來下面的方案並用於專案中,實測可
通過網頁開啟App並傳遞引數
如果想要從網頁中開啟App,只要在AndroidManifest.xml檔案中設定Activity的相關屬性則可,具體如下: <activity android:name=".StartActivity"> <int
使用URL 啟動unity Andriod APP並傳遞引數
我的棋牌遊戲需要一個功能: 房主微信分享一個內容(微信的URL),上面包含有url,標題,內容,略圖。當被邀請人點選分享的內容,可以直接開啟這個遊戲,並登入後直接登入這個房間。不需要人工記憶房間號等。 OK,這裡我們就要用到幾個知識點: 1、微信SDK-分享URL 2、
Unity3D 和 Android 互動時遇到的常見的兩個問題
CommandInvokationFailure: Failed to re-package resources. E:\android\android-sdk-windows\android-sdk-windows\build-tools\25.0.2\aapt.exe package
Android&iOS:如何在外部啟動app(若有安裝APP, 則自動啟動app(使用 URL Schema), 若沒有安裝, 則詢問是不是到應用市場下載)
Android&iOS:如何在外部啟動app(若有安裝APP, 則自動啟動app(使用 URL Schema), 若沒有安裝, 則詢問是不是到應用市場下載) 原理:用瀏覽器開啟下載網頁html, 利用javascript進行條件判斷。 <head>
[Unity3D]Unity+Android互動教程——讓手機"動"起來
想要用Unity實現一個二維碼掃描的功能,然後網上找外掛,找到一個貌似叫EasyCodeScanner,但下載下來用用,真不好使,一匯入執行就報錯,調好錯了再執行發現點按鈕沒反應,反覆試了幾遍發現還是沒反應,沒辦法看原始碼,結果發現只實現了IOS部分,沒有Android部分,我屮艸芔茻...,神傷!用IO
通過URL啟動應用程式
html <a href="myApp://Hello!">點選這裡啟動程式</a> reg.reg Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\myAp
在一個jsp頁面接收另一個jsp頁面通過URL方式傳過來的引數
例如在一個jsp頁面有如下程式碼: <a href="${pageContext.request.contextPath}/family/send.jsp?grade=1"></a> 那麼怎麼在另個jsp頁面直接接收grade的值呢? 方法如下:
通過URL開啟APP
如果想要從網頁中開啟App,只要在AndroidManifest.xml檔案中設定Activity的相關屬性則可,具體如下: <activity android:name=".StartActivity"> <intent-filt
安卓通過url開啟app,以及下載對應app
一.使用Custom Scheme URI開啟APP 就Android平臺而言,URI主要分三個部分:scheme, authority and path。其中authority又分為host和port。格式如下: scheme://host:
Android 啟動另外的APP及傳遞引數
有時候需要從一個APP中啟動另外一個APP,比如Twitter/微信等。如果你不知道那個APP的Activity,但是知道包名(package name),那麼可以使用如下的方法:Intent LaunchIntent = getPackageManager().getLaun
url中向後臺傳遞引數中文亂碼
方法一: 1、jsp中程式碼 var userNo = $('#prisoner_id').val(); userNo = encodeURI(userNo); allPrisonerGrid.datagrid('options').url = 'mobilemanage!all
GridView實現超連結列和圖片列,跳轉頁面並傳遞引數
「注意!請勿私自轉載!」 最近在使用ASP.NET建設網站,需要解決如標題所示的問題,上網可以搜出很多答案。現在簡單總結一下我的解決辦法,方便各位取用,有任何疑問歡迎提出交流。 (注:使用V
vue 頁面跳轉(兄弟元件)通過路由或vuex 進行傳遞引數,並且實現重新整理資料不消失
用vue搭建整個前端頁面,需要實現一個資訊列表的顯示,當點選某一項時,跳轉到另外一個頁面顯示具體的資訊詳情。那麼像這種兄弟之間的頁面如何傳遞參呢?我們都知道在 Vue.js 的專案中,如果專案結構簡單,
WPF 利用Process.Start()方法啟動指定路徑下的exe檔案並傳遞引數
簡單來說就是實現一個程式A 開啟程式B,並且在開啟的時候傳遞一些引數給B,最後在B視窗上顯示出引數,這個小功能也是折騰了我半天。現在把我的過程整理記錄下來。 1.首先我們得有一個被呼叫的程式,新建一個簡單的WPF程式,命名為:argTest。裡面加一個label,用來顯示接
cmake教程5-macro巨集定義以及傳遞引數給原始檔
引入在C++程式中我們經常見到如下,兩個問題: 1. 輸出當前程式的版本號 2. 通過cmake新增macro巨集定義 出入到原始檔,例如在編譯opencv/caffe的時候,我們通過cmake -DUSE_CUDA=ON/OFF來確定,是否使用c
Android--通過網頁開啟APP並傳值詳解
本來這篇部落格應該寫Git的,但是由於最近專案比較忙,Git的內容還沒有整理完(因為還有GitLab以及Github的內容),所以先寫了這片部落格總結以下比較零碎的東西。現在正在做商城
Swift3.0通過閉包回撥傳遞引數 / @escaping
//載入請求資料 func loadData(completion: @escaping (_ result:[String]) -> ()) -> () { DispatchQueue.global().async {
Android -- 啟動Service並傳遞資料
本文主要記錄Activity傳遞資料到Service。 原始碼與上一篇基本是保持一致的,只是在跳轉過程中增加了引數的傳遞。 我們先來看效果。 1、效果圖 2、通過以上效果圖,可以看出
向Url傳送post請求傳遞引數
#region 向Url傳送post請求,返回網站響應內容 /// <summary> /// 向Url傳送post請求,返回網站響應內容 /// </summary> ///