Unity替换启动Logo动画

Posted 小尹编码中...

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity替换启动Logo动画相关的知识,希望对你有一定的参考价值。

前言

最近的项目中,由于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");

        //获取到正在运行的Activity
        androidJavaObject = 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;     //创建一个图片动画帧对象

    @Override
    protected 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() 
            @Override
            public void run() 
                try 
                    Thread.sleep(10L);
                 catch (InterruptedException e) 
                    e.printStackTrace();
                
                runOnUiThread(new Runnable() 
                    @Override
                    public void run() 
                        mUnityPlayer.removeView(bg);
                        mUnityPlayer.removeView(animImg);
                        bg = null;
                        animImg = null;
                    
                );
            
        ).start();
    

演示视频

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

替换Unity启动画面的Logo

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

Unity实战篇 | 教你怎样将Unity的启动Logo 设置成 自己制作的 帧动画

  • 🎬 博客主页:https://xiaoy.blog.csdn.net

  • 🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉

  • 🎄 学习专栏推荐:👑Unity系统学习专栏👑

  • 🌲 游戏制作专栏推荐:👑游戏制作👑

  • 🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!

  • 📆 未来很长,值得我们全力奔赴更美好的生活✨

  • ------------------❤️分割线❤️-------------------------



🎁前言

  • 你在打包Unity应用的时候是不是还在用默认启动Logo呢?

  • 看完这篇文章教你自己定制一款属于自己的Unity启动Logo

  • 之前有一篇文章我们讲了怎样在不购买专业版的情况下自定义Unity的启动Logo

  • 但是只是用了一张图片对默认Logo进行替换,并没有加自己的启动动画

  • 那本篇文章就来介绍一下,怎样在 去除默认Logo的前提 下制作自己的启动动画!

  • 还没学会怎样去除UnityLogo的小伙伴可以去看这篇文章先学习一下哦:

  • 【Unity终极奥义】Unity打包去掉启动画面Logo,无需破解,一学就会!


🎅Unity实战篇 | 将Unity的启动画面 设置成 自己制作的 帧动画

🎄帧动画

先来说一下这个 帧动画 是啥意思方便大家理解

这里说的 帧动画 就是一系列的 静态图片 快速切换达到一个动图的效果

事实上我们现在的游戏也是通过一帧一帧的拼接起来,一秒60帧以上就会很流畅了

比如之前很火的火柴人系列,就是很经典的这种帧动画

哈哈哈,是不是很有意思呢~

我们就是要搞一个这种动态图片的帧动画来做 应用启动Logo


🔔帧动画制作

如果能自己画图来制作一个系列的帧动画自然是好的。

但是可惜 小Y 不会这个技术活(懒)呀,那咋办呢~

俗话说得好,只要思想不滑坡,方法总比困难多!

这里顺道给大家推荐一个录屏工具:ScreenToGif

这个工具可以实现基本的录屏功能保存视频 或者 Gif 等格式的文件

我平时就用这个录屏做一个动态图展示,还是很赞的!

废话不多说,我这里主要是用到了这个工具里面的一个功能

它可以将现有的 Gif格式图片拆分成多帧静态图,然后再将每一帧的图片一键保存起来

保存之后的图片示例如下:

好了,这样我们就有一个简单的帧动画素材

虽然看起来很Low,但是这里就是简单做个示范哈,大家可以自己定制一款属于自己的启动Logo!

接下来就是怎样在工程中使用这个帧动画了,一起来看看。


🎉将 帧动画图片 添加到Android Studio工程中

这一步很简单,继续打开我们去除Unity启动Logo的文章中用到的工程

然后将帧动画图片复制到 res -> drawable 文件夹下即可!


🎋代码编写帧动画

我们继续在Android Studio写代码然后使用的 aar 的方式给Unity去除启动Logo

那么这个添加帧动画的方法依旧是在Android Studio中进行的

所以我们在这篇 去除Logo的文章 基础上继续添加代码


在原有的MainActivity中继续添加一个ImageView和一个AnimationDrawable

ImageViewAnimationDrawable就是我们即将给 帧动画 赋值的参数

这段代码是给帧动画赋值,将我们自己的一套帧动画图片添加进去

然后设置动画循环播放,还要把 帧动画的位置尺寸信息 设置完毕

然后别忘了在关闭启动动画的方法中将帧动画也关闭掉

这一步是在Unity端进行的,与之前的去除UnityLogo文中方法一致!


🎊打包aar给Unity使用

又到了打包的这一步,就说明快要结束啦!

选中这个工程,然后 Build -> Make Module

然后把aarAndroidManifest都保存出来,待会给Unity使用(这一步每次都重复,大家应该都会了)

aar复制出来之后记得把Libs文件夹下的class包删掉。


🌻将aar和AndroidManifest放入Unity工程中

新建Plugins/Android文件夹

把我们在Android端保存的aar文件和AndroidManifest都放到这个Android文件夹下

写脚本调用 Android中消除启动Logo 的动画图片,脚本跟之前的 去除Logo的文章 一样没变化

Unity打包apk应用,设置包名。File -> Build Settings -> Player Settings

这里把 公司名 和 包名 改为我们的AndroidManifest中的一致即可

然后就是Build打包即可!


🎈效果展示

打包完之后点击运行,Unity的Logo就会变成我们自定义的动画Logo啦!

是不是很实用呢,可以自己搞一个属于自己的Logo放上去

这样我们打包的Unity应用就会变成 自己的专属Logo

赶紧自己动手试试吧!

源码工程 的话可以参考下上一篇文章中的工程,只需要改动一下帧动画的代码即可!

【Unity终极奥义】Unity打包去掉启动画面Logo,无需破解,一学就会


👥总结

  • 本篇文章自己制作了一个帧动画来替换了Unity的默认启动Logo

  • 虽然这个帧动画看起来一般般哈哈,但是我们的功能做好了

  • 有时间可以整一个好看的动画,用来做应用启动的时候显示

  • 这样就可以拥有一个属于自己的应用启动动画啦!

  • 那本篇文章就到这里结束啦,喜欢的小伙伴记得点个 三连 ,咱们下次再见啦~


🚀往期优质文章分享


🚀 优质专栏分享 🚀
  • 🎄如果感觉文章看完了不过瘾,可以来我的其他 专栏 看一下哦~
  • 🎄比如以下几个专栏:Unity基础知识学习专栏Unity游戏制作专栏Unity实战类项目 算法学习专栏
  • 🎄可以学习更多的关于Unity引擎的相关内容哦!直接点击下面颜色字体就可以跳转啦!
❤️ 游戏制作专栏 ❤️
🧡 Unity系统学习专栏 🧡
💛 Unity实战类项目 💛
💚 算法千题案例 💚
💙 Python零基础到入门 💙

🚀 社区活动,重磅来袭 🚀

【游戏开发爱好者社区】在本周重磅新推出【每日打卡】活动

🎁 新玩法,奖励升级!游戏开发爱好者社区:https://bbs.csdn.net/forums/unitygame

社区中心思想今天你学到了什么?

在社区你可以做些什么: 每日强化知识点,白嫖书籍礼品!

一个人可以走的很快,一群人才能走的更远!🔥爆C站的游戏开发爱好者社区欢迎您的加入!

更多白嫖活动详情:https://bbs.csdn.net/topics/603722518


温馨提示: 点击下面卡片可以获取更多编程知识,包括各种语言学习资料,上千套PPT模板和各种游戏源码素材等等资料。更多内容可自行查看哦!

以上是关于Unity替换启动Logo动画的主要内容,如果未能解决你的问题,请参考以下文章

Unity实战篇 | 教你怎样将Unity的启动Logo 设置成 自己制作的 帧动画

100个 Unity小知识点 | 启动unity应用时的 Unity Logo 删除/替换的三种方案

Unity初识

Unity 入门笔记 - 02 - 各种动画

基于UNITY引擎开发的游戏源码修改方法

unity3d是干啥用的,除了做游戏还能干啥?