【定制化】在Android平台实现自定义的程序启动页

特别说明:以下仅适用于Android平台。

实现原理

  1. 创建安卓端自定义的Activity
  2. 禁用UnityPlayerActivity的启动Logo
  3. 改用自定义Activity

示例效果

参考简单步骤详细步骤都可实现。

自定义的启动动画,效果如下:

运行效果

简单步骤

三步操作实现启动动画的自定义。

导入资源

这里,我预先做好了一个Unitypackage,下载后导入Unity即可。资源链接

这里默认的动画是示例效果中的启动动画。

替换动画

在Assets/Eqgis/Plugins/Android/目录下,找到unitydev…的安卓包。

使用解压工具打开unitydev-1.0.8.aar包,在res\raw\目录下,替换成你制作的“start.mp4”。

注意:你可以先解压aar,待覆盖“start.mp4”文件后,再打包(如,zip包修改aar后缀即可)

文件目录

修改默认Activity

打开“Player Settings”,启用自定义的AndroidManifest。
设置

在Aseets/Plugins/Android目录下找到,AndroidManifest.xml,修改默认的Acitivity为"EqSplashActivity"。

示例如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
    <application>
        <activity android:name="com.eqgis.unity.EqSplashActivity"
                  android:screenOrientation="landscape"
                  android:theme="@style/UnityThemeSelector">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>

详细步骤

涉及在Android原生开发。

创建Android Library

使用AndroidStudio,实现自定义的启动页面。

  1. 在AndroidStudio中新建一个Android Library模块

  2. 在Android Library模块中导入“unity-classes.jar”

“unity-classes.jar”可以通过任意Unity项目导出安卓工程的方式得到,也可去unity的git仓库获取。

定制启动页

  1. 创建EqSplashActivity.java(这里以“EqSplashActivity”为例,名称可修改)

  2. 编写安卓layout布局

启动页实现自由度很高,按你心意自定义即可。这里示例代码如下:

EqSplashActivity.java

public class EqSplashActivity extends Activity {

    private VideoView videoView;

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

        setContentView(R.layout.activity_main);

        videoView = findViewById(R.id.video_view);

        String videoPath = "android.resource://" + getPackageName() + "/" + R.raw.start;
        Uri uri = Uri.parse(videoPath);
        // 设置视频源
        videoView.setVideoURI(uri);
        videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                toUnityActivity();
            }
        });

        // 开始播放视频
        videoView.start();
    }

    /**
     * 转至UnityPlayerActivity
     */
    private void toUnityActivity() {
        try {
            Class<?> classtype = Class.forName("com.unity3d.player.UnityPlayerActivity");

            startActivity(new Intent(this, classtype));
            finish();
        } catch (ClassNotFoundException e) {
            Log.e(EqSplashActivity.class.getSimpleName(), "toUnityActivity: ", e);
        }

    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:background="#000"
    android:layout_height="match_parent">

    <VideoView
        android:layout_centerInParent="true"
        android:id="@+id/video_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
</RelativeLayout>

导入AAR

  1. 在AndroidStudio中打包aar
  2. 将aar文件拷贝至Unity工程的Assets/…自定义路径…/Plugins/Android的目录下

勾选Android

禁用启动Logo

在Unity端需要修改默认启动的Activity,和禁用启动logo。

  1. 禁用启动Logo

禁用启动Logo参考<<一个步骤跳过 Unity 启动Logo | 多平台适用 | 官方API支持>>

具体操作是在工程中创建一个脚本"SkipSplash.cs",无需挂载到游戏对象上,只要这个脚本放到除了Editor以外的文件夹就会生效。

#if !UNITY_EDITOR
using UnityEngine;
using UnityEngine.Rendering;

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
}
#endif

修改默认Activity

打开“Player Settings”,启用自定义的AndroidManifest。
设置

在Aseets/Plugins/Android目录下找到,AndroidManifest.xml,修改默认的Acitivity为"EqSplashActivity"。

