亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

3Dtouch在Unity3D中的使用

2019-11-14 18:05:13
字體:
來源:轉載
供稿:網友

0、開篇:

     3D touch隨著iOS9發布,它并不是一個單獨的技術,而是可以分為PRessure sensitivity、quick action以及peek&pop。在官方的介紹中提到可以給游戲更好的體驗,但是實際上個人感覺除了pressure sensitivity能夠改變游戲的操作方式外,quick action以及peek&pop真心是為APP設計的。

1、pressure sensitivity的使用:

    首先在unity的腳本中添加檢查是否支持3D touch的函數,這個函數本質是調用iOS代碼的。

 [DllImport("__Internal")]    // return 1 when device is support 3d touch    private static extern int _checkForceTouchCapability(); public static int CheckForceTouchCapability()    {        return _checkForceTouchCapability();    }

對應的iOS代碼為

-(NSInteger)CheckForceTouchCapability{    if ([[[UIDevice currentDevice] systemVersion] floatValue] < 9.0) {        isSupport3DTouch = NO;        return 0;    }    if(self.rootViewController.view.traitCollection.forceTouchCapability == UIForceTouchCapabilityAvailable)    {        isSupport3DTouch = YES;        return 1;    } else {        isSupport3DTouch = NO;        return 0;    }}

下面是響應壓力變化的處理函數,這次用傳遞函數指針到oc代碼的方式來做,當然你也可以在iOS中使用UnitySendMessage方法。

private delegate void touch_event_callback_delegate(float force, float maximumPossibleForce);private static Action<float, float> touchEventCallback;[DllImport("__Internal")]private static extern void _registTouchEventCallback(touch_event_callback_delegate func);public static void RegistTouchEventCallback(Action<float, float> func)    {        touchEventCallback = func;        _registTouchEventCallback(ExecuteTouchEventCallback);    }[MonoPInvokeCallback(typeof(touch_event_callback_delegate))]private static void ExecuteTouchEventCallback(float force, float maximumPossibleForce)    {        touchEventCallback(force, maximumPossibleForce);    }

對應的iOS代碼為

typedef void (*registTouchEventCallbackFunc)(float, float);static registTouchEventCallbackFunc touchEventCallback = nil;-(void)registTouchEventCallback:(registTouchEventCallbackFunc) func{    touchEventCallback = func;}

unity生成的Xcode工程中有個UnityView.mm文件,為了能夠獲取iOS中的壓力變化,需要修改一下的代碼

- (void)touchesBegan:(NSSet*)touches withEvent:(UIEvent*)event{    UnitySendTouchesBegin(touches, event);    [UnityAppController UpdateForce:touches];}- (void)touchesEnded:(NSSet*)touches withEvent:(UIEvent*)event{    UnitySendTouchesEnded(touches, event);    [UnityAppController TouchesEndorCancelled:touches];}- (void)touchesCancelled:(NSSet*)touches withEvent:(UIEvent*)event{    UnitySendTouchesCancelled(touches, event);    [UnityAppController TouchesEndorCancelled:touches];}- (void)touchesMoved:(NSSet*)touches withEvent:(UIEvent*)event{    UnitySendTouchesMoved(touches, event);    [UnityAppController UpdateForce:touches];}
UpdateForce和TouchesEndorCancelled的定義為:
/** *  實時反饋壓感 * *  @param touches touch數據 */+(void)UpdateForce:(NSSet<UITouch *>*) touches{    if (isSupport3DTouch && touchEventCallback != nil) {        touchEventCallback(touches.anyObject.force, touches.anyObject.maximumPossibleForce);    }    }/** *  touchesEnded或者touchesCancelled觸發時的處理 */+(void)TouchesEndorCancelled:(NSSet<UITouch *>*) touches{    if (isSupport3DTouch && touchEventCallback != nil) {        touchEventCallback(0, touches.anyObject.maximumPossibleForce);    }}

其實用UnitySendMessage是最簡單的,在TouchesEndorCancelled中force直接賦值為0的原因是我在測試的過程中發現快速的點擊并且離開屏幕有時拿到的force不是0,這樣在游戲中使用這個力的時候會有問題。

