U3d跨场景开发解决方案

2024-03-15 14:58
文章标签 解决方案 开发 场景 u3d

本文主要是介绍U3d跨场景开发解决方案,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

摘要

     需要说明的是,本人也不确定跨场景开发这个词是会出现怎样的歧义。简单的说,就是多人合作的升级,不再是多个人在一个Project目录下各负责某个模块,而是一部分人负责某一个工程。将工程分为不同的类型,以便于程序的扩展和维护。有些时候调整其中一个工程就可以实现变化,这样的划分的意义将凸显。设想有如下的场景:你有一个逻辑完善的程序框架,其中部分资源经常需要调整,或则是这部分资源调整就可以实现完全不同的关卡。而你只需要通过加载不同的配制信息,不改变任何逻辑就可以满足需求。此时,你应该会意识到,部分资源不应该放在逻辑程序中,而应该封闭起来,需要的时候加载出来。这样不仅维护了资源配制的安全性,还体现了程序的可扩展能力。

目录

    也许本文的解决方案不是最好的,但确实已经在项目开发中使用,在这里介绍给有相同需求的同仁,希望对其有所启发。下面是关键的几个点:

        1.好好利用unity3d自身的优势

        2.资源自动关联是本方案的核心

        3.共享内嵌同步版本

        4.资源发布及资源加载方案


一、好好利用unity3d自身的优势

    unity3d是一个基本脚本的引擎,其中一个脚本开发的好,可以用在多个对象上,只需要修改部分参数就可以实现不同的显示和逻辑等效果。正是因为这样,资源和代码的关系并不是传统游戏那个分离。有很多文章建议回到传统的开发方案上一,将资源和代码分离,用到的时候在加载资源。但这样明显是十分困难的,毕竟游戏引擎就应该让问题变得简单而不是让人烦恼。为此还是需要坚定对prefab的信念,提升使用prefab的能力。而prefab的加载中的三种方案只有一种可以满足跨工程,那就是AssetBundle。

二、资源自动关联是本方案的核心

    Assetbundle的打包后,可以利用WWW脚本加载出来,但脚本却不好处理。实际上逻辑需要改变的程序,可以加载lua脚本来实现,或直接使用反射来实现脚本动态。本文不做热更新任何说明,因为这个解决方案不涉及脚本的更新,且适用所有的平台。在一个工程中配制好之后凭什么可以在另一个有相同脚本的工程中自动进行关联?那就是GUID,每一个导入到unity3d 的Asset目录下的文件都会生成一个.meta文件,除非你设置了隐藏。这个.meta文件就记录了资源的关联信息。如果你希望在资源自动关联,那么请确保两个工程中的.meta文件是相同的。

三、共享内嵌同步版本

   预制体和脚本的关联,非和脚本的名字进行关联。都是和.meta中的GUID进行关联,你需要做的仅仅是将需要保存信息和配制的脚本放置到一个版本库中,在资源工程和逻辑工程中进行共享。那么.meta就自动可以同步了。值得注意的是unity的控制台有没有提示guid重复的黄色警告,如果有,就要小心.meta被重写和资源关联丢失的问题了。共享版本的最大问题当然不是这个,而是你的资源工程应该尽量删除不直接需要的库引用,而没有这些库或是代码,共享的代码必然要报错!此时,不要惊慌,因为在资源项目中并不需要执行这些代码。所以注释掉就好了,但注释也有讲究,不是//也不是/**/,而是利用宏定义,确保在你的逻辑工程中,这些代码并没有被注释。

四、资源发布及资源加载方案

   以上的三个点理解了就可以做你自己的跨场景开发了,但实际上使用不同工程的资源包还需要一个资源加载的工具,这个工具可以在unity AssetStore 上下载免费或付费的,但目前应该没有一个和本方案贴切的加载及发布工具。所以为实现这样的一套流程,本人也有常规的资源打包器和资源加载器上进行了一定的修改,可见github。主要的功能就是可以定义多个长期保存的发布规则,每个规则中需要打包的资源不尽相同。具体打包那些资源就看你的用户需要了。

五、后续

   1.动态添加资源包设想

         由于以上的方案中是直接在从资源路径加载,所以只需要修改配制就可以实现不同的关卡加载。如果你能把用户需要的资源制作成一个压缩包如zip,那么程序就可以实现从这个资源包中解压后更新到你的程序中。而你的逻辑工程没有进行任何改变,这样你的程序也不需要进行任何打包,用户只需要到你的商店购买相应的资源就可以进行其他效果的体验。

   2.如果需要选择性打包,可以参考这个工程:CrossProject



这篇关于U3d跨场景开发解决方案的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/812352

相关文章

线上Java OOM问题定位与解决方案超详细解析

《线上JavaOOM问题定位与解决方案超详细解析》OOM是JVM抛出的错误,表示内存分配失败,:本文主要介绍线上JavaOOM问题定位与解决方案的相关资料,文中通过代码介绍的非常详细,需要的朋... 目录一、OOM问题核心认知1.1 OOM定义与技术定位1.2 OOM常见类型及技术特征二、OOM问题定位工具

基于 Cursor 开发 Spring Boot 项目详细攻略

《基于Cursor开发SpringBoot项目详细攻略》Cursor是集成GPT4、Claude3.5等LLM的VSCode类AI编程工具,支持SpringBoot项目开发全流程,涵盖环境配... 目录cursor是什么?基于 Cursor 开发 Spring Boot 项目完整指南1. 环境准备2. 创建

Python一次性将指定版本所有包上传PyPI镜像解决方案

《Python一次性将指定版本所有包上传PyPI镜像解决方案》本文主要介绍了一个安全、完整、可离线部署的解决方案,用于一次性准备指定Python版本的所有包,然后导出到内网环境,感兴趣的小伙伴可以跟随... 目录为什么需要这个方案完整解决方案1. 项目目录结构2. 创建智能下载脚本3. 创建包清单生成脚本4

java.sql.SQLTransientConnectionException连接超时异常原因及解决方案

《java.sql.SQLTransientConnectionException连接超时异常原因及解决方案》:本文主要介绍java.sql.SQLTransientConnectionExcep... 目录一、引言二、异常信息分析三、可能的原因3.1 连接池配置不合理3.2 数据库负载过高3.3 连接泄漏

防止Linux rm命令误操作的多场景防护方案与实践

《防止Linuxrm命令误操作的多场景防护方案与实践》在Linux系统中,rm命令是删除文件和目录的高效工具,但一旦误操作,如执行rm-rf/或rm-rf/*,极易导致系统数据灾难,本文针对不同场景... 目录引言理解 rm 命令及误操作风险rm 命令基础常见误操作案例防护方案使用 rm编程 别名及安全删除

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

C#文件复制异常:"未能找到文件"的解决方案与预防措施

《C#文件复制异常:未能找到文件的解决方案与预防措施》在C#开发中,文件操作是基础中的基础,但有时最基础的File.Copy()方法也会抛出令人困惑的异常,当targetFilePath设置为D:2... 目录一个看似简单的文件操作问题问题重现与错误分析错误代码示例错误信息根本原因分析全面解决方案1. 确保

C# LiteDB处理时间序列数据的高性能解决方案

《C#LiteDB处理时间序列数据的高性能解决方案》LiteDB作为.NET生态下的轻量级嵌入式NoSQL数据库,一直是时间序列处理的优选方案,本文将为大家大家简单介绍一下LiteDB处理时间序列数... 目录为什么选择LiteDB处理时间序列数据第一章:LiteDB时间序列数据模型设计1.1 核心设计原则

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模