gpt4 book ai didi

c# - 从 C 到 C#(iOS 到 Unity)引发事件

转载 作者:搜寻专家 更新时间:2023-10-30 20:23:48 24 4
gpt4 key购买 nike

我想在 Unity 中注册事件并在 iOS 中从 C 引发这些事件。

我有以下模式 -

// Unity side register delegate and event handler
private delegate void CallbackDelegate(CBObj data);
public static event CallbackDelegate dataUpdatedEvent;

// for iOS
#if !UNITY_EDITOR && UNITY_IOS
[DllImport("__Internal")]
private static extern void PluginFunction(CallbackDelegate callback);
#endif

public CBObj {
// marshal C objects to c# objects in the constructor here using the Ptr from C
}
[MonoPInvokeCallback(typeof(CallbackDelegate))]
static void CallbackMethod(CBObj dataPtr)
{
if (dataUpdatedEvent != null)
{
CBObj obj = new CBObj(dataPtr);
dataUpdatedEvent(obj);
}
}

// Unity Usage
private CallbackDelegate evt;
void Start(){
evt += updateEvent;
}
public void updateEvent(CBObj data){
// do something with data everytime its called
}

// C code
extern "C" typedef void (*CallBackFuncP) (CBObj dataPtr);
typedef struct
{
float *data1;
int *data2;
} CBObj;
extern "C" {
CallBackFuncP* cb;
void PluginFunction(CallBackFuncP callback) {
// store the the callback function pointer
cb = callback;
}
}
// raise the event somewhere in code
if (cb != NULL) {
CBObj *test = [[CBObj alloc] init];
cb(test)
}

这行得通吗?这是正确的模式吗?有更好的方法吗?

非常感谢任何有关执行此操作的指示。

最佳答案

Unity 建议使用 UnitySendMessage从 C 调用 C# 方法的函数。

可以使用json格式化数据

NSDictionary *d = @{ @"data1":1, @"data2":2.0 };
NSData *j = [NSJSONSerialization dataWithJSONObject:d options:0 error:NULL];
NSString *s = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
UnitySendMessage("GameObjectName", "MethodName", [s UTF8String]);

在 unity 中,创建一个名为 GameObjectName 的游戏对象,附加一个名为 MethodName 的方法的脚本。使用json library将字符串解码为对象。

public class YourScriptName : Monobehaviour
{
public class CBObj
{
public int data1;
public float data2;
}

public void MethodName(string data)
{
var obj = UnityEngine.JsonUtility.FromJson<CBObj>(data);
}
}

关于c# - 从 C 到 C#(iOS 到 Unity)引发事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54306250/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com