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.
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
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
Unity與Android交互-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
高德地圖精確查詢與定位RegeocodeQuery與GeocodeQuery
根據輸入的字串精確查詢位置,用GeocodeQuery查詢座標,然後根據獲取到的座標,用RegeocodeQuery查詢地址。例子中用了兩個頁面,一個是顯示地址資訊及定位的頁面,另一個是搜尋頁面,點選搜尋結果返回顯示頁面,顯示資訊並定位: 顯示並定位的頁面: publi
解決高德地圖key錯誤與sha1不匹配或MD5安全碼未通過問題
在開發模式中使用地圖功能時提示“使用者MD5安全碼未通過”,檢視高德官方文件,給予下面提示: *使用雲圖檢索、附近功能出現“key錯誤”、“使用者MD5安全碼未通過”、1008錯誤如何解決? 雲圖目前只支援使用釋出版SHA1,為了保證雲圖相關功能(業務資料
Android專案結合unity開發,接入高德3d地圖後,unity無法開啟場景報裝置不支援
近期在做android和unity的開發,同時專案中需要接入高德3d地圖,發現接入後地圖能顯示了,但是unity的場景無法載入了,總是提示裝置不支援,關於這點吐槽一下, 只要接入unity只要有一些沒注意的,都只會提示裝置不支援,這個還是比較坑的,最後就在網上找很多帖子看,都