在Swift代码中编写Unity IOS插件

时间:2015-07-26 11:25:10

标签: ios objective-c swift unity3d

是否有可能在Swift中编写统一的IOS插件?

我已经有一个工作的swift框架,并希望将其用作Unity中的插件

我看到有些地方说它只能在Objective-c上完成,但有没有针对swift的解决方法?

2 个答案:

答案 0 :(得分:5)

由于无法从Unity访问顶级Swift,因此"解决方法"对于Swift来说,围绕它编写一个Objective-C包装类,并访问那个

取决于可能仍然是最佳方法的Swift代码的数量和复杂性。

答案 1 :(得分:3)

如何调用Unity方法

Unity接口函数在Unity构建的Xcode项目的 UnityInterface.h 中定义。此头文件在 UnitySwift-Bridging-Header.h 中导入,因此您可以直接在Swift代码中调用这些函数。

要调用Unity方法,请使用 // Example.swift import Foundation class Example : NSObject { static func callUnityMethod(_ message: String) { // Call a method on a specified GameObject. UnitySendMessage("CallbackTarget", "OnCallFromSwift", message) } } 函数,如下所示:

//  Example.swift

import Foundation

class Example : NSObject {
    static func swiftMethod(_ message: String) {
        print("\(#function) is called with message: \(message)")
    }
}

如何从Unity访问Swift类

第1步:创建Swift类。

//  Example.mm

#import <Foundation/Foundation.h>
#import "unityswift-Swift.h"    // Required
                                // This header file is generated automatically when Xcode build runs.

extern "C" {
    void _ex_callSwiftMethod(const char *message) {
        // You can access Swift classes directly here.
        [Example swiftMethod:[NSString stringWithUTF8String:message]];
    }
}

步骤2:包含“unityswift-Swift.h”并定义C函数以在.mm文件中包装Swift类(Objective-C ++)。

// Example.cs

using System.Runtime.InteropServices;

public class Example {
    #if UNITY_IOS && !UNITY_EDITOR
    [DllImport("__Internal")]
    private static extern void _ex_callSwiftMethod(string message);
    #endif

    // Use this method to call Example.swiftMethod() in Example.swift
    // from other C# classes.
    public static void CallSwiftMethod(string message) {
        #if UNITY_IOS && !UNITY_EDITOR
        _ex_callSwiftMethod(message);
        #endif
    }
}

步骤3:创建接口类以从C#调用导出的C函数。

Example.CallSwiftMethod("Hello, Swift!");

第4步:从C#代码中调用方法。

{{1}}

UnitySwift-Bridging-Header.h 和unityswift-Swift.h的文件名在“Objective-C Bridging Header”条目和“Objective-C Generated Interface Header Name”条目中定义。构建设置。当Unity构建运行时,PostProcesser会自动设置有关Swift编译器的这些设置和其他设置。

<强>要求

  

iOS 7或更高版本

<强>兼容性

  

Unity 5.3.5f1 Xcode 7.3.1