Unity之Scenes自动添加进BuildSetting

1.19 从0开始学习Unity游戏开发--扩展编辑器 在之前的篇章里面,我们一直在编辑器里面干活,然后做好资源的编辑和代码开发后,我们可以直接在编辑器内点击那个播放按钮就能真实的把游戏跑起来,但是有时候,我们可能希望在菜单里面加个按钮,这样我们可以直接执行一些批量的编辑动作,又或者我们希望像数组元素显示在Inspector面板上的效果一样,为我们的自定义数据结构也画一个特殊的编辑界面,那么这个时候我们就需要扩展Unity编辑器。 阅读详情
/*---------------------------------------
*|  Describe : 
*|  Author   :  人生若只如初見
*|  Version  :  1.0
*|  Time     :  2022.12.26 12:08
*---------------------------------------
*/
#if UNITY_EDITOR
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;

public class SceneToBuildingSettingAuto : MonoBehaviour
{

    /// <summary>
    /// 程序启动时检测、提示
    /// </summary>
    [InitializeOnLoadMethod]
    private static void InitializeOnload()
    {
        //EditorApplication.playModeStateChanged -= EditorApplication_playModeStateChanged;

        //EditorApplication.playModeStateChanged += EditorApplication_playModeStateChanged;
    }
    private static void EditorApplication_playModeStateChanged(PlayModeStateChange playModeStateChange)
    {
        switch (playModeStateChange)
        {
            //当退出Editor模式时 检测
            case PlayModeStateChange.ExitingEditMode:
                {
                    ScenesInBuildActiveSceneCheck();
                    break;
                }
        }
    }
    /// <summary>
    /// 检测当前启动的场景 然后添加至BuildingSetting
    /// </summary>
    private static void ScenesInBuildActiveSceneCheck()
    {
        var scenesList = EditorBuildSettings.scenes.ToList();
        var activeScene = SceneManager.GetActiveScene();
        var isSceneInBuildSettings = scenesList.Count((c) => c.path == activeScene.path) == 1;

        if (!isSceneInBuildSettings)
        {
            if (EditorUtility.DisplayDialog("Add Scene to Scenes in Build", $"The current scene was not found in the scenes" +
                $" in build and a {nameof(SceneToBuildingSettingAuto)} instance was found with scene management enabled! Clients will not be able " +
                $"to synchronize to this scene unless it is added to the scenes in build list.\n\nWould you like to add it now?",
                "Yes", "No - Continue"))
            {
                scenesList.Add(new EditorBuildSettingsScene(activeScene.path, true));
                EditorBuildSettings.scenes = scenesList.ToArray();
            }
        }
    }

}

public static class SceneTools
{
    [MenuItem("OTools/AddStateScenesToBuildingSetting")]
    private static void AddStateScenesToBuildingSetting()
    {
        var dir = "Assets/StateScenes";
        //获取指定路径下面的所有资源文件
        if (Directory.Exists(dir))
        {
            DirectoryInfo direction = new DirectoryInfo(dir);
            FileInfo[] files = direction.GetFiles("*.unity", SearchOption.AllDirectories);

            Debug.Log(files.Length);

            var scenesList = EditorBuildSettings.scenes.ToList();
            for (int i = 0; i < files.Length; i++)
            {
                if (files[i].Name.EndsWith(".meta") || !files[i].Name.EndsWith(".unity"))
                {
                    continue;
                }
                //Debug.Log("Name:" + files[i].Name);
                //Debug.Log("FullName:" + files[i].FullName);
                //Debug.Log("DirectoryName:" + files[i].DirectoryName);
                var name = files[i].Name;
                var path = files[i].FullName.Replace("\\", "/");
                path = path.Replace("//", "/").Trim();
                path = path.Replace("///", "/").Trim();
                path = path.Replace("\\\\", "/").Trim();
                var index = path.IndexOf("Assets");
                path = path.Remove(0, index);
                var isSceneInBuildSettings = scenesList.Count((c) => c.path == path) == 1;
                if (!isSceneInBuildSettings)
                {
                    var targetScene = new EditorBuildSettingsScene(path, true);
                    if (EditorUtility.DisplayDialog("Add Scene to Scenes in Build", $"[{name}]Would you like to add it now?",
                        "Yes", "No - Continue"))
                    {
                        try
                        {
                            scenesList.Add(targetScene);
                        }
                        catch (System.Exception e)
                        {
                            Debug.LogError($"add to BuildingSetting faild : {e.Message}     [{path}->{targetScene.path}]");
                            throw e;
                        }
                    }
                }

                EditorBuildSettings.scenes = scenesList.ToArray();
            }
        }
    }

