1. 程式人生 > >Unity中接入高德地圖 UI疊加與訊息處理

Unity中接入高德地圖 UI疊加與訊息處理

程式中有兩個UIView,高德地圖的View在下層,Unity的View在上層,當滑鼠點選到Unity中的UI或其他物件時,Unity截獲點選訊息,否則高德地圖處理點選訊息。

一:Unity設定NGUI Camera

Clear Flags 設定為:Solid Color

Background設定為黑色,alpha=0,完全透明

二:打包匯出Xcode工程:

 1.在Classes/UI/UnityView.mm中新增程式碼:

- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event

{

//判斷一下渲染API是否為metal,OpenGLES暫未實現

if(UnitySelectedRenderingAPI() == apiMetal)

{

// 獲取渲染surface

UnityDisplaySurfaceMTL* surf = (UnityDisplaySurfaceMTL*)GetMainDisplaySurface();

// 渲染surface尺寸

CGSize s = ((CAMetalLayer*)self.layer).drawableSize;

// 得到點選座標

CGPoint p = [self convertPoint:point toView:self];

// 座標轉換

CGFloat bw = self.bounds.size.

width;

CGFloat bh = self.bounds.size.height;

CGFloat box = self.bounds.origin.x;

CGFloat boy = self.bounds.origin.y;

CGFloat x = (p.x - box)/bw * s.width;

CGFloat y = (p.y - boy)/bh * s.height;

// 得到上一次渲染的Texture

MTLTextureRef lastTex = surf->lastSystemColorRB;

// 獲取Texture中此座標的顏色值

MTLRegion region = MTLRegionMake2D

(x, y, 1, 1);

Byte byteBuff[4];

[lastTex getBytes:byteBuff bytesPerRow:_surfaceSize.width*4 fromRegion:region mipmapLevel:0];

// 判斷Alpha值

int a = byteBuff[3];

if(a > 0 )

{

return YES;

}

else

{

return NO;

}

}

returnYES;

}

2:在Classes/Unity/UnityRendering.h中的UnityDisplaySurfaceMTL結構宣告中,新增OBJC_OBJECT_PTR MTLTextureRef lastSystemColorRB,用來儲存上一幀渲染Texture。

unsigned colorFormat;// [MTLPixelFormat]

unsigned depthFormat;// [MTLPixelFormat]

/**新增程式碼**/

OBJC_OBJECT_PTR MTLTextureRef lastSystemColorRB;

/**新增程式碼**/

END_STRUCT(UnityDisplaySurfaceMTL)

 3:在每次渲染前儲存lastSystemColorRB,修改Classes/Unity/MetalHelper.mm的StartFrameRenderingMTL函式

extern "C" void StartFrameRenderingMTL(UnityDisplaySurfaceMTL* surface)