2、quick action的應用

   目前想到的就是快速進入某個游戲場景吧,或者進入游戲后直接開啟某個UI,總之對游戲性上沒啥幫助。我在Demo中做的是快速進入場景2,默認應該是進入場景1。首先需要在info.plist中進行設置:

<key>UIapplicationShortcutItems</key>    <array>        <dict>            <key>UIApplicationShortcutItemIconType</key>            <string>UIApplicationShortcutIconTypePlay</string>            <key>UIApplicationShortcutItemTitle</key>            <string>JUMP TO SCENE 2</string>            <key>UIApplicationShortcutItemType</key>            <string>$(PRODUCT_BUNDLE_IDENTIFIER).action</string>            <key>UIApplicationShortcutItemUserInfo</key>            <dict>                <key>scene</key>                <string>2</string>            </dict>        </dict>    </array>

核心是設置UIApplicationShortcutItemUserInfo,因為我們拿到的參數是從userinfo中拿到的。在使用quick action時unity中的編程非常少,主要是iOS編程。

首先需要在UnityAppcontroller.mm中添加:

- (void)application:(UIApplication *)application performActionForShortcutItem:(UIApplicationShortcutItem *)shortcutItem completionHandler:(void (^)(BOOL succeeded)) completionHandler {    BOOL bHandledShortCutItem = [self handleShortCutItem:shortcutItem];    completionHandler(bHandledShortCutItem);}-(BOOL)handleShortCutItem:(UIApplicationShortcutItem*) shortcutItem{    BOOL handled = NO;    NSString *str = (NSString *)[shortcutItem.userInfo objectForKey:@"scene"];    if (str != nil) {        handled = YES;        UnitySendMessage("Interface", "ExecuteQuickAction", [str UTF8String]);    }        return handled;}

這個系統方法是用于處理在screen使用quick action進入游戲的??戳撕芏鄤e人寫的例子,在didFinishLaunchingWithOptions中會調用handleShortCutItem,然后返回NO,這樣可以避免performActionForShortcutItem的調用。但是實際在測試中發現完全不需要在didFinishLaunchingWithOptions中會調用handleShortCutItem。

 

3、peek&pop

     完全沒有想到怎么用到游戲中,而且發現在peek時會有一個模糊的遮罩層。

