unity-與ios互動
阿新 • • 發佈:2021-02-10
title: unity-與ios互動
categories: Unity3d
tags: [unity, ios]
date: 2021-01-31 14:16:54
comments: false
mathjax: true
toc: true
unity-與ios互動
unity 與 ios 互動
-
寫 ios 外掛, 丟到平臺層目錄 Assets/Plugins/iOS 下
-
標頭檔案 iOSBridgePlugin.h
// ---------------------------------------- // --- ios 自定義外掛介面宣告
-
實現檔案 iOSBridgePlugin.mm.
這個是混編檔案 (oc + c/c++) , xcode 可以自動識別為 Objective-C++ 檔案
#import "iOSBridgePlugin.h" #import "Classes/Unity/UnityInterface.h" // 引入 unity 相關 api void ShowTips(const char* goName, const char* callFnName, const char* msg) { NSLog(@"--- ShowTips"); NSString* go = [NSString stringWithUTF8String:goName]; // c 字串 轉成 oc 字串, 這裡一定要先轉成 oc, 不然 const char* 呼叫後就會釋放掉棧記憶體, 會導致 UnitySendMessage 回傳 unity 失敗
-
-
在 csharp 程式碼匯入並使用這個外掛 api
GameMgr.cs
using System.Collections; using System.Collections.Generic; using System.Runtime.InteropServices; using UnityEngine; using UnityEngine.UI; public class GameMgr : MonoBehaviour { public Text txt; public GameObject go; void Start() { gameObject.name = "GameMgr"; DontDestroyOnLoad(gameObject); } public void OnNativeCall(string data) { Debug.LogFormat("--- OnNativeCall, data: {0}", data); txt.text = data; } public void CallNative() { string msg = "hello ios-" + Random.Range(1000, 9999); #if UNITY_IPHONE || UNITY_IOS ShowTips(gameObject.name, "OnNativeCall", msg); // 呼叫 ios api #else Debug.LogErrorFormat("--- no implemention on platform: {0}", Application.platform.ToString()); #endif } void Update() { go.transform.Rotate(Vector3.up * 50 * Time.deltaTime); } // ------------------- ios native api #if UNITY_IPHONE || UNITY_IOS [DllImport("__Internal")] private static extern void ShowTips(string goName, string callFnName, string msg); #endif }
目錄目錄
-
build 一下生產 xcode 工程
-
開啟 xcode.
Plugins 目錄會移到 Libraries 目錄下
-
cmd + R 編譯並執行到手機.
不能執行到 ios 模擬器上, 因為 unity 匯出的是 arm 架構的庫, 而 ios 模擬器時 x86 架構.
-
效果
-