{

// in case of skipping present we want to nullify prev drawable explicitly to poke ARC

surface->drawable = nil;

surface->drawable = [surface->layer nextDrawable];

// on A7 SoC nextDrawable may be nil before locking the screen

if (!surface->drawable)

return;

surface->systemColorRB= [surface->drawable texture];

/**新增程式碼**/

surface->lastSystemColorRB = surface->systemColorRB;

/**新增程式碼**/

// screen disconnect notification comes asynchronously

// even better when preparing render we might still have [UIScreen screens].count == 2, but drawable would be nil already

if (surface->systemColorRB)


4:修改Classes/Unity/MetalHelper.mm的CreateSystemRenderingSurfaceMTL函式程式碼:

extern "C" void CreateSystemRenderingSurfaceMTL(UnityDisplaySurfaceMTL* surface)

{

DestroySystemRenderingSurfaceMTL(surface);

MTLPixelFormat colorFormat = surface->srgb ? MTLPixelFormatBGRA8Unorm_sRGB : MTLPixelFormatBGRA8Unorm;

surface->layer.presentsWithTransaction = NO;

surface->layer.drawsAsynchronously = YES;

#if UNITY_OSX

MetalUpdateDisplaySync();

#endif

//修改程式碼位置

CGFloat backgroundColorValues[] = {0, 0, 0, 0};

CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceRGB();

CGColorRef backgroundColorRef = CGColorCreate(colorSpaceRef, backgroundColorValues);

surface->layer.backgroundColor = backgroundColorRef; // retained automatically

CGColorRelease(backgroundColorRef);

CGColorSpaceRelease(colorSpaceRef);

surface->layer.device = surface->device;

surface->layer.pixelFormat = colorFormat;

//新增程式碼位置

surface->layer.opaque=NO;

surface->layer.framebufferOnly = NO;

surface->colorFormat = colorFormat;

}


相關推薦

Unity接入地圖 UI疊加訊息處理

程式中有兩個UIView,高德地圖的View在下層,Unity的View在上層,當滑鼠點選到Unity中的UI或其他物件時,Unity截獲點選訊息,否則高德地圖處理點選訊息。 一:Unity設定NGUI Camera Clear Flags 設定為:Solid Color

UnityAndroid交互-Unity接入地圖實現定位以及搜索周邊的功能(使用Android Studio)詳細操作

nac mcc 以及 分享 pack create lis red 效果 剛進公司給安排的任務就是Unity接入高德地圖,算是踩了不少坑總算做出來了,抽點時間寫個博客記錄一下 廢話不多說 先上效果圖 獲取定位並根據手機朝向顯示周邊信息 使用的Unity

react-native安卓接入地圖

location 網上 native smart nbsp 我不 ava 獲取 插件 1.新建項目 2.申請高德key 1.註冊高德開發者 2.高德個人中心申請key 3.填寫信息 此時需要寫SHA1和packageName SHA1需要項目進

js實現地圖坐標經緯度轉百度地圖坐標

math.sqrt pan poi 結果 mat blog 筆記 百度 說明 1 function tobdMap(x, y) { 2 var x_pi = 3.14159265358979324 * 3000.0 / 180.0; 3

地圖01---在activity展示地圖

1 高德官網下載2D地圖開發包並匯入jar包 2 申請key,配置在工程的“AndroidManifest.xml”檔案中 <application android:allowBackup="true" android:icon="@drawabl

reactjs使用地圖計算兩個經緯度之間的距離

第一步下載依賴 npm install --save react-amap 第二步,在元件中使用 import React, { Component } from 'react' import { Link } from 'react-router-dom' import { Map

在vue專案引入地圖

1 在index.html檔案中引入js檔案<script type="text/javascript" src="http://webapi.amap.com/maps?v=1.4.0&key="></script> 2 334 3  

SpringCloud之如何在專案呼叫地圖API

登入高德開放平臺http://lbs.amap.com/,成為開發者,這個過程需要繫結郵箱。 成功後進入控制檯。點選應用管理。並建立新應用。應用名稱都可以自己看著填。 成功後就可以新增key了,當然,也要有名稱等資訊。 ------------------到這裡完成了第

Android開發知識(十)快速接入地圖SDK(地圖+定位+標記+路線規劃+搜尋)

目錄 申請接入流程 高德地圖的申請接入流程 1、首先到 [ 高德地圖API官網] 申請註冊帳號 2、進入控制檯,點選應用管理,我們建立一個新的應用: 3、為剛才建立的應用新增key: 隨便輸入一個key的名稱,這裡我們只討論Androi

vue-cli使用地圖

1.index.html   高德地圖基礎元件    <scripttype="text/javascript"src="http://webapi.amap.com/mapsv=1.4.4&key=你的key"></script>    高德

ANDROID專案嵌入地圖(一)配置環境+顯示地圖

最近在做專案中嵌入高德地圖的工作,覺得有必要記錄一下嵌入過程,雖然高德官方給說明文件了,但有寫並不明確需要去查類,查資料,再此把過程記錄一下。 一、顯示地圖 1.配置AndroidManifest.xml檔案 可能需要如下許可權: <!--允許程式開啟網路套接字-

日常工作記錄:接入地圖遇到的一個小坑

今天接入高德地圖的時候,按著官方文件的步驟接入,幾經辛苦(其實幾分鐘。。)終於完成,顯示的地圖的時候程式閃退。(下圖)本人百思不得其解明明就按著官方文件一字一句的CV進去,為何還報錯。看看了錯誤資訊,提示控制元件有問題,點進官方原始碼發現包路徑有問題。原因是官方給出的是3D地

Android 接入地圖SDK模組的優化點點滴滴

起因: 由於在最近接手了一個關於導航的App,發現地圖頁面跳來跳去實在是卡頓地不行(執行在車載裝置上的APP,機器效能實在是有限)。 初步判斷: 應該是是關於地圖等控制元件的反覆建立和銷燬,給記憶體GC帶來了很大的壓力。 簡單調查: 通過 命令 adb shell

java地圖爬取資料

    最近一個人負責公司的一個app專案開發,需要從高德地圖爬取杭州市全部的超市資訊,放入mongodb的資料庫中。做地理位置查詢。(mongodb這部分有時間補上)    首先去高德地圖建立一個開發者賬號,獲取一個開發web服務的高德key.這個是必須要有的,可以用我

java地圖根據座標具體地址互轉,計算兩地距離

package com.shineyoo.common.utils; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.io.BufferedReade

(自我學習篇之地圖)使用獲取marker的點選事件

獲取之後下載SDK然後倒入libs用什麼導什麼我先簡單說一個2D的實現與獲取marker的點選事件  3d的多了一步   OK就可以使用了   注意許可權 <uses-permission android:name="android.permission

地圖 key獲取Key錯誤解決方案

鑑於Android版SDK中出現的大量key驗證失敗問題,基本上都是在API控制檯申請AK的時候填寫的包名或者SHA1不正確導致的(包名或者SHA1的獲取詳見官方教程)。搜尋log,若出現"Authentication Error errorcode: 230 uid: -1 appid -1 msg: A

地圖精確查詢定位RegeocodeQueryGeocodeQuery

根據輸入的字串精確查詢位置,用GeocodeQuery查詢座標,然後根據獲取到的座標,用RegeocodeQuery查詢地址。例子中用了兩個頁面,一個是顯示地址資訊及定位的頁面,另一個是搜尋頁面,點選搜尋結果返回顯示頁面,顯示資訊並定位: 顯示並定位的頁面: publi

解決地圖key錯誤sha1不匹配或MD5安全碼未通過問題

在開發模式中使用地圖功能時提示“使用者MD5安全碼未通過”,檢視高德官方文件,給予下面提示: *使用雲圖檢索、附近功能出現“key錯誤”、“使用者MD5安全碼未通過”、1008錯誤如何解決? 雲圖目前只支援使用釋出版SHA1,為了保證雲圖相關功能(業務資料

Android專案結合unity開發,接入3d地圖後,unity無法開啟場景報裝置不支援

近期在做android和unity的開發,同時專案中需要接入高德3d地圖,發現接入後地圖能顯示了,但是unity的場景無法載入了,總是提示裝置不支援,關於這點吐槽一下, 只要接入unity只要有一些沒注意的,都只會提示裝置不支援,這個還是比較坑的,最後就在網上找很多帖子看,都