    [MenuItem("OTools/ClearBuildingSettingScene")]
    private static void ClearBuildingSettingScene()
    {
        if (EditorUtility.DisplayDialog("Clear Scene From Scenes in Build", $"Are you sure to clear now?",
                          "Yes", "No - Continue"))
        {
            try
            {
                var scenesList = EditorBuildSettings.scenes.ToList();
                scenesList.Clear();
                EditorBuildSettings.scenes = scenesList.ToArray();
                Debug.Log("Clear Scene From Scenes Successful!");
                //EditorUtility.DisplayDialog("", "Clear Scene From Scenes Successful", "OK");
            }
            catch (System.Exception e)
            {
                Debug.LogError($"Clear Scene From Scenes in Build faild : {e.Message}");
                throw e;
            }
        }
    }
}
#endif

 

 

使用批处理一键打包Unity安卓APK文件 本文介绍了一种通过Windows批处理实现Unity项目一键打包APK的方法。作者首先说明了工具类程序的意义在于让非技术人员也能完成特定功能操作。接着详细讲解了准备工作、参数配置和关键函数(如BuildPlayer)的使用说明。文章提供了完整的C#脚本代码,演示如何获取场景路径并执行打包操作。最后给出了批处理文件(.bat)的编写方法,包括设置路径变量、调用Unity命令等步骤,实现不打开Unity编辑器直接生成APK文件的功能。该方法特别适合测试人员等非开发人员快速打包使用。 阅读详情

相关推荐

Unity API常用方法和类学习笔记4

Unity API常用方法和类学习笔记4 ------SceneManager & UIEvent & CharacterController 类SceneManager using UnityEngine;//类SceneManager–UnityEngine.SceneManagement中的一个类 using UnityEngine.SceneManagement; 一、...

xuehuimodu的博客 798

unity3D 编辑器扩展,代码设置 Build Settings 选择的场景