4、Demo地址:https://github.com/klkucan/Unity_For3DTouch

 

 

 

 

     


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久久av福利| 欧美激情乱人伦一区| 亚洲精品电影久久久| 一本一本久久a久久精品综合小说| 日韩欧美亚洲国产一区| 久久久久国产精品免费网站| 久久久久久国产| 久久91精品国产| 日本精品一区二区三区在线| 欧美中文字幕视频在线观看| 国产精品a久久久久久| 国产精品1234| 欧美壮男野外gaytube| 欧美激情在线一区| 欧美黑人性生活视频| 亚洲天堂av在线免费| 久久久久久久一区二区三区| 久久精品99久久久久久久久| 国产精品久久久久一区二区| 中文字幕国产精品久久| 久久久久久国产三级电影| www.国产精品一二区| 富二代精品短视频| 日韩精品免费电影| 性色av香蕉一区二区| 欧美午夜宅男影院在线观看| 成人国产精品av| 中文字幕亚洲一区| 日本午夜精品理论片a级appf发布| 亚洲美女av电影| 欧美黑人一级爽快片淫片高清| 亚洲成在人线av| 国产精品久久久久久久久久尿| 亚洲999一在线观看www| 98视频在线噜噜噜国产| 欧美一级免费视频| 亚洲免费电影在线观看| 日韩国产中文字幕| 91香蕉电影院| 中文字幕欧美日韩在线| 欧美交受高潮1| 国产丝袜视频一区| 一本色道久久88精品综合| 九九九久久国产免费| 亚洲一区av在线播放| 亚洲欧美日韩在线高清直播| 国产精品极品美女粉嫩高清在线| 91经典在线视频| 欧美极品美女视频网站在线观看免费| 亚洲欧洲视频在线| 欧美成人精品三级在线观看| 欧美日韩视频免费播放| 精品美女永久免费视频| 日韩精品免费视频| 欧美在线视频观看| 国产欧美日韩亚洲精品| 亚洲天堂av图片| 欧美精品激情blacked18| 欧日韩在线观看| 亚洲男人天堂视频| 欧美日韩在线观看视频| 国产亚洲精品久久久久久777| 欧美日韩午夜剧场| 久久视频在线播放| 川上优av一区二区线观看| 亚洲免费福利视频| 韩曰欧美视频免费观看| 97婷婷涩涩精品一区| 亚洲精品一区在线观看香蕉| 最新亚洲国产精品| 中文字幕亚洲欧美在线| 最近更新的2019中文字幕| 97视频免费观看| 亚洲另类xxxx| 久久国产精品影片| 91人成网站www| 国产精品尤物福利片在线观看| 亚洲欧洲一区二区三区在线观看| 亚洲欧美三级在线| 国产精品吴梦梦| 亚洲第一综合天堂另类专| 国产精品福利在线观看网址| 亚洲国产三级网| 免费99精品国产自在在线| 97香蕉久久夜色精品国产| 国产欧美 在线欧美| 精品国模在线视频| 国产香蕉精品视频一区二区三区| 精品亚洲一区二区三区在线播放| 九九视频直播综合网| 91亚洲人电影| 亚洲色图欧美制服丝袜另类第一页| 成人黄色免费网站在线观看| 国产欧美日韩精品专区| 亚洲精品99999| 欧美高清在线观看| 国产精品成人免费视频| 日韩av网站电影| 日韩欧美在线视频免费观看| 亚洲高清福利视频| 91精品啪aⅴ在线观看国产| 欧美日韩成人免费| 疯狂蹂躏欧美一区二区精品| xvideos国产精品| 国产日韩欧美在线| 国产婷婷97碰碰久久人人蜜臀| 国产精品久久久久久久久免费| 自拍偷拍亚洲区| 992tv在线成人免费观看| 久久影视免费观看| 综合网日日天干夜夜久久| 欧美麻豆久久久久久中文| 国模精品视频一区二区三区| 丝袜一区二区三区| 日韩福利视频在线观看| 欧美激情免费观看| 精品久久在线播放| 亚洲精品国产欧美| www国产91| 日韩欧美在线观看视频| 欧美日韩在线观看视频小说| 欧美日韩成人黄色| 在线日韩日本国产亚洲| 日韩av电影在线播放| 日韩电影在线观看永久视频免费网站| 色综合色综合久久综合频道88| 亚洲激情成人网| 亚洲一区二区日本| 亚洲欧美综合图区| 视频一区视频二区国产精品| 国产欧美日韩综合精品| 亚洲国产婷婷香蕉久久久久久| 亚洲视频在线观看免费| 久久99精品久久久久久噜噜| 久久久久久这里只有精品| 中文字幕亚洲无线码在线一区| 国产精品视频内| 久久久免费精品视频| 午夜剧场成人观在线视频免费观看| 久久成人国产精品| 欧美成人免费网| 日本免费一区二区三区视频观看| www.亚洲成人| 日韩美女视频免费在线观看| 91久久精品久久国产性色也91| 搡老女人一区二区三区视频tv| 日韩高清电影好看的电视剧电影| 欧美色道久久88综合亚洲精品| 清纯唯美亚洲综合| 久久精品国产2020观看福利| 欧美性jizz18性欧美| 26uuu另类亚洲欧美日本老年| 久久久噜噜噜久久中文字免| 亚洲人成电影网| 国产精品久久久久久久久免费看| 欧美成人午夜激情视频| 国产91九色视频| 青草热久免费精品视频| 日韩性xxxx爱| 人妖精品videosex性欧美| 亚洲一区二区三区xxx视频| 97超级碰在线看视频免费在线看| 午夜精品一区二区三区在线视| 亚洲欧美综合图区|