示例如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.unity3d.player"
    xmlns:tools="http://schemas.android.com/tools">
    <application>
        <activity android:name="com.eqgis.unity.EqSplashActivity"
                  android:screenOrientation="landscape"
                  android:theme="@style/UnityThemeSelector">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
        </activity>
    </application>
</manifest>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

亚信安全发布《2024年第一季度网络安全威胁报告》

亚信安全2024年第一季度网络安全威胁报告 一季度威胁概览 《亚信安全2024年第一季度网络安全威胁报告》的发布旨在从一个全面的视角解析当前的网络安全威胁环境。此报告通过详尽梳理和总结2024年第一季度的网络攻击威胁&#xff0c;目的是提供一个准确和直观的终端威胁感知。…

Excel 分组汇总后删除明细

有 Excel 数据如下所示&#xff1a; IDCriteria1Criteria2Criteria3Criteria4101210271239312381236123171826182918239182120182147 需要按 ID 分组汇总其余列&#xff0c;结果如下&#xff1a; IDCriteria1Criteria2Criteria3Criteria410121027123932561826939267 解法及简…

yo!这里是socket网络编程相关介绍

目录 前言 基本概念 源ip&&目的ip 源端口号&&目的端口号 udp&&tcp初识 socket编程 网络字节序 socket常见接口 socket bind listen accept connect 地址转换函数 字符串转in_addr in_addr转字符串 套接字读写函数 recvfrom&&a…

线性集合:ArrayList,LinkedList,Vector/Stack

共同点&#xff1a;都是线性集合 ArrayList ArrayList 底层是基于数组实现的&#xff0c;并且实现了动态扩容&#xff08;当需要添加新元素时&#xff0c;如果 elementData 数组已满&#xff0c;则会自动扩容&#xff0c;新的容量将是原来的 1.5 倍&#xff09;&#xff0c;来…

STK与matlab交互 Astrogator模块(14)

一、背景介绍 高轨卫星的轨道保持。与任何其它轨道状态一样&#xff0c;地球同步轨道也会受到各种扰动力的影响&#xff0c;这些摄动力会影响GEO卫星在位置方面的稳定性。摄动的主要来源是地球的非地球位势、太阳辐射压力和第三体效应&#xff08;主要是月球和太阳&#xff09…

特产销售|基于Springboot+vue的藏区特产销售平台(源码+数据库+文档)​

目录 基于Springbootvue的藏区特产销售平台 一、前言 二、系统设计 三、系统功能设计 1系统功能模块 2管理员功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道…

JavaScript 防抖与节流——以游戏智慧解锁实战奥秘

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 &#x1f3ae; 引言❓ 什么是防抖和节流&#x1f3f9; 防抖(Debounce) - 锁定追击&#xff0c;精确无误&#x1f4cc; 基础概念&#x1f4cc; 适用场景&#x1f4cc; 实战代码&#xff1a;防抖 应用于输入框的实时搜索 &…

【Python-爬虫】

Python-爬虫 ■ 爬虫分类■ 1. 通用网络爬虫&#xff1a;&#xff08;搜索引擎使用&#xff0c;遵守robots协议&#xff09;■ robots协议&#xff08;君子协议&#xff09; ■ 2. 聚集网络爬虫&#xff1a;自己写的爬虫程序 ■ urllib.request&#xff08;要导入的模块&#x…

带有-i选项的sed命令在Linux上执行成功,但在MacOS上失败了

问题&#xff1a; 我已经成功地使用以下 sed 命令在Linux中搜索/替换文本&#xff1a; sed -i s/old_string/new_string/g /path/to/file然而&#xff0c;当我在Mac OS X上尝试时&#xff0c;我得到&#xff1a; command i expects \ followed by text我以为我的Mac运行的是…

高效文件管理:一键提取文件名关键字,快速创建对应文件夹

在数字化时代&#xff0c;文件管理成为我们日常工作中不可或缺的一部分。随着文件数量的不断增加&#xff0c;如何高效、有序地管理这些文件成为了许多人的挑战。传统的文件管理方法&#xff0c;如手动创建文件夹和分类文件&#xff0c;不仅耗时耗力&#xff0c;而且容易出错。…

使用html和css实现个人简历表单的制作

根据下列要求&#xff0c;做出下图所示的个人简历&#xff08;表单&#xff09; 表单要求 Ⅰ、表格整体的边框为1像素&#xff0c;单元格间距为0&#xff0c;表格中前六列列宽均为100像素&#xff0c;第七列 为200像素&#xff0c;表格整体在页面上居中显示&#xff1b; Ⅱ、前…

多功能投票小程序基于ThinkPHP+FastAdmin+Uniapp(源码搭建/上线/运营/售后/维护更新)

基于ThinkPHPFastAdminUniapp开发的多功能系统&#xff0c;支持图文投票、自定义选手报名内容、自定义主题色、礼物功能(高级授权)、弹幕功能(高级授权)、会员发布、支持数据库私有化部署&#xff0c;Uniapp提供全部无加密源码。 功能特性

Vue-watch监听器

监听器 watch侦听器&#xff08;监视器&#xff09;简单写法完整写法 watch侦听器&#xff08;监视器&#xff09; 作用&#xff1a;监视数据变化&#xff0c;执行一些业务逻辑或异步操作 语法&#xff1a; watch同样声明在跟data同级的配置项中简单写法&#xff1a; 简单类型…

ios 开发如何给项目安装第三方库,以websocket库 SocketRocket 为例

1.brew 安装 cococapods $ brew install cocoapods 2、找到xcode项目 的根目录&#xff0c;如图&#xff0c;在根目录下创建Podfile 文件 3、在Podfile文件中写入 platform :ios, 13.0 use_frameworks! target chat_app do pod SocketRocket end project ../chat_app.x…

攻防世界-web-fileinclude

题目 解题 原题代码 <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /></head><b>Notice</b>: Undefined index: language in <b>/var/www/html/index.php</b> on lin…

【硬件模块】ESP-01SWiFi模块基于AT指令详解(WiFi,TCP/IP,MQTT)

ESP-01S ESP-01S是由安信可科技开发的一款Wi-Fi模块。其核心处理器是ESP8266&#xff0c;该处理器在较小尺寸的封装中集成了业界领先的Tensilica L106超低功耗32位微型MCU&#xff0c;带有16位精简模式&#xff0c;主频支持80MHz和160MHz&#xff0c;并集成了Wi-Fi MAC/BB/RF/P…

windows@注册表介绍@注册表的查看和编辑操作

文章目录 abstractrefs注册表的主要组件包括根键极其缩写名称&#x1f47a;子键特性 查看注册表&#x1f47a;使用powershell查看路径下的子路径声明概念Get-ChildItem查看注册表路径下的项Set-Location进入注册表路径举例说明查看文件系统某个路径下的项查看某个注册表路径的项…

笨方法自学python(二)-注释

注释和#号 程序里的注释是很重要的。它们可以用自然语言告诉你某段代码的功能是什么。在你想要临时移除一段代码时&#xff0c;你还可以用注解的方式将这段代码临时禁用。 # A comment, this is so you can read your program later. # Anything after the # is ignored by py…

Ubuntu磁盘剩余空间不足,空间异常

近日发现用了3年的Ubuntu系统笔记本磁盘空间极度告急&#xff0c;上网搜了一下都是讲解如何扩容、如何重新挂载空间&#xff0c;但是博主发现/home目录明明分配了200G的空间&#xff0c;但是只剩下6G可用&#xff0c;查询所有的文件夹发现&#xff0c;所有文件加起来已使用50G左…

串口数据的发送(单词的发送)and UART原理协议---第九天

1.在中断函数中&#xff0c;定义一个数组给SBUF&#xff0c; i数组的偏移以便输入单词&#xff0c;&#xff1b; 用strstr&#xff08;&#xff09;函数来比较cmd输入的单词里面的 "en" , " se ";亮灯后i回来原来的位置0&#xff0c;清空cmd, UART 原理…