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的模拟器上

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>