gpt4 book ai didi

c# - Unity 从对象 c 接收事件

转载 作者:可可西里 更新时间:2023-11-01 04:24:59 26 4
gpt4 key购买 nike

我想为 unity 创建一个 ios 插件。该功能是使用一些 sdk 发送文本消息。嗯,这是我的对象 c:

-(TextMessage*) CsendText:(NSString *)number CmsgContent:(NSString *)msg{
return [MessagingApi sendText:(NSString*) number msgContent:(NSString *) msg]
}

这是我的 c 换行代码:

TextMessage* SendMessage(const char* contactNumber,const char* content){
Messaging* msg = [[Messaging alloc] init];
NSString* nr = [NSString stringWithUTF8String:contactNumber];
NSString* contentText = [NSString stringWithUTF8String:content];
TextMessage* newText = [msg CsendText:nr CmsgContent:contentText];

return newText;
}

你可以看到我返回了一条文本消息,它是一个事件而不是一个字符,我如何将事件传递给 unity,

我的 C# 代码在这里:

#if UNITY_IPHONE
[DllImport("__Internal")]
private static extern string SendMessage (string contactNumber,string content);

#endif
string phoneNumber="";
string content="";
void OnGUI () {
phoneNumber = GUI.TextField ( new Rect (250, 125, 250, 25), phoneNumber, 40);
content = GUI.TextField (new Rect (250, 157, 250, 25), content, 40);

if (GUI.Button(new Rect (250, 250, 100, 30),"click me")) {
SendMessage(phoneNumber,content);
}

}

最佳答案

这不是它的工作方式。你不能只在 C 中返回一些东西并期望它出现在 Unity/C# 中。要实现“双向通信”,您需要执行以下操作。


Unity => iOS

C#代码

[DllImport ("__Internal")]
private static extern void _SomeCMethod(string parameter);

(目标-)C代码

void _SomeCMethod(const char *parameter) 
{
}

当您在 C# 中调用 _SomeMethod 时,将调用您的(目标)C 代码中的 _SomeMethod

iOS => 统一

Objective-C 代码

- (void)callSomeCSharpMethod
UnitySendMessage("GO", "SomeCSharpMethod", "parameter");
}

C# 代码(MonoBehaviour 脚本附加到 GO)

void SomeCSharpMethod(string parameter)
{
}

当您在 Objective-C 中调用 callSomeCSharpMethod 时,将调用 C# 代码中的 SomeCSharpMethod


转换字符串

您必须将 NSString 转换为 C 字符串 (const char *),反之亦然。

const char * => NSString

[NSString stringWithCString:string encoding:NSUTF8StringEncoding];

NSString => const char *

[string cStringUsingEncoding:NSUTF8StringEncoding];

注意:这只是一个关于如何在 C# 和 native iOS 代码之间实现双向通信 channel 的简单示例。当然你不想硬编码例如GameObject 在代码中的名称,因此您可以在一开始就将该名称(用于来自 Objective-C 的回调)传递给您的 native iOS 代码。

关于c# - Unity 从对象 c 接收事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30938859/

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