iOS Unity 交互(系列一)Unity調(diào)用iOS函數(shù) Unity給iOS傳值

前言:

這次是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)目


1.png

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


2.png

第2步 編寫腳本

圖片中的完整代碼在文章末尾


3.png

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

4.png

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

5.png
6.png

圖片中的示例代碼:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容