Unity 和 iOS之間的通信(交互)

上一篇主要說了將Unity集成到原生iOS應(yīng)用程序中贞让,集成之后肯定是要通信的,所以這篇來說一下Unity 和 iOS之間的通信续镇。

1销部、iOS調(diào)用Unity的方法并傳參數(shù)

在UnityFramework中提供的有專門的方法,因此我們只要調(diào)用就可以了酱虎。
首先在AppDelegate.h中聲明一個調(diào)用方法擂涛,方便后面使用。

- (void)sendMessageWithName:(const char*)goName functionName:(const char*) functionName message:(const char*)msg;

在AppDelegate.m中實(shí)現(xiàn)方法

- (void)sendMessageWithName:(const char*)goName functionName:(const char*) functionName message:(const char*)msg{
     [self.ufw sendMessageToGOWithName:goName functionName:name message:msg];
}

這三個參數(shù)還是要解釋一下的

goName:表示Unity里面的場景的名字恢暖,Unity中方法一般是通過添加腳本的方式踩身,使用C#來進(jìn)行定義,每一個腳本都對應(yīng)一個使用的場景琼娘,這邊后面會簡單說一下這個場景附鸽。

functionName:就很好理解,iOS調(diào)用Unity具體的方法名字熄浓。

msg:就是方法的參數(shù)

針對上面??的,我們簡單做一個小demo(會的就直接跳過 );

我們就簡單將原生iOS的值傳遞給Unity俯在,并通過Label顯示出來娃惯。

我們在unity中創(chuàng)建一個Text和腳本,并把腳本綁定在這個場景中愕提。


雙擊腳本進(jìn)入代碼編寫皿哨,我這時(shí)候添加一些庫的引用证膨,聲明上面的Text,以及書寫方法修改Text的指,這里的方法正是給原生調(diào)用的方法椎例。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using System.Runtime.InteropServices;

public class ChangeLabel : MonoBehaviour
{
     public Text text;
    [DllImport("__Internal")]
 
    public void changeLabel(string speedStirng) {
        text.text = speedStirng;
    }
}

到這unity工程就到此結(jié)束了订歪。
在原生工程中調(diào)用了

AppDelegate *appDelegate = (AppDelegate *)([UIApplication sharedApplication].delegate);
    [appDelegate showUnityView];
    [appDelegate sendMessageWithName:"Canvas" functionName:"changeLabel" message:"好硬好強(qiáng)呀~~~~~"]

2肆捕、Unity調(diào)用iOS的方法并傳參數(shù)

首先創(chuàng)建一個.h和.mm文件,用來書寫需要交互的方法眼虱。
上代碼 NativeCallProxy.h

#import <Foundation/Foundation.h>
@protocol NativeCallsProtocol

@required

- (void)iOSLog:(NSString *)value;


@end

__attribute__ ((visibility("default")))

@interface FrameworkLibAPI : NSObject
// call it any time after UnityFrameworkLoad to set object implementing NativeCallsProtocol methods
+(void) registerAPIforNativeCalls:(id<NativeCallsProtocol>) aApi;

@end

iOSLog 用來打印unity中的的文本席纽。
NativeCallProxy.mm

#import <Foundation/Foundation.h>
#import "NativeCallProxy.h"


@implementation FrameworkLibAPI

id<NativeCallsProtocol> api = NULL;
+(void) registerAPIforNativeCalls:(id<NativeCallsProtocol>) aApi
{
    api = aApi;
}

@end


extern "C" {

void iOSLog(const char * value);

}


void iOSLog(const char * value){
    
    return [api iOSLog:[NSString stringWithUTF8String:value]];
    
}

然后將剛才的兩個文件拖到unity 中

在Assets文件夾中新建Plugins文件夾润梯,然后在Plugins文件夾中新建iOS。將上訴兩個文件拖入其中寇钉。


image.png

現(xiàn)在我們在場景上新建一個輸入框和一個按鈕舶赔,點(diǎn)擊按鈕將輸入框的內(nèi)容,通過iOSLog打印出來撵溃。


image.png

控件創(chuàng)建好之后,在腳本中申明一下input石咬。并書寫相應(yīng)邏輯
上代碼

using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using UnityEngine;
using UnityEngine.UI;

public class ChangeLabel : MonoBehaviour
{
    public Text tmpText;
    public InputField tmpInput;

    
    public void changeLabel(string speedStirng) {
        tmpText.text = speedStirng;
    }

    public void btnClick(){
       iOSLog(tmpInput.text);
    }

    //這個很重要鬼悠,關(guān)聯(lián)iOS方法
    [DllImport("__Internal" )]
     static extern void iOSLog(string value);
}


申明之后就是將input關(guān)聯(lián)到場景中亏娜。


image.png

然后就OK了,打包出來看看效果它掂。
按照上一篇文章中說的溯泣,整合在一起。


image.png

看到了我們添加的文件了客给。


image.png

改為public
image.png

按照之前的操作
image.png

添加#import <UnityFramework/NativeCallProxy.h>引用

注冊協(xié)議
[NSClassFromString(@"FrameworkLibAPI") registerAPIforNativeCalls:self];

最后可以在Appdelegate中實(shí)現(xiàn)協(xié)議里面的方法了

然后就可以run了

結(jié)果正確


image.png

代碼都在里面了(unity和Xcode 工程包也在里面):https://pan.baidu.com/s/13ywva1gPPkc334o7YCW_Lg

提取碼:e90o

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市桩引,隨后出現(xiàn)的幾起案子收夸,更是在濱河造成了極大的恐慌,老刑警劉巖厘灼,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件序苏,死亡現(xiàn)場離奇詭異,居然都是意外死亡围来,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門桶错,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胀蛮,“玉大人,你說我怎么就攤上這事退腥≡匍” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵嗅蔬,是天一觀的道長疾就。 經(jīng)常有香客問我,道長鸟废,這世上最難降的妖魔是什么漆诽? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上撇叁,老公的妹妹穿的比我還像新娘陨闹。我一直安慰自己,他們只是感情好趋厉,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布君账。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪闻牡。 梳的紋絲不亂的頭發(fā)上绳矩,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天翼馆,我揣著相機(jī)與錄音,去河邊找鬼应媚。 笑死,一個胖子當(dāng)著我的面吹牛祝峻,可吹牛的內(nèi)容都是我干的扎筒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼奥溺,長吁一口氣:“原來是場噩夢啊……” “哼骨宠!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起桦卒,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤匿又,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后裕偿,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體痛单,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年鸟妙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片垃瞧。...
    茶點(diǎn)故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡坪郭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出嗦锐,到底是詐尸還是另有隱情沪曙,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布碳默,位于F島的核電站缘眶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏该抒。R本人自食惡果不足惜顶燕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望欧引。 院中可真熱鬧恳谎,春花似錦、人聲如沸惠爽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽用僧。三九已至赞咙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間攀操,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工歹垫, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留颠放,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓暮芭,卻偏偏與公主長得像欲低,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子匾效,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容