ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Unity 调用 Objective-C 与 Swift 原生代码实践指南

Unity 调用 Objective-C 与 Swift 原生代码实践指南 开场上周接了个需求:在 Unity 项目里集成 iOS 原生的微信登录 SDK,Asset Store 上没有现成插件,只能自己撸。听起来挺简单对吧?打开 Xcode 一看,SDK 全是 Swift 写的,而 Unity 导出的工程里能直接写 C 接口的是 Objective-C++(.mm)文件。一开始我想偷懒让 C# 直接调 Swift 函数,结果发现 Swift 函数带闭包、带泛型,符号名还是 Swift 自己 mangling 过的,根本塞不进extern "C"的签名里。折腾了两天才摸清门道:Unity 调 iOS 原生代码,必须走 C 接口这座桥;Swift 想露头,得先通过@objc转一道手,借 Objective-C 的身体过河。下面把这套流程从原理到落地整理成笔记,顺便聊聊几个容易翻车的点。一、为什么必须是 C 接口:符号、ABI 与静态链接1.1 C# 是怎么找到原生函数的iOS 上 Unity 项目发布时走的是 IL2CPP:C# 先被翻译成 C++,再和引擎运行时、你的原生插件静态链接成同一个 Mach-O 可执行文件。C# 端写:[DllImport("__Internal")] private static extern void _WeChatLogin(string jsonParam);这里的__Internal不是某个系统库的名字,而是一个特殊标记,意
返回列表