前言:
這次是iOS和Unity交互。過程沒有預(yù)想的那么順利,也踩了一些坑,做個(gè)筆記。
要做的事情就是實(shí)現(xiàn) iOS 和 Unity 交互,互相調(diào)用函數(shù),傳值。
傳值系列
iOS Unity 交互(系列一)Unity調(diào)用iOS函數(shù) Unity給iOS傳值
iOS Unity 交互(系列二)iOS調(diào)用Unity函數(shù) iOS給Unity傳值
iOS Unity 交互(系列三)iOS Unity互傳參數(shù)與完整示例代碼
iOS Unity 交互(系列四)Unity調(diào)用iOS SDK
需要的工具
1、蘋果電腦安裝:Xcode,Unity,VSCode,開發(fā)工具安裝最新的就行。
2、蘋果手機(jī)真機(jī),用于調(diào)試。
實(shí)現(xiàn)目標(biāo)
先實(shí)現(xiàn)一個(gè)最簡(jiǎn)單的交互,在Unity中調(diào)用函數(shù),給iOS傳值。
操作流程
1、新建一個(gè)Unity項(xiàng)目 → 編寫C#腳本
2、新建一個(gè)Xcode項(xiàng)目 → 編寫.mm代碼文件
3、把.mm文件放到Unity項(xiàng)目下 → 生成Xcode項(xiàng)目 → 真機(jī)運(yùn)行
第1步 新建Unity項(xiàng)目,初始化工作
新建空白項(xiàng)目

項(xiàng)目成功運(yùn)行

第2步 編寫腳本
圖片中的完整代碼在文章末尾

第3步 新建Xcode項(xiàng)目,編寫.mm文件,并把文件放到Unity項(xiàng)目中

第4步 生成Xcode項(xiàng)目,真機(jī)運(yùn)行。


圖片中的示例代碼:
C# 腳本代碼 jiaoben.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Runtime.InteropServices;
public class Jiaoben : MonoBehaviour
{
[DllImport("__Internal")]
private static extern void CadenceInitWith(string name);
void Start()
{
Debug.Log("腳本開始運(yùn)行");
CadenceInitWith("ABCDEFG");
}
// Update is called once per frame
void Update()
{
}
}
OC .mm文件代碼 Unity_iOS_Connect.mm
#import <Foundation/Foundation.h>
extern "C" {
extern void CadenceInitWith(const char *objName) {
NSString *s = [NSString stringWithUTF8String:objName];
NSLog(@"接受從Unity傳遞過來的字符串 %@", s);
}
}
結(jié)語
終究是有一天碰上了Unity。
感謝以下iOS/Unity玩家的文章:
Unity3D與iOS的交互
<iOS和Unity交互>之參數(shù)傳遞
Unity與iOS交互
unity 與oc交互
Unity平臺(tái)調(diào)用IOS
Unity和OC簡(jiǎn)單交互(方法互調(diào))
Unity-IOS交互整理
iOS與Unity交互筆記之參數(shù)傳遞
iOS 和 Unity之間參數(shù)傳遞的方法
iOS與Unity交互筆記之參數(shù)傳遞
iOS和Unity交互之參數(shù)傳遞
Unity3d與iOS交互開發(fā)—接入平臺(tái)SDK必備技能
iOS 和 Unity 交互之參數(shù)傳遞
報(bào)錯(cuò)解決:
malloc: *** error for object 0x1018ad6a0: pointer being freed was not allocated
Unity 調(diào)用oc報(bào)錯(cuò):malloc: *** error for object 0x1ecc0eb0: pointer being freed was not allocated
malloc: *** error for object 0x1ecc0eb0: pointer being freed was not allocated
Unity3D中C#調(diào)用iOS的靜態(tài)庫(*.a)
pointer being freed was not allocated