有时项目需要,某些情况下需要选择打包/不打包某些场景。如果手动去 设置选择 BuildSettings 中这些场景,过程将变得很枯燥,也很容易漏掉这个步骤! 那么,我们就用代码解决吧! using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; public class TestEditor : EditorWindow { [MenuItem("Tools

iDaDi的博客 2224

深度学习:STGCN学习笔记

目录标题基于图神经网络的图分类问题GCN在行为识别领域的应用主要任务研究思路ST-GCN(SpatialTemporal Graph Convolutional Networks for Skeleton-Based Action Recognition)解读原论文解决问题主要贡献核心思想简介OpenPose 预处理基于人体关键点构造graph构造单帧graph(空间域)构造帧间graph(时间域)ST-GCN模型采样函数权重函数空域图卷积空间-时间模型分区策略可学习的边重要性权重TCNST-GCN模型的实

zhe470719的博客 3万+

unity editor 把场景加到buildsetting

List<EditorBuildSettingsScene> scenes = new List<EditorBuildSettingsScene>(); // scenes.Add(new EditorBuildSettingsScene(EditorSceneManager.GetActiveScene().path, true)); string[] files = Directory.GetFiles("路径", "*.unity", SearchOption.AllD.

凡情的博客 2258

深度学习 tesorflow2.0版本 入门第一章

为什么要学tensflow 深度学习发展迅猛 框架灵活 google开发 公司应用广泛 2.0更加灵活 后面会学习的项目 图像分类 房价预测 泰坦尼克号生存预测 文本分类 文本生成 机器翻译 核心部分 模型训练 tesorboard----> 查看模型训练进度 模型保存和部署 分布式训练-----> 加速训练速度,提升训练效率 TensorFlow常用库:Tfds, tfhub,tensor2tensor 多平台云端环境GPU:Goolgle cloud环境配置,AWS环境配置 kaggle平

weixin_46969441的博客 1226

MIPI D-PHYv2.5笔记(11) -- 高速时钟传输(High-Speed Clock Transmission)

在High-Speed模式中,Clock Lane提供了一个低摆幅(low-swing)、差分DDR时钟信号,此信号从Master到Slave,用于为高速数据传输提供时钟信号。时钟信号关于Forward Direction中的Data Lane上的位切换序列(toggling bit sequence)有正交相位,并且在一次burst的第一个被传输的bit的中心点有一个上升沿。

vivo01的专栏 3011

Unity 遍历所有场景添加到Build Settings里

后来自己在2021.3.20f1c1版本的unity上运行的时候,首先遇到了路径需要用相对路径的报错提示,转为相对路径后运行成功,但是加入的场景全显示为已删除,经查后发现是new EditorBuildSettingsScene的时候设定guid失败,官方源码如下。前言:最近研究opencv for unity,运行用例列表时,提示我所选的功能场景没有加载到Build Settings里,我看了下几十个例子,于是想找代码一键添加,一开始参考了站内大佬的代码。

qq_24964769的博客 1169

Mission Planner连接Autopilot保姆级教程:从USB到无线全搞定

本文提供Mission Planner连接Autopilot的全面指南,涵盖USB直连、无线数传、蓝牙适配等多种连接方案。详细讲解驱动安装、波特率匹配、性能优化等关键步骤,并分享多链路冗余配置与故障转移的高阶技巧,助你快速解决连接问题。

weixin_28455801的博客 374

Unity通过按钮实现场景跳转

Unity版本:2018.1.0b11 1.将场景加入到Buildsetting 在Unity选项File中找到里面的Build Setting打开,然后打开场景把需要的场景按顺序点击Add Open Scenes添加到里面。 2.在你需要点击跳转的页面添加Button 3.创建空物体 4.编写跳转脚本 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Scene

the_sun___的博客 1万+

避坑指南:STM32F4的ADC采样FSR传感器,如何稳定读数并校准压力值?

本文详细解析了STM32F4的ADC采样FSR薄膜压力传感器时遇到的读数不稳定和非线性校准问题,提供了从硬件配置到软件滤波的完整解决方案。通过优化ADC设置、改进滤波算法和实施分段线性校准,帮助工程师实现高精度压力测量,特别适用于智能手套和医疗监测等应用场景。

weixin_28675839的博客 270

HHD Device Monitoring Studio:破解版在串口调试中的实战应用

本文详细介绍了HHD Device Monitoring Studio破解版在串口调试中的实战应用,包括安装指南、串口监控功能解析、Modbus RTU协议分析案例以及自定义协议解析技巧。通过具体操作步骤和性能优化建议,帮助开发者高效完成端口监控和调试任务,提升工作效率。

weixin_29268331的博客 899

Unity 代码动态添加场景到 Build Settings

Unity 代码动态添加场景到 Build Settings 一般制作游戏时, Build Settings 中都会预先选取几个场景,下面通过代码获取并设置场景 public class RefreshScene : Editor { private static readonly string scenePath = "Scenes"; // 添加菜单选项 [M

lq 8579

Android功耗系列专题理论之二十一:Power Monitor测功耗详细说明和注意事项

本文详细介绍了PowerMonitor手机功耗测试仪的功能与使用方法。该设备通过硬件连接替代手机电池,实时监测电流、电压等参数,适用于研发测试、软件优化等场景。文章包含设备接线说明(电源、USB、手机供电等接口)、驱动安装步骤及常见问题排查,并详细讲解了功耗测量操作流程,包括电压设置、开机步骤、数据采集与导出方法。特别强调了测量注意事项,如固定屏幕亮度、关闭后台应用、确保稳定连接等,以确保测试数据准确性。最后提供了简易测量步骤和详细测量流程指导。

576

Unity中切换场景的方法

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement;//首先要记得引用命名空间   public class ChangeSceneTest : MonoBehaviour {     //在unity中 File-&gt...

weixin_42171014的博客 3万+

CAPL诊断功能实现

UDS(Unified Diagnostic Services)是一种用于汽车电子系统诊断的标准协议。它定义了一系列诊断服务,用于读取和写入车辆电子控制单元(ECU)中的数据,以及处理诊断故障码(DTC)。UDS协议通常运行在CAN总线上,使用ISO 15765-2(ISO-TP)协议进行数据传输。通过本文的学习,读者应该对CAPL诊断功能实现有了初步的了解,并能够编写复杂的CAPL脚本。在实际项目中,CAPL的应用非常广泛,希望读者能够通过不断的学习和实践,掌握更多的CAPL技巧,提高自己的开发能力。

闲人编程的博客 1507

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

【Unity3d】如何解决在开发中添加了新场景后,需要手工维护BuildSettings中场景列表的问题

Unity有一项设定,就是如果Secne不在BuildSettings中,运行过程中就无法加载此Scene 当前,如果是在正式发布版本中,会使用Assetbundle来加载此Scene,但是如果在开发过程中 用Assetbundle肯定是不方便的,我们希望每次添加一个新的Scene,系统会自动将此Scene文件添加到BuildSettings中 那么,我们写一个RefreshScen

奋斗的老刘 7959

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Unity 获取单前场景名字和获取到Build Settings里Scenes In Build里所有场景的名字以及路径

Unity 场景名字 场景路径

LWKlwk11的博客 5460

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Unity 如何将场景加入构建场景列表

在菜单中选择“File/Build Settings”里面,上方“Scenes In Build”部分就是加入构建场景列表。 如何将一个场景加入构建列表: 若列表里没有该场景,如果该场景目前处于打开状态,可以使用下方的AddOpenScenes按钮。 若列表里没有该场景,也可以直接将场景资源拖入该列表里 若列表里有该场景,勾选该场景即可 ...

Hackerzhuli 4009

【Untiy】打包Android发布流程

File-&gt;Build Settings||快捷键Ctel+Shift+B,打开Build Settings窗口。 Add OpenScenes(添加当前场景)||拖拽需要打包的Scenes(场景)添加到Scenes In Build。 Platformle列表,选择平台(除PC外其他平台需配置环境加载模块),点击Switch Platform转换平台。 点击Player Setti...

承续缘 361

Unity3d:代码自动添加场景到BuildSettings

//在启动Unity的时候运行该编辑器脚本 [InitializeOnLoad] public class AutoAddSomeScenesToBuild { // 注意一定要是静态方法 static AutoAddSomeScenesToBuild() { // 获取存放指定场景Scene的文件夹信息 var scenesDir = new DirectoryInfo(Application.dataPath + "/Scenes");...

QQhelphelp的博客 1351

Unity3D教程构建场景 (Building Scenes)运用场景视图 (Scene View)视图形式

视图形式 场景视图 (Scene View) 控制条可让您挑选检查场景的各种选项及控制是不是启用灯火和音频。这些控制只影响开发过程中的场景视图,对构建的游戏无影响。 ​ 绘图形式 (Draw Mode) 第一个下拉菜单挑选哪种绘图形式 (Draw Mode) 将用来描写场景。 绘图形式下拉菜单 纹路:显现外表及其可见纹路。 线框:用线框制作网格。 纹路-线框:显现带

u013951435的专栏 1320

Unity动态添加场景到BuildSettings和删除BuildSettings已经存在的场景(不会出现deleted情况)

using System.Collections; using System.Collections.Generic; using System.IO; using UnityEditor; using UnityEngine; public class EditorBuildSceneTest : Editor { //添加场景至BuildSettings面板中 [MenuItem("Tool/AddScene")] static void RefreshAllScene()

虚粒世界 1828

Unity - 自动添加Scene到Build中

【代码】Unity - 自动添加Scene到Build中。

枫叶的博客 521

Unity添加所有场景到BuildSettings

Unity添加所有场景到BuildSettings

不忘初心 方得始终 1220

UnityEidtor编辑器扩展分享一个BuildSetting Scene场景排序方法

editor编辑器扩展 场景m_Path排序

大话程序员 781

自动添加场景到BuildSettings和自动删除

自动添加场景都构建场景或从构建场景设置删除场景 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.IO; /// <summary> /// 构建场景编辑器 /// </summary> pu...

lizhenxiqnmlgb的博客 1238
上一篇: VisualStudio 解决“Using 声明”在 C# 7.3 中不可用。请使用 8.0 或更高的语言版本
下一篇: Git移除commit过的大文件
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值