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

将Unity作为Android库使用时如何调用其C#函数切换360°全景天空盒

问题修复方案

核心问题排查与修复步骤

  • 修正UnitySendMessage调用参数
    UnityPlayer.UnitySendMessage的第一个参数要求是Unity场景中挂载了SkyboxScript脚本的游戏对象名称,不是脚本类名。比如你将脚本挂载在名为SkyboxController的空对象上,调用代码需要改为:
    UnityPlayer.UnitySendMessage("SkyboxController", "initiateBackground", "skybox1");
    
  • 调整消息发送时机
    你在UnityPlayerActivity的onCreate中直接发送消息时,Unity引擎尚未完成场景加载、游戏对象还未初始化完成,此时发送的消息会直接丢失。推荐两种更稳定的实现方案:
    方案1:延迟发送消息(修改Java侧代码)
    给消息发送加200~500ms的延迟,等待Unity场景加载完成:
    if (ss.equals("skybox1")) {
        mUnityPlayer.postDelayed(new Runnable() {
            @Override
            public void run() {
                UnityPlayer.UnitySendMessage("SkyboxController", "initiateBackground", "skybox1");
            }
        }, 300);
    } else {
        Toast.makeText(this, "no display", Toast.LENGTH_SHORT).show();
    }
    
    方案2:Unity侧直接读取Intent参数(更稳定,无需跨端发消息)
    直接在C#脚本中读取Android Activity的Intent参数,不需要调用UnitySendMessage,成功率更高:
    修改后的C#代码如下:
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class SkyboxScript : MonoBehaviour
    {
        public Material skyOne;
        public Material skytwo;
    
        void Start()
        {
            // 直接读取Android端传递的Intent参数
            AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject currentActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");
            AndroidJavaObject intent = currentActivity.Call<AndroidJavaObject>("getIntent");
            string skyboxTag = intent.Call<string>("getStringExtra", "data");
            
            initiateBackground(skyboxTag);
        }
    
        public void initiateBackground(string skybox)
        {
            if(skybox == "skybox1")
            {
                RenderSettings.skybox = skytwo;
                // 刷新全局光照,避免天空盒切换后不显示
                DynamicGI.UpdateEnvironment();
            }
        }
    }
    
  • 检查资源配置
    确认在Unity编辑器的Inspector面板中,已经给SkyboxScript组件的skytwo字段赋值了对应的360全景图材质,避免空引用导致切换无效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:09:00