Unity替换启动Logo动画

news/2024/11/22 3:25:29/

前言

最近的项目中,由于Android中集成了Unity场景,每次进入打包好的Unity项目时都会出现Unity的标志性动画,让用户处于等待状态,体验感比较差;于是便在产品经理的要求下将Unity的启动Logo换成公司的宣传动画

目前的解决办法有两种:

  1. 充值Unity加强版,便可以在打包时一键跳过Unity启动动画;
  2. 将Unity的启动动画替换为自己公司的宣传动画

今天给大家分享一下第二种解决方案,我是将Unity与Android的交互先写好,然后再把Unity打包成Android项目嵌入到主Android项目中

演示视频

替换Unity启动画面的Logo

环境

Unity3D:准备一个Unity空场景即可,让其通知Android端替换Logo

AndroidStudio:替换启动动画的逻辑便写在此处

Unity端

1. 准备Unity项目

打开Unity,创建一个新项目,如下图所示

2. 编写交互脚本

StartPage.cs:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class StartPage : MonoBehaviour
{private AndroidJavaClass androidJavaClass;private AndroidJavaObject androidJavaObject;private void Awake(){//当Unity的场景创建出来的时候,便通知Android端将接下来Unity启动的动画替换掉GetAndroid();}public void GetAndroid(){if (Application.platform != RuntimePlatform.Android)   //判断是否运行在Android设备中{return;}androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");//获取到正在运行的ActivityandroidJavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");//调用Android端写好的hideSplash函数androidJavaObject.Call("hideSplash");}}

3. 修改打包配置

点击File——>Build Settings,然后便出现如下弹窗

点击Edit——>Project Settings——>Player——>Android,如下图所示

修改打包的参数设置,如下图所示:

4. 打包Unity项目

将我们的Unity项目打包成Android项目

打包成功后,项目文件夹大致如下,大家可以参考一下

到此为止,Unity这边的操作便已经结束了,接下来的跳过启动页面就交给Android端去做了

Android

1. 打开Unity项目并修改配置

用Android Studio打开刚刚打包出来的Unity项目,如下图

修改AndroidManifest.xml文件,将启动配置注释掉

2. 将Unity项目打包aar

将Unity项目打包成 aar,操作如下图,Android中的aar对应Unity中的Package包

3. 新建一个Android项目

4. 引入Unity的aar包并加上一个字符串资源

把我们的aar放入到相应文件夹下,并添加引用

因为我们的UnityPlayer类中有用到名为"game_view_content_description"的一串字符串,所以我们需要在string资源下添加一下,这个地方是Unity的一个坑点

5. 编写替换Unity启动动画的逻辑代码

这里为了图方便,就带大家直接在我们新建项目中的MainActivity中编写即可,不需要创建其他任何的类和布局文件

如下图所示,代码也给大家放后面了,可以直接复制粘贴使用,只需要修改一下照片即可,这里小编为了图方便,直接放置了一张图片,大家可以放置多张照片形成动画,其实就相当于MainActivity承载了Unity场景

MainActivity.java

package com.example.androidtest;import android.graphics.drawable.AnimationDrawable;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.widget.ImageView;import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity {private ImageView bg;                    //Unity启动画面的背景图片private ImageView animImg;               //Unity启动画面的动画图面private AnimationDrawable frameAnim;     //创建一个图片动画帧对象@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);animImg = new ImageView(UnityPlayer.currentActivity);frameAnim = new AnimationDrawable();//我这里只添加了一张图片,大家可以添加多张图片来制作动画frameAnim.addFrame(getResources().getDrawable(R.drawable.yf),300);   frameAnim.setOneShot(false);animImg.setBackground(frameAnim);frameAnim.start();animImg.setScaleType(ImageView.ScaleType.CENTER_INSIDE);DisplayMetrics displayMetrics = getResources().getDisplayMetrics();mUnityPlayer.addView(animImg,displayMetrics.widthPixels,displayMetrics.heightPixels);UnityPlayer.UnitySendMessage("Main Camera","GetA","");}public void hideSplash(){new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(10L);} catch (InterruptedException e) {e.printStackTrace();}runOnUiThread(new Runnable() {@Overridepublic void run() {mUnityPlayer.removeView(bg);mUnityPlayer.removeView(animImg);bg = null;animImg = null;}});}}).start();}}

演示视频

到此为此,我们就做完了,给大家看一下演示效果

替换Unity启动画面的Logo

注意:记得跑真机上才可以运行测试,因为我之前在Unity打包Android项目时,忘记勾选 x86和x86-64选项了,这两个是模拟器,勾选了才能跑在Android Studio的模拟器上


http://www.ppmy.cn/news/185500.html

相关文章

3D建模,游戏建模和渲染极力推荐的5款笔记本电脑

如果想要一台用于3D建模&#xff0c;游戏建模和渲染的顶级笔记本电脑&#xff0c;这里有一些具有卓越性能的优秀笔记本电脑。 1. 华硕 ZenBook Pro Duo 满足您所有渲染和建模需求的高级工作站笔记本电脑 超快、健壮&#xff0c;将有助于制作出色的动画。 4K 超高清屏幕带来绚…

计算机专业买笔记本电脑游戏本还是商务本好,购买笔记本电脑,游戏本真的是第一选择吗?...

随着现代科技的发展&#xff0c;1946年诞生的计算机也逐渐从一个庞然大物发展到了小型并普及化计算机时代&#xff0c;而小型的台式计算机又衍生发展出了笔记本电脑。 我们很多人都有购买笔记本电脑的需求&#xff0c;笔记本又分为商务本、超薄本、游戏本等几大种类。因此我们这…

2022打游戏的笔记本电脑推荐哪款?来看看外星人!

可以说&#xff0c;2022年的笔记本市场出现了很多不错的新品&#xff0c;第十二代酷睿处理器的表现也着实令人欣喜。不过&#xff0c;要问打游戏的笔记本电脑推荐哪款&#xff0c;我还是会毫不犹豫的回答你“外星人”。   作为一家成立数十年的高端品牌&#xff0c;外星人从成…

计算机专业游戏本推荐,游戏本什么牌子好?2019值得买的高性价比游戏笔记本电脑推荐...

如今&#xff0c;喜欢玩游戏的人越来越多&#xff0c;游戏笔记本作为玩游戏的主要工具之一&#xff0c;也备受游戏玩家的关注&#xff0c;那么&#xff0c;游戏本买什么牌子好&#xff1f;2019年有哪些性价比高的游戏笔记本电脑呢?下面推荐值得入手的四款游戏笔记本&#xff0…

centos8安装部署Oracle Database Free

前言 centos8安装部署Oracle Database Free 安装部署 服务器安装 下载centos8镜像(选择镜像&#xff1a;CentOS-Stream-8-20230523.0-x86_64-dvd1.iso)并安装系统&#xff0c;具体细节不再赘述关闭centos8服务器的防火墙与selinux&#xff0c;并配置ip 部署oracle 注&…

【其他】计算机专业+游戏需求购买笔记本_无废话—2022年

我对计算机组成不是说特别了解&#xff0c;如果你不是搞硬件的&#xff0c;那你看完我的这篇文章我觉得对选购笔记本就够了。 1.前言 首先你要了解一些有关计算机组成的名词 CPU 又叫处理器。处理器越好&#xff0c;电脑运行速度越快&#xff0c;性能越好。 显卡 用来显示电脑…

Python 线程队列

文章目录 Python 中的线程在 Python 中使用队列限制线程 本篇文章将介绍限制 Python 中的活动线程数。 Python 中的线程 Python 中的线程允许多个执行线程在单个进程中同时运行。 每个线程独立于其他线程运行&#xff0c;允许并发执行并提高性能。 线程对于执行受 I/O 限制或…

【Azure】微软 Azure 基础解析(八)Azure 存储服务:探索Blob存储、队列存储、文件存储的特性与适用场景

本系列博文还在更新中&#xff0c;收录在专栏&#xff1a;「Azure探秘&#xff1a;构建云计算世界」 专栏中。 本系列文章列表如下&#xff1a; 【Azure】微软 Azure 基础解析&#xff08;三&#xff09;描述云计算运营中的 CapEx 与 OpEx&#xff0c;如何区分 CapEx 与 OpEx…