Unity 跳过启动屏/Logo

news2024/11/16 13:52:17

使用官方API跳过Unity启动页

1.通过Unity的SplashScreen提供的接口

  [Preserve]
    public class SkipSplash
    {
        [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSplashScreen)]
        private static void BeforeSplashScreen()
        {
#if UNITY_WEBGL
        Application.focusChanged += Application_focusChanged;
#else
            System.Threading.Tasks.Task.Run(AsyncSkip);
#endif
        }
#if UNITY_WEBGL
    private static void Application_focusChanged(bool obj)
    {
        Application.focusChanged -= Application_focusChanged;
        SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate);
    }
#else
        private static void AsyncSkip()
        {
            SplashScreen.Stop(SplashScreen.StopBehavior.StopImmediate);
        }
#endif
    }

问题

1.通过接口打包出来发现启动页确实去掉了,但是在Android上发现启动后会有一小段黑屏,项目越大资源越多,首帧逻辑越复杂,黑屏时间越长,unity相对其他引擎,启动过程确实比较长,不太友好
2.这里有个思路就是在Unity启动到场景首帧这个过程中在盖上一个加载页面,不就可以到去掉启动页/黑屏阶段了吗

Android 上跳过启动页/黑屏

1.我们在Unity上BuildSettings页面勾选Export Project导出Android工程
在这里插入图片描述
2.导出后使用Android Studio打开工程,可以看到在unityLibrary模块下的com.unity3d.player里面有个UnityPlayerActivity

在这里插入图片描述
3.打开UnityPlayerActivity可以看到重写的onCreate函数里面,unity使用了自己的一个view视图UnityPlayer

 @Override protected void onCreate(Bundle savedInstanceState)
    {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);

        String cmdLine = updateUnityCommandLineArguments(getIntent().getStringExtra("unity"));
        getIntent().putExtra("unity", cmdLine);

        mUnityPlayer = new UnityPlayer(this, this);
        setContentView(mUnityPlayer);
        mUnityPlayer.requestFocus();
    }

4.我们导入一张背景图片作为加载页面,在res文件夹下面创建一个drawable文件夹,将bg.png图片放在drawable目录下
在这里插入图片描述

5.接下来我们在UnityPlayer上面盖上我们导入的资源bg.png,这里直接动态生成一张图片了

 private ImageView bgView = null;
  private  void addSplash(){

        bgView=new ImageView(this);

        int bg=getResources().getIdentifier("bg", "drawable", getPackageName());

        bgView.setScaleType(ImageView.ScaleType.CENTER_CROP);
        bgView.setImageResource(bg);

        mUnityPlayer.addView(bgView);
    }

6.接下来在onCreate里面调用一下,这样我们启动应用就会看见unity启动页被bg给覆盖了

  @Override protected void onCreate(Bundle savedInstanceState)
    {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);

        String cmdLine = updateUnityCommandLineArguments(getIntent().getStringExtra("unity"));
        getIntent().putExtra("unity", cmdLine);

        mUnityPlayer = new UnityPlayer(this, this);
        setContentView(mUnityPlayer);
        mUnityPlayer.requestFocus();
        
        addSplash();
    }

7.接下来就是在合适的时机把这张图片给移除掉了,我们在unity进入首场景的时候通知android端移除掉该图片即可 我们把android隐藏接口写好

   public void HideSplash() {
        new Handler(Looper.getMainLooper()).post(new Runnable() {
            @Override
            public void run() {
                mUnityPlayer.removeView(bgView);
                bgView = null;
            }
        });


    }

Unity与Android通信

Unity端
1.获取Android端的java脚本
如:这是android端新建的java脚本AndroidBridge.java
在这里插入图片描述
2.通过AndroidJavaClass获取到AndroidBridge脚本,如果要获取脚本实例,可以通过AndroidJavaObject

        private AndroidJavaClass brideg;
         private void Awake()
        {
            brideg = new AndroidJavaClass("com.unity3d.player.AndroidBridge");
        }

3.调用AndroidBridge脚本里的静态方法

      brideg.CallStatic("OnReceiveUnity", param1, param2);

Android端
1.简单写个单例

    private  static AndroidBridge instance;

    public  static AndroidBridge getInstance(){
        if(instance==null){
            instance=new AndroidBridge();
        }
        return  instance;
    }

2.写个初始话方法缓存下UnityActivity

    private Activity context;

    public void init(Activity activity){
        context=activity;
    }

3.写一下给Unity端调用的接口

    public static void OnReceiveUnity(String param1,String param2)
    {
          HideSplash();
    }

    public  static void  HideSplash()
    {
        ((UnityPlayerActivity)getInstance().context).HideSplash();
    }

4.最后在Unity场景启动的时候Call一下OnReceiveUnity就可以隐藏启动页面了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2241539.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

matplotlib2

第六部分:保存与导出图表 在实际的应用场景中,我们不仅需要在程序中展示图表,有时候还需要将这些图表保存为文件,以便在其他地方使用,比如插入文档、报告或网页中。matplotlib 提供了非常方便的保存图表功能。 6.1 保…

Linux卸载金仓KingBaseES数据库

Linux卸载金仓KingBaseES数据库 1、卸载前删除数据库服务2、图形化卸载3、控制台卸载4、静默卸载 1、卸载前删除数据库服务 如果在安装后执行root.sh脚本在系统中注册了数据库服务,需要在卸载前执行rootuninstall.sh脚本删除已注册的数据库服务。具体步骤如下&#…

【C#设计模式(11)——外观模式(Facade Pattern)】

前言 外观模式隐藏了子系统的复杂性,简化了客户端与子系统之间的交互。 代码 public class Facade{private CommunicationModel communicationModel;private AcquisitionModel acquisitionModel;private ToolModel toolModel;public Facade(){communicationModel n…

Spring Boot编程训练系统:数据管理与存储

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了编程训练系统的开发全过程。通过分析编程训练系统管理的不足,创建了一个计算机管理编程训练系统的方案。文章介绍了编程训练系统的系统分析部分&…

OceanBase 升级过程研究(4.2.1.6-4.2.1.8)

模拟业务 使用benchmark加载10仓数据模拟业务场景 升级方法 使用滚动升级方式来进行OB升级。该方法前提是OB集群必须满足官方规定的高可用架构(如果 Zone 个数小于 3,滚动升级时则无法构成多数派), 滚动升级的原理就是轮流完成每个ZONE的升级工作,由于…

三周精通FastAPI:42 手动运行服务器 - Uvicorn Gunicorn with Uvicorn

官方文档:Server Workers - Gunicorn with Uvicorn - FastAPI 使用 fastapi 运行命令 可以直接使用fastapi run命令来启动FastAPI应用: fastapi run main.py如执行 fastapi run openapi.py启动后显示: INFO Using path openapi.py …

springboot的社区团购系统设计录像

springboot的社区团购系统设计录像 springboot的社区团购系统设计

C++清除所有输出【DEV-C++】所有编辑器通用 | 算法基础NO.1

各位小伙伴们,上一期的保留小数位数教学够用一辈子,有不错的点赞量,可我连一个粉丝铁粉都没有,你愿意做我的第一个铁粉吗?OK废话不多说,开始! 温故与知心 可能你也学过,且是工作者…

【Pytorch】Python random 模块

Python random 模块主要用于生成随机数,是常用的一个包,random 模块实现了各种分布的伪随机数生成器。在训练传统机器学习模型或者深度神经网络模型的过程中经常会用到。要使用 random 函数必须先导入: import random1. random() 使用random(…

Android OpenGLES2.0开发(八):Camera预览

严以律己,宽以待人 引言 终于到该章节了,还记得Android OpenGLES2.0开发(一):艰难的开始章节说的吗?写这个系列的初衷就是因为每次用到GLSurfaceViewCamera预览时,总是CtrlC、CtrlV从来没有研究…

JMX Exporter源码解读+生产环境最佳实践+解决其抓取指标超时问题

文章目录 背景第一版配置-查询所有MBean第二版配置-配置白名单第三版配置-增加Cache第四版配置-修改jmx_exorter源码禁用默认jvm导出第五版配置-基于第四版excludeObjectNameAttributes第六版配置-修改jmx_exorter源码includeObjectNameAttributes配置基于release-1.0.1分支修改…

前端(3)——快速入门JaveScript

参考: 罗大富 JavaScript 教程 | 菜鸟教程 JavaScript 教程 1. JaveScript JavaScript 简称 JS JavaScript 是一种轻量级、解释型、面向对象的脚本语言。它主要被设计用于在网页上实现动态效果,增加用户与网页的交互性。作为一种客户端脚本语言&#…

人工智能:塑造未来的工作与生活

目录 人工智能技术的应用前景与影响 人工智能的历史与现状 人工智能的应用领域 人工智能的前景与挑战 个人视角:人工智能的应用前景与未来 人工智能在生活中的潜力 面对人工智能带来的挑战 我的观点与建议 结语 人工智能技术的应用前景与影响 随着人工智能…

东土国产自主智能控制器,亮相第七届长三角科技成果交易博览会

近日,第七届长三角科技成果交易博览会(以下简称“长三角科交会”)在上海汽车会展中心开幕。为展示嘉定新城产业集聚成果,宣传新城核心区投资环境,新城公司连续第六届参加长三角科交会。 在此次展会上,新城…

AUTOSAR_EXP_ARAComAPI的7章笔记(4)

☞返回总目录 相关总结:本地 / 网络多绑定用例总结 7.3.2 本地/网络多绑定用例 在前一节中,我们看到了的一种多绑定特殊变体,现在来看,也可认为是一种真实情况的变体。 假设有一个与上一章节相似的情景,唯一的区别…

ubuntu将firewall-config导出为.deb文件

firewall-config ubuntu是canonial 公司维护的,用wireshark测过,开机会给他们公司发遥测(开了ufw阻塞所有连接也一样,canonial在里面把代码改了)firewall-config是fedora(爱好者维护,公益版本)自带的防火墙…

LabVIEW中坐标排序与旋转 参见附件snippet程序

LabVIEW中坐标排序与旋转 参见附件snippet程序LabVIEW中坐标排序与旋转 参见附件snippet程序 - 北京瀚文网星科技有限公司 在LabVIEW中处理坐标排序的过程,尤其是按顺时针或逆时针排列坐标点,常见的应用包括处理几何形状、路径规划等任务。下面我将为您…

基于微信小程序的校园超市购物系统设计与实现,LW+源码+讲解

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本超市购物系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息&a…

如何使用EasyExcel生成多列表组合填充的复杂Excel示例

作者:Funky_oaNiu 一、(需求)生成的表格效果:二、搞一个模板文件三、建立对应的表格实体类四、开始填充五、Vue3前端发起请求下载六、官方文档及AI问答 一、(需求)生成的表格效果: 其中只有顶部…

AdaBoost 二分类问题

代码功能 生成数据集: 使用 make_classification 创建一个模拟分类问题的数据集。 数据集包含 10 个特征,其中 5 个是有用特征,2 个是冗余特征。 数据集划分: 将数据分为训练集(70%)和测试集(3…