Unity與IOS通訊
一、Unity呼叫OC函式,主要用於第三方SDK接入
從Unity傳送訊息呼叫OC程式碼在Unity場景上開啟一個UIWebView並傳入url開啟一個原生網頁
要想在Unity介面上開啟一個原生的UIWebView需要在unity介面上覆蓋一個新的UIView及其UIViewController,原理是獲取當前的unity場景(其實在IOS中也是一個UIViewController)的UIViewController,然後新增子頁面和子控制器:
這裡在Unity中新建一個場景,放置一個按鈕,實現點選按鈕開啟一個IOS原生UIWebView覆蓋在當前場景上,Unity工程結構如下:
將Test.cs腳本里面的OpenWebView函式繫結在按鈕上,點選按鈕觸發此函式開啟UIWebView,Test.cs指令碼定義如下:
//
//Test.cs
//
// Created by [JiangXinhou]
//
// Copyright [email protected] (http://blog.csdn.net/cordova)
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;// 加入執行時動態載入服務
public class Test : MonoBehaviour {
///開啟一個IOS原生網頁
public void OpenIOS(){
OpenWebView ("http://blog.csdn.net/cordova");
}
//引入內部動態連結庫函式【注意多個函式要多次新增下面的DllImport語句】
[DllImportAttribute("__Internal")] // 或[DllImport("__Internal")]
public static extern int OpenWebView (string url);
}
Test.mm檔案和IOS原生類檔案在匯出Xcode工程後編輯,Unity打包匯出Xcode工程後開啟:
這裡我們關心的是Class目錄下的UnityAppController.mm和Libraries目錄下的Plugins目錄,Plugins目錄即在Unity中新建的Plugins資料夾,以Plugins命名的資料夾會被系統識別出來,其子目錄IOS(或iOS)和Android目錄同樣會被識別,這裡在IOS目錄下新建Test.mm檔案和一個UIWebViewController類檔案,Test.mm用於通過c語言程式碼銜接Unity指令碼和OC語言進行通訊,獲取當前Unity場景,並在場景上覆蓋一個UIWebView,Test.mm程式碼如下:
//
// Test.m
//
// Created by [JiangXinhou]
//
// Copyright [email protected] (http://blog.csdn.net/cordova)
#import <Foundation/Foundation.h>
#import "UnityAppController.h"
#import "OpenWebViewController.h"
extern "C" int OpenWebView(const char *url){
//獲取Unity rootviewcontroller
UIViewController *unityRootVC = UnityGetGLViewController();
UIView *unityView = UnityGetGLView();
//建立我們需要開啟的webview
OpenWebViewController *webVC = [[OpenWebViewController alloc]init];
//傳入需要開啟的網址
webVC.url = [NSString stringWithUTF8String:url];
//新增一個自定義導航檢視把將要開啟的webview作為根檢視
UINavigationController *navVC = [[UINavigationController alloc]initWithRootViewController:webVC];
//新增到Unity場景的rootview
[unityRootVC addChildViewController:navVC];
[unityView addSubview:navVC.view];
return 0;
}
其中的UIWebView可以換成任何UIKit的ViewController,然後就可以寫OC程式碼了,這裡UIWebViewController示例程式碼如下:
//
// OpenWebViewController.h
// Demo
//
// Created by [email protected] on 4/30/16.
// Copyright (c) 2015 Jiangxh. All rights reserved.
//
#import <UIKit/UIKit.h>
@interface OpenWebViewController : UIViewController
/**
* 網址引數傳入
*/
@property (nonatomic, copy)NSString *url;
@end
//
// OpenWebViewController.m
// Demo
//
// Created by [email protected] on 4/30/16.
// Copyright (c) 2015 Jiangxh. All rights reserved.
//
#import "OpenWebViewController.h"
@interface OpenWebViewController ()<UIWebViewDelegate>
/**
* webview
*/
@property (nonatomic, strong)UIWebView *webView;
/**
* 載入網址頁面
*/
- (void)loadWebViewWithString: (NSString *)urlStr;
@end
@implementation OpenWebViewController
/**
* 檢視載入
*/
- (void)viewDidLoad {
[super viewDidLoad];
//背景色
self.view.backgroundColor = [UIColor grayColor];
//標題顯示當前網址
self.title = _url;
//新增導航欄返回按鈕
UIButton *returnBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[returnBtn setTitle:@"返回" forState:UIControlStateNormal];
[returnBtn sizeToFit];
[returnBtn addTarget:self action:@selector(CloseWebView) forControlEvents:UIControlEventTouchUpInside];
UIBarButtonItem *returnItem = [[UIBarButtonItem alloc]initWithCustomView:returnBtn];
self.navigationItem.leftBarButtonItem = returnItem;
//螢幕尺寸
CGFloat ApplicationW = [[UIScreen mainScreen] bounds].size.width;
CGFloat ApplicationH = [[UIScreen mainScreen] bounds].size.height;
// webview
_webView = [[UIWebView alloc] init];
//frame
[_webView setFrame:CGRectMake(2, 2, ApplicationW, ApplicationH - 2)];
//自適應
_webView.autoresizingMask = UIViewAutoresizingFlexibleHeight |UIViewAutoresizingFlexibleWidth;
_webView.scalesPageToFit = YES;
//設定webview的代理
_webView.delegate = self;
//新增到頁面
[self.view addSubview:_webView];
//載入網頁
[self loadWebViewWithString:_url];
}
/**
* 載入網址頁面
*/
- (void)loadWebViewWithString:(NSString*)urlStr {
// 網址字串轉URL
NSURL *url = [NSURL URLWithString:urlStr];
// url請求
NSURLRequest *request = [NSURLRequest requestWithURL:url];
// 載入url請求
[_webView loadRequest:request];
}
/**
* 關閉webview頁面
*/
- (void)CloseWebView {
[self.navigationController.view removeFromSuperview];
[self.navigationController dismissViewControllerAnimated:YES completion:nil];
}
#pragma mark webview委託方法
/**
* 開始載入
*/
- (void)webViewDidStartLoad:(UIWebView *)webView {
NSLog(@"開始載入...");
}
/**
* 載入完成
*/
- (void)webViewDidFinishLoad:(UIWebView *)webView {
NSLog(@"載入完成...");
}
/**
* 加載出錯
*/
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
NSLog(@"加載出錯:%@",[error localizedDescription]);
}
@end
@上面的Xcode工程如果在真機上除錯會報錯無法開啟網頁,解決辦法在下面你的文章中:
@還會出現會出現一種執行崩潰現象,報錯:ression_pvrtc OPENGL LOG: Creating OpenGL ES 2.0 graphics device (lldb)解決辦法如下:
執行結果:
二. IOS呼叫Unity指令碼的函式(UnitySendMessage函式)
在iOS中使用oc程式碼呼叫unity指令碼函式間接控制unity場景裡面的object等等,下面這篇文章的例子比簡單典型:
orz......有問題吐槽請留言,幫到您煩請幫頂一下,謝謝^_^
相關推薦
Unity與IOS通訊
一、Unity呼叫OC函式,主要用於第三方SDK接入從Unity傳送訊息呼叫OC程式碼在Unity場景上開啟一個UIWebView並傳入url開啟一個原生網頁要想在Unity介面上開啟一個原生的UIWebView需要在unity介面上覆蓋一個新的UIView及其UIViewC
unity反饋訊息到ios Unity與ios互動
本文學習怎麼在unity裡返回訊息到iOS,現實功能(點選unity裡面的按鈕傳遞一個字串到ios顯示在訊息對話方塊上,並且開啟一個新的VeiwContoller)。言歸正傳 首先我們建立一個unity工程,建立一個MainScript指令碼,程式碼如下: using
Unity與Java通訊
因為unity需要接入java的sdk,所以今天主要學習了一下相關的通訊方法。需要先做如下準備工作: 1、下載android SDK安裝包,http://pan.baidu.com/s/1dDGM8oD,裡面會包含sdk和eclipse兩個資料夾;
Unity與IOS互動,呼叫IOS系統相機和相簿
前面兩篇總結了一下unity與android的簡單互動和呼叫安卓系統相機和相簿,比較蛋疼的是,後來發現不同的測試機上會有不同的bug。。。下階段要一個一個的解決一下 今天總結一下與IOS的互動。這次我會跳過ios單獨的呼叫相機和相簿的講解,因為我對IOS不專業,講不好,如
unity與ios互動那點事兒
unity與ios互動 Unity中呼叫Objective-C/C++方法 1、[DllImport("__Internal")] 特性 在Unity新建專案中,Progect --> Create --> C# Script ,然後使用 [DllIm
Unity與Android通訊 04匯入Aar包
切換檢視到Project去,找到Testlibrary=>Build=>outputs=>aar,找到aar包,在aar包裡的XML不動包名,刪除lcon和Lable屬性,包裡的libs下的classe
Unity LuaFrameWork與Skynet通訊
百度了一下用Unity 與SKYNET通訊的基本沒什麼有手把手的文章。。打算搞一篇。不過對於新手來說。。SKYNET不好上手,相關的資料比較少。而且SKYNET使用的主體語言是LUA,在Unity方面,為了熱更新大家都會使用ToLua#, ToLua#的現成框架就是LuaFr
iOS 主動與native 通訊
flutter與Native互動是必不可少的,今天梳理一下,flutter監聽native訊息 大致流程 flutter註冊EventChannel flutter EventChannel監聽native訊息 native通過EventChannel傳送訊息 程式碼梳
通過aar包實現Unity與安卓間的通訊
前言:(最近做了一個虛擬現實和物聯網專案,名字聽起來高大上,其實就是用Unity做個安卓端的虛擬現實場景,然後通過藍芽接收單片機發來的溫度資料,在場景裡顯示。由於Unity引擎本身沒法呼叫藍芽,所以需要通過呼叫安卓aar包來呼叫藍芽,所以涉及到了安卓和unity之間的通訊。)
IOS藍芽4.0與讀卡器通訊
IOS學習也一段時間了,該上點乾貨了。前段時間研究了一下IOS藍芽通訊相關的東西,把研究的一個成果給大家分享一下。 一 專案背景 簡單介紹一下做的東西,裝置是一個金融刷卡器,通過藍芽與iphone手機通訊。手機端的app通過傳送不同的指令(通過藍芽)控制刷卡器執行一些動作
iOS Client 與WebSocket 通訊(一)
這一篇我們先了解一下基本知識,這樣對我們後面的學習更加有幫助 。 Socket,WebSocket,Http,Tcp等這些我們已經聽的耳朵有繭了,但是用得時候
Unity 與C#伺服器 實現Socket的UDP通訊(多客戶端)
前言 上一篇簡單的介紹了下Unity客戶端和伺服器的Socket通訊,但是還不能實現多個客戶端與伺服器的通訊,所以今天在這邊把前面的工程完善一下(使用的是上篇講到的UdpClient類來實現),實現多個客戶端與伺服器的udp通訊。效果圖如下,兩個客戶端可以向伺服器傳送訊息,
使用UDP方式 與iOS端App通訊
首先需要安裝一個TCP&UDP測試工具 連線型別選擇UDP 目標IP 設定手機的IP, 埠8888 (這個埠在App端用來繫結) 指定埠, 是App向回發信息所需要的埠,
Node.js 基於 ursa 模組的 RSA 加密解密(已與IOS,Android實現加密通訊)
前幾天除錯一個RSA加密,遇到一些問題,在網上找了好久好久,與Node.js相關的資源少得非常可憐,最後還是靠自己一步一步解決了,今天把程式碼和一些心得拿出來分享一下: cnode連結地址:https://cnodejs.org/topic/54d2de4cf
unity 與android交互
andro android版本 代碼 http 分享 cnblogs 希望 java blog 使用eclipse新建一個Android應用工程,在新建的過程中,使得這個工程的包名和Unity工程的包名一致,我選的android版本為4.x。unity 的版本是5.4.1
unity與xcode交互的問題集錦
分享 com img ges nbsp 題集 unit unity xcode unity與xcode交互的問題集錦
Unity與Android交互-Unity接入高德地圖實現定位以及搜索周邊的功能(使用Android Studio)詳細操作
nac mcc 以及 分享 pack create lis red 效果 剛進公司給安排的任務就是Unity接入高德地圖,算是踩了不少坑總算做出來了,抽點時間寫個博客記錄一下 廢話不多說 先上效果圖 獲取定位並根據手機朝向顯示周邊信息 使用的Unity
Unity與Android的問題
jdk android unity r.java appcompat 先說下自己的開發環境Win7 x64Unity5.2.2Android Studio 2.3.2(以下簡稱AS)JDK1.7再說下創建項目在AS中創建一個新項目用empty activity將Unity中的classes
unity 轉 iOS小細節
cnblogs bsp unit logs .com blog 細節 alt unity unity 轉 iOS小細節
【Unity與23種設計模式】狀態模式(State)
unity public text 開始 sys 狀態模式 改變 val 繼承 定義: “讓一個對象的行為隨著內部狀態的改變而變化,而該對象也像是換了類一樣” 應用場景: 角色AI:控制角色在不同狀態下的AI行為 服務器連接狀態:開始連線、連線中、斷線等狀態 關卡進