You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity作为库运行在独立进程时,如何从Xamarin.Forms的Android端传递数据?

问题根因

UnityPlayer.UnitySendMessage是进程内API,只能在同一个进程的内存空间内调用生效。你给Unity Activity配置了Process=":unityplayer"后,Unity运行在独立进程,和Xamarin主进程内存隔离,所以原有调用直接失效,必须通过Android跨进程通信(IPC)方案实现数据传递。

可落地的实现方案

方案1:BroadcastReceiver(实现成本最低,适合轻量数据传递)

通过Android系统广播实现跨进程通信,主进程发广播,Unity进程注册接收器接收消息

  • 操作步骤:
    • 自定义全局唯一的广播Action,例如com.你的包名.SEND_TO_UNITY
    • Unity侧C#代码注册对应Action的广播接收器,收到消息后调用内部业务方法处理参数
    • Xamarin Android主进程需要传数据时,发送携带参数的对应Action广播即可
  • Xamarin主进程发广播示例代码:
var sendIntent = new Intent("com.你的包名.SEND_TO_UNITY");
sendIntent.PutExtra("payload", "要传递的字符串内容");
SendBroadcast(sendIntent);
  • Unity侧接收广播示例代码:
#if UNITY_ANDROID
using UnityEngine;

public class UnityMsgReceiver : AndroidJavaProxy
{
    public UnityMsgReceiver() : base("android.content.BroadcastReceiver") { }

    public void onReceive(AndroidJavaObject context, AndroidJavaObject intent)
    {
        string data = intent.Call<string>("getStringExtra", "payload");
        // 这里直接调用你原本要触发的Unity方法,例如 GameObject.Find("Gameobject").SendMessage("MyMethod", data);
    }
}

// 注册逻辑放在Unity入口脚本的Start生命周期中
void Start()
{
    AndroidJavaObject currentActivity = new AndroidJavaClass("com.unity3d.player.UnityPlayer").GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaObject intentFilter = new AndroidJavaObject("android.content.IntentFilter", "com.你的包名.SEND_TO_UNITY");
    UnityMsgReceiver receiver = new UnityMsgReceiver();
    currentActivity.Call("registerReceiver", receiver, intentFilter);
}
#endif

方案2:AIDL(适合高频、复杂数据传输场景)

如果需要频繁传递数据、或者需要传递自定义结构体、双向通信,用AIDL实现更稳定高效

  • 操作步骤:
    • 定义通用AIDL接口文件,分别放到Xamarin主进程和Unity进程的AIDL目录下
    • 在Unity进程的Activity中实现AIDL的Stub接口,处理主进程的调用请求
    • 主进程绑定Unity进程的Service,拿到AIDL代理对象后直接调用接口方法传参

方案3:共享存储(适合非实时的参数传递)

如果只是传递非实时的简单配置类数据,可以用跨进程模式的SharedPreferences中转

  • 主进程写入数据到SharedPreferences时指定MODE_MULTI_PROCESS模式,Unity进程读取对应Key的取值即可
  • 优点:实现成本极低,不需要额外的通信逻辑

内容的提问来源于stack exchange,提问作者droid3d

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 08:27:03