去掉unity打包的apk左上角转圈圈(splash替换黑屏)

本文介绍了如何在Unity打包的APK中去除左上角的启动转圈,改用自定义的启动画面。通过创建UnityPlayerActivity,并在其中添加原生代码,实现显示自定义的 splash 屏幕,同时提供了隐藏 splash 屏幕的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

勾选显示splash,然后用原生添加显示splash
public class UnityPlayerActivity extends Activity
{
    protected UnityPlayer mUnityPlayer; // don't change the name of this variable; referenced from native code

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

        getWindow().setFormat(PixelFormat.RGBX_8888); // <--- This makes xperia play happy

        mUnityPlayer = new UnityPlayer(this);
        setContentView(mUnityPlayer);
        mUnityPlayer.requestFocus();
        UnitySplashSDK.getInstance().onCreate(this,savedInstanceState);
   
    }


    public void HideSplash()
    {
        Log.d("UnityPlayer","Android_HideSplash");
        UnitySplashSDK.getInstance().onHideSplash();
    }
package com.aiiage.steam.evolve;

import android.app.Activity;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.media.Image;
import android.os.Bundle;
import android.util.Log;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;

import com.unity3d.player.UnityPlayer;

public class UnitySplashSDK {
    ImageView bgView = null;
    UnityPlayer mUnityPlayer = null;
    static UnitySplashSDK mInstance;
    public static UnitySplashSDK getInstance()
    {
        if(mInstance==null)
        {
            synchronized (UnitySplashSDK.class)
            {
                if(mInstance == null)
                {
                    mInstance = new UnitySplashSDK();
                }
            }
        }
        return mInstance;
    }
    public void onCreate(Activity activity, Bundle savedInstanceState)
    {
        mUnityPlayer = ((UnityPlayerActivity)activity).mUnityPlayer;
        onShowSplash();
        SetProgressBar(activity);
    }
    void onShowSplash()
    {
        if(bgView!=null)return;
        try
        {
            Log.d("","UnityActivity_onShowSplash");
            bgView = new ImageView(UnityPlayer.currentActivity);
            bgView.setBackgroundColor(Color.parseColor("#36c3e5"));
            bgView.setBackgroundResource(R.drawable.unity_static_splash);
            bgView.setScaleType(ImageView.ScaleType.CENTER);
            Resources r = mUnityPlayer.currentActivity.getResources();
            mUnityPlayer.addView(bgView,r.getDisplayMetrics().widthPixels , r.getDisplayMetrics().heightPixels);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    ProgressBar barshow;
    public void SetProgressBar(Activity mainActivity)
    {
        Log.d("SetProgressBar_","SetProgressBar:"+mainActivity.getLocalClassName());
        barshow = new ProgressBar(mUnityPlayer.currentActivity, null, android.R.attr.progressBarStyleLarge);
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(10,10);
        barshow.setLayoutParams(lp);
        WindowManager wm = (WindowManager) mainActivity.getSystemService(Context.WINDOW_SERVICE);
        int w = wm.getDefaultDisplay().getWidth()/2;
        int h = wm.getDefaultDisplay().getHeight()/2;
        barshow.setPadding(10, 10,20,20);
        mUnityPlayer.addView(barshow);
    }
    public void onHideSplash()
    {
        try
        {
            if(bgView==null)return;
            Log.d("","UnityActivity_onHideSplash");
            UnityPlayer.currentActivity.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mUnityPlayer.removeView(bgView);
                    bgView = null;
                    if(barshow!=null)
                    {
                        mUnityPlayer.removeView(barshow);
                        barshow = null;
                    }
                }
            });
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

}



### Unity 打包 Android APK 教程 在使用 Unity 引擎开发游戏或应用时,打包生成 Android 应用的 APK 文件是一个关键步骤。以下内容将从工程设置、APK 生成、配置细节以及常见问题等方面详细说明如何完成这一过程。 #### 一、Android 工程设置 在开始打包之前,确保 Unity 编辑器已正确安装,并且包含了对 Android 平台的支持。通常,在安装 Unity 的过程中可以选择是否包含 Android Build Support 模块,如果未安装,也可以通过 Unity Hub 后续添加该支持[^1]。 Unity 安装目录中的 `Editor/Data/PlaybackEngines/AndroidPlayer` 子目录用于存放与 Android 相关的编译工具,如 JDK、NDK 和 SDK 等。建议优先使用 Unity 自带的这些工具版本,以避免不必要的兼容性问题[^2]。 #### 二、打包 APK 安装文件 在 Unity 编辑器中完成项目开发后,可以通过以下步骤进行 APK 打包: 1. **切换平台**:打开菜单栏中的 File -> Build Settings,选择 Android 平台并点击 Switch Platform。 2. **配置构建选项**:确认 Player Settings 中的各项配置无误,包括包名(Bundle Identifier)、最低 API 等级等。 3. **开始构建**:点击 Build 按钮,并指定输出 APK 文件的路径。构建完成后,APK 文件将会保存到所选目录下。 #### 三、配置项细节 ##### 1. Android 基本配置 - **包名 (Bundle Identifier)**: 必须唯一,一般格式为 com.companyname.appname。 - **最低 API 等级**: 根据目标设备选择合适的 Android 版本。 ##### 2. 图标配置 可以在 Player Settings 中上传不同分辨率的应用图标,Unity 会根据设备自动适配最合适的图标大小。 ##### 3. 屏幕配置 设置支持的屏幕方向和分辨率比例。例如竖屏、横屏或是两者皆可。 ##### 4. 启动界面设置 可以自定义启动画面,提升用户体验。Unity 支持静态图片作为启动页,也允许使用脚本来控制更复杂的加载动画。 ##### 5. 其它设置 - **签名证书**: 如果要发布到 Google Play 商店,则需要一个有效的 keystore 来签署你的 APK。 - **扩展功能**: 如需启用特定硬件特性(比如陀螺仪),则必须在此处声明权限。 #### 四、分离数据包与 OBB 文件 对于大型项目来说,直接打包成单一 APK 可能会超出商店限制。这时可以利用 Unity 提供的功能将主 APK 与 `.obb` 数据文件分开。只需勾选相关选项,Unity 将自动生成两个文件。用户安装完 APK 后还需要下载对应的 `.obb` 文件,并放置于正确的存储位置才能正常运行游戏[^3]。 #### 五、自动化打包方法 除了通过 Unity 编辑器手动执行打包操作外,还可以编写脚本来实现命令行方式下的自动化打包。这种方法非常适合持续集成环境下的批量处理任务。下面给出 Windows 和 macOS 下调用 Unity 进行非交互式构建的例子: ```bash # Windows 示例 "C:\Program Files\Unity\Hub\Editor\2021.3.0f1\Editor\Unity.exe" -quit -batchmode -projectPath "D:\MyProject" -executeMethod BuildScript.BuildAndroid # macOS 示例 /Applications/Unity/Hub/Editor/2021.3.0f1/Unity.app/Contents/MacOS/Unity -quit -batchmode -projectPath "/Users/username/MyProject" -executeMethod BuildScript.BuildiOS ``` 此方法依赖于 `BuildPipeline.BuildPlayer` 方法来实际执行打包逻辑。此外,还可以进一步定制脚本以适应不同的渠道需求,如修改资源、图标、包名等[^4]。 #### 六、解决常见问题 当遇到关于 SDK 的错误时,请检查是否已经正确安装了 Command-line Tools 并将其路径设置到了 Unity Preferences 中。有时即使安装了正确的工具集,但若目录结构不正确或者版本过低也可能导致问题出现。此时应尝试重新安装相应组件,并确保其位于预期的位置(如 latest/bin/sdkmanager.bat)[^5]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值