CN118134440B - 一种3d引擎的多人协同场景编辑方法及系统 - Google Patents
一种3d引擎的多人协同场景编辑方法及系统 Download PDFInfo
- Publication number
- CN118134440B CN118134440B CN202410543966.3A CN202410543966A CN118134440B CN 118134440 B CN118134440 B CN 118134440B CN 202410543966 A CN202410543966 A CN 202410543966A CN 118134440 B CN118134440 B CN 118134440B
- Authority
- CN
- China
- Prior art keywords
- scene
- developers
- edited
- editing
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06Q—INFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
- G06Q10/00—Administration; Management
- G06Q10/10—Office automation; Time management
- G06Q10/101—Collaborative creation, e.g. joint development of products or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T19/00—Manipulating 3D models or images for computer graphics
- G06T19/20—Editing of 3D images, e.g. changing shapes or colours, aligning objects or positioning parts
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02P—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN THE PRODUCTION OR PROCESSING OF GOODS
- Y02P90/00—Enabling technologies with a potential contribution to greenhouse gas [GHG] emissions mitigation
- Y02P90/30—Computing systems specially adapted for manufacturing
Landscapes
- Engineering & Computer Science (AREA)
- Business, Economics & Management (AREA)
- Human Resources & Organizations (AREA)
- Entrepreneurship & Innovation (AREA)
- Theoretical Computer Science (AREA)
- Strategic Management (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Graphics (AREA)
- Data Mining & Analysis (AREA)
- Architecture (AREA)
- Economics (AREA)
- Marketing (AREA)
- Operations Research (AREA)
- Quality & Reliability (AREA)
- Tourism & Hospitality (AREA)
- General Business, Economics & Management (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明提供了一种3D引擎的多人协同场景编辑方法及系统,所述方法包括基于场景创建请求创建3D场景;对场景模型道具以及对应的缩略图进行打包;采用缓存机制将素材文件添加至3D场景中;获取开发者的编辑请求,基于编辑请求对待编辑场景进行编辑;基于所有开发者的编辑操作对待编辑场景进行同步处理,本发明降低了非Unity3D开发者人员的使用难度以及对Unity3D使用的依赖性,同时还避免了场景冲突的工作量大的问题,通过多人协同场景编辑,可以有效地分担工作量,提高工作效率,使得场景编辑更加简单和高效。
Description
技术领域
本发明属于3D建模的技术领域,具体地涉及一种3D引擎的多人协同场景编辑方法及系统。
背景技术
随着科技的发展,计算机互联网技术已经深入到我们生活的方方面面,其中游戏开发技术、虚拟现实技术以及协同工作技术等领域的发展尤为迅速。在这些领域中,场景设计是非常重要的一环,它决定了游戏或者虚拟现实环境的视觉效果和用户体验。而场景编辑器则是场景设计的重要工具,它可以帮助游戏开发者或者虚拟现实开发者快速创建游戏场景或者虚拟现实场景,提高开发效率。
目前,最常用的场景编辑器是Unity3D引擎,它可以用来制作各种类型的游戏,在使用Unity3D引擎进行场景制作时,通常会使用场景编辑器来帮助游戏开发者快速的创建游戏场景。场景编辑器通常是嵌入在Unity3D引擎中的,这意味着场景编辑人员在使用场景编辑器之前,需要熟悉对Unity3D的使用。
然而,现有的场景编辑技术存在一些问题。首先,场景编辑器的使用是有一定的学习成本的,这对于非Unity3D开发者人员来说,是一个较大的困难,其次,为了避免场景冲突,场景编辑完成到保存提交到版本控制往往是由一个人进行完成,这对于大型场景的编辑工作来说,工作量是十分巨大的,此外,由于场景编辑器通常是嵌入在Unity3D引擎中的,这意味着场景编辑人员在使用场景编辑器之前,需要熟悉对Unity3D的使用,这对于非Unity3D开发者人员来说,无疑增加了学习成本和使用难度。
发明内容
为了解决上述技术问题,本发明提供了一种3D引擎的多人协同场景编辑方法及系统,用于解决现有技术中的技术问题。
一方面,本发明提供以下技术方案,一种3D引擎的多人协同场景编辑方法,包括:
接收Unity客户方端下发的场景创建请求,基于所述场景创建请求创建3D场景;
基于所述3D场景获取场景模型道具以及对应的缩略图,对所述场景模型道具以及对应的缩略图进行打包并上传至服务器中,以得到场景素材库;
接收Unity客户方端下发的查询请求,基于所述查询请求在所述场景素材库中查询所需素材的素材文件,采用缓存机制将所述素材文件添加至所述3D场景中,以得到待编辑场景;
获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制,若未超出编辑人数限制,则获取所述开发者的编辑请求,基于所述编辑请求对所述待编辑场景进行编辑;
获取所有所述开发者的编辑操作,基于所有所述开发者的编辑操作对所述待编辑场景进行同步处理;
所述基于所述3D场景获取场景模型道具以及对应的缩略图,对所述场景模型道具以及对应的缩略图进行打包并上传至服务器中,以得到场景素材库的步骤包括:
基于所述3D场景获取场景模型道具以及对应的缩略图,将所述场景模型道具导入Unity工程中,在所述Unity工程中将所述场景模型道具存入待定文件夹中;
在Asset下新建Editor文件夹,在所述Editor文件夹下创建AssetBundleBuilder.cs脚本;
设置assetbundle标签,确定所述待定文件夹的assetbundle属性并在所述assetbundle属性下新建与所述场景模型道具相同且后缀命名为Unity3D的打包参数,使用所述AssetBundleBuilder.cs脚本并基于所述打包参数对所述场景模型道具进行打包处理,以得到打包assetbundle文件;
协程调用UnityWebRequest.Put接口并将所述打包assetbundle文件与对应的缩略图上传至服务器上;
缓存上传返回的参数并记录返回的文件ID与返回的上传地址,设置请求参数fileUrl、thumbnailUrl、Name、fileType 字段赋值,判断返回的客户端状态码是否为0,若返回的客户端状态码为0,则上传完成,以得到场景素材库。
相比现有技术,本发明的有益效果为:本发明首先接收Unity客户方端下发的场景创建请求,基于所述场景创建请求创建3D场景;然后基于所述3D场景获取场景模型道具以及对应的缩略图,对所述场景模型道具以及对应的缩略图进行打包并上传至服务器中,以得到场景素材库;然后接收Unity客户方端下发的查询请求,基于所述查询请求在所述场景素材库中查询所需素材的素材文件,采用缓存机制将所述素材文件添加至所述3D场景中,以得到待编辑场景;然后获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制,若未超出编辑人数限制,则获取所述开发者的编辑请求,基于所述编辑请求对所述待编辑场景进行编辑;最后获取所有所述开发者的编辑操作,基于所有所述开发者的编辑操作对所述待编辑场景进行同步处理,本发明解决了场景编辑器使用过程中的高学习成本问题,降低了非Unity3D开发者人员的使用难度,同时还避免了场景冲突的工作量大的问题,通过多人协同场景编辑,可以有效地分担工作量,提高工作效率,降低了对Unity3D使用的依赖性,使得场景编辑更加简单和高效。
较佳的,所述接收Unity客户方端下发的场景创建请求,基于所述场景创建请求创建3D场景的步骤包括:
接收Unity客户方端下发的场景创建请求,基于所述场景创建请求为3D场景生成唯一的场景ID;
基于所述场景ID并调用协程调用SceneManager下的LoadSceneAsync接口实现异步场景加载和创建;
调用预先设置的async.allowSceneActivation为false,并通过LoadSceneAsync接口实时获取加载的progress参数,通过UGUI将progress以百分比的形式显示于加载界面;
判断所述progress参数是否大于预设值,若所述progress参数大于预设值,则3D场景已加载完成,并将所述加载界面上显示的百分比设置为100%,同时设置async.allowSceneActivation为true,以得到3D场景。
较佳的,所述接收Unity客户方端下发的查询请求,基于所述查询请求在所述场景素材库中查询所需素材的素材文件,采用缓存机制将所述素材文件添加至所述3D场景中,以得到待编辑场景的步骤包括:
接收Unity客户方端下发的查询请求,根据所述查询请求在所述场景素材库中查询所需素材的素材文件,并将所述素材文件返回给Unity客户方端,所述Unity客户方端对所述素材文件进行数据解析,以得到每个所述素材文件的缩略图与显示名称;
判断每个所述素材文件的缩略图是否在缓存中,若所述素材文件的缩略图在缓存中,则直接获取缓存中素材文件的引用,若所述素材文件的缩略图不在缓存中,则对所述素材文件的md5进行编码并判断本地文件缓存目录cache下是否已存在该远程地址命名的md5编码的文件名;
若存在该远程地址命名的md5编码的文件名,则跳过下载过程并直接从本地文件缓存目录cache下读取文件,若不存在该远程地址命名的md5编码的文件名,则进行本地文件写入的操作并保存到本地文件缓存目录cache下;
将加载成功的缩略图赋给UGUI的Image对象并将每个所述素材文件的缩略图与显示名称通过UGUI以scrollview组件的形式进行展示并在给scrollview组件下的所有item添加点击事件;
若用户通过所述点击事件点击缩略图,则通过item所绑定的素材文件的唯一标识符在缓存数据中获取到该素材文件的assetbundle地址,基于assetbundle地址采用缓存机制获取assetbundle对象并进行assetbundle加载,以得到待编辑场景。
较佳的,所述获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制,若未超出编辑人数限制,则获取所述开发者的编辑请求,基于所述编辑请求对所述待编辑场景进行编辑的步骤包括:
获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制;
若所述开发者的数量未超出编辑人数限制,则获取所述开发者携带的场景ID,基于所述场景ID控制所述开发者进入对应的待编辑场景中;
将所述待编辑场景的场景信息与已加载的素材文件的信息下发至所述开发者,对所述待编辑场景的场景信息进行加载与创建并对已加载的素材文件进行加载,加载完成后设置async.allowSceneActivation为true并将已加载的素材文件进行实例化;
添加BoxCollider组件用于后续射线操作,并将服务器返回的唯一标识符作为名字依次赋值给已加载的素材文件,并刷新已加载的素材文件的transform组件信息;
基于所述transform组件信息进行素材文件的添加、已加载的素材文件的调整、已加载的素材文件的删除,以对所述待编辑场景进行编辑。
较佳的,所述获取所有所述开发者的编辑操作,基于所有所述开发者的编辑操作对所述待编辑场景进行同步处理的步骤包括:
获取所有所述开发者的编辑操作,并判断所述编辑操作的类型;
若所述编辑操作为素材文件的添加,则将素材文件的添加广播至所述待编辑场景中的其余开发者,并更新素材文件的transform组件信息并同步至其余开发者;
若所述编辑操作为素材文件的调整,则识别所述素材文件的唯一标识符并判断所述素材文件是否被其余开发者进行编辑操作,若所述素材文件没有被其余开发者进行编辑操作,则将所述素材文件与所述开发者进行归属绑定并广播至其余开发者,为所述素材文件添加不可编辑状态并同步至其余开发者;
若所述编辑操作为素材文件的删除,则在已加载的素材文件中检索是否存在对应的素材文件,若存在对应的素材文件,则判断所述素材文件是否被其余开发者进行编辑操作,若所述素材文件没有被其余开发者进行编辑操作,则将所述素材文件进行删除并广播至其余开发者,同时将所述素材文件的本地缓存数据进行移除、将所述素材文件的实例通过destroy方法进行删除并同步至其余开发者。
第二方面,本发明提供以下技术方案,一种3D引擎的多人协同场景编辑系统,所述系统包括:
创建模块,用于接收Unity客户方端下发的场景创建请求,基于所述场景创建请求创建3D场景;
打包模块,用于基于所述3D场景获取场景模型道具以及对应的缩略图,对所述场景模型道具以及对应的缩略图进行打包并上传至服务器中,以得到场景素材库;
加载模块,用于接收Unity客户方端下发的查询请求,基于所述查询请求在所述场景素材库中查询所需素材的素材文件,采用缓存机制将所述素材文件添加至所述3D场景中,以得到待编辑场景;
编辑模块,用于获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制,若未超出编辑人数限制,则获取所述开发者的编辑请求,基于所述编辑请求对所述待编辑场景进行编辑;
同步模块,用于获取所有所述开发者的编辑操作,基于所有所述开发者的编辑操作对所述待编辑场景进行同步处理;
所述打包模块包括:
导入子模块,用于基于所述3D场景获取场景模型道具以及对应的缩略图,将所述场景模型道具导入Unity工程中,在所述Unity工程中将所述场景模型道具存入待定文件夹中;
脚本子模块,用于在Asset下新建Editor文件夹,在所述Editor文件夹下创建AssetBundleBuilder.cs脚本;
标签子模块,用于设置assetbundle标签,确定所述待定文件夹的assetbundle属性并在所述assetbundle属性下新建与所述场景模型道具相同且后缀命名为Unity3D的打包参数,使用所述AssetBundleBuilder.cs脚本并基于所述打包参数对所述场景模型道具进行打包处理,以得到打包assetbundle文件;
打包子模块,用于协程调用UnityWebRequest.Put接口并将所述打包assetbundle文件与对应的缩略图上传至服务器上;
赋值子模块,用于缓存上传返回的参数并记录返回的文件ID与返回的上传地址,设置请求参数fileUrl、thumbnailUrl、Name、fileType 字段赋值,判断返回的客户端状态码是否为0,若返回的客户端状态码为0,则上传完成,以得到场景素材库。
较佳的,所述创建模块包括:
ID生成子模块,用于接收Unity客户方端下发的场景创建请求,基于所述场景创建请求为3D场景生成唯一的场景ID;
场景加载子模块,用于基于所述场景ID并调用协程调用SceneManager下的LoadSceneAsync接口实现异步场景加载和创建;
参数加载子模块,用于调用预先设置的async.allowSceneActivation为false,并通过LoadSceneAsync接口实时获取加载的progress参数,通过UGUI将progress以百分比的形式显示于加载界面;
场景生成子模块,用于判断所述progress参数是否大于预设值,若所述progress参数大于预设值,则3D场景已加载完成,并将所述加载界面上显示的百分比设置为100%,同时设置async.allowSceneActivation为true,以得到3D场景。
第三方面,本发明提供以下技术方案,一种计算机,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现如上述的3D引擎的多人协同场景编辑方法。
第四方面,本发明提供以下技术方案,一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述的3D引擎的多人协同场景编辑方法。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的3D引擎的多人协同场景编辑方法的流程图;
图2为本发明实施例二提供的3D引擎的多人协同场景编辑系统的结构框图;
图3为本发明另一实施例提供的计算机的硬件结构示意图。
以下将结合附图对本发明实施例作进一步说明。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明的实施例,而不能理解为对本发明的限制。
在本发明实施例的描述中,需要理解的是,术语“长度”、“宽度”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明实施例和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括一个或者更多个该特征。在本发明实施例的描述中,“多个”的含义是两个或两个以上,除非另有明确具体的限定。
在本发明实施例中,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”、“固定”等术语应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或成一体;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通或两个元件的相互作用关系。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明实施例中的具体含义。
实施例一
在本发明的实施例一中,如图1所示,一种3D引擎的多人协同场景编辑方法,包括:
S1、接收Unity客户方端下发的场景创建请求,基于所述场景创建请求创建3D场景;
具体的,所述步骤S1包括:
S11、接收Unity客户方端下发的场景创建请求,基于所述场景创建请求为3D场景生成唯一的场景ID;
具体的,在进行多人协同场景编辑之前,首先需要先创建一个可供多人进行协同编辑的场景,而建立场景之前需要事先了解用户所需建立的场景,因此在该步骤中,首先获取场景创建请求,而针对于每一个具体的场景,服务器端会为每一个场景生成一个唯一的场景ID。
S12、基于所述场景ID并调用协程调用SceneManager下的LoadSceneAsync接口实现异步场景加载和创建;
具体的,在场景创建请求发送至服务器并请求成功之后,为了使得场景创建不引起卡顿,在这里通过协程调用SceneManager下的LoadSceneAsync接口实现异步场景加载和创建,其中,SceneManager是Unity3D引擎自带的一个类,其用于加载、卸载和管理场景,LoadSceneAsync接口是SceneManager类的一个接口,用于异步加载场景,异步加载意味着加载场景的过程不会阻塞主线程,使得游戏或应用能够在加载新场景的同时保持响应,这对于提升用户体验至关重要,特别是在加载大型或复杂的场景时。
S13、调用预先设置的async.allowSceneActivation为false,并通过LoadSceneAsync接口实时获取加载的progress参数,通过UGUI将progress以百分比的形式显示于加载界面;
其中,async.allowSceneActivation是与AsyncOperation对象相关联的一个属性,其控制是否允许激活新加载的场景,当使用SceneManager.LoadSceneAsync异步加载场景时,返回的AsyncOperation对象具有这个属性,当使用SceneManager.LoadSceneAsync来异步加载场景时,返回的AsyncOperation对象有一个progress属性,其表示场景的加载进度。progress参数是一个浮点数,范围从0.0(表示加载尚未开始)到1.0(表示加载已完成)。
S14、判断所述progress参数是否大于预设值,若所述progress参数大于预设值,则3D场景已加载完成,并将所述加载界面上显示的百分比设置为100%,同时设置async.allowSceneActivation为true,以得到3D场景;
其中,预设值为90%,当所述progress参数大于90%时,此时表明场景已经加载完成,之后将加载界面上显示的百分比设置为100%,同时设置async.allowSceneActivation为true,即可跳转到所建立的3D场景中,以得到新建立的3D场景,加载界面具体为UGUI界面,UGUI界面是Unity公司在4.6以上版本中加入的UI界面系统,其提供了丰富的组件和工具,UGUI不仅提供了界面元素,还支持各种交互功能。
S2、基于所述3D场景获取场景模型道具以及对应的缩略图,对所述场景模型道具以及对应的缩略图进行打包并上传至服务器中,以得到场景素材库;
具体的,在创建得到新的3D场景之后,需要在空的3D场景中添加各种道具,即场景模型道具,但在添加道具之前,需要将场景模型道具上传至服务器中,进而得到一个包含若干场景模型道具的场景素材库。
其中,所述步骤S2包括:
S21、基于所述3D场景获取场景模型道具以及对应的缩略图,将所述场景模型道具导入Unity工程中,在所述Unity工程中将所述场景模型道具存入待定文件夹中;
其中,场景模型道具以及对应的缩略图可通过绘制、建模、渲染等过程得到,一般的场景模型道具的导出格式约定fbx和obj(Unity对这两种格式支持比较好),缩略图一般为jpg格式,场景模型道具本身是可以直接上传并用于场景编辑的,但本专利中使用assetbundle格式对场景模型道具进行打包,assetbundle是Unity的一种资源打包方式,可以把特定的一些资源打包到assetbundle里,这些资源可以包含模型、贴图、预制体、声音、甚至整个场景,并且其使用LZMA和LZ4压缩算法,可以减少包体大小、方便网络传输。
S22、在Asset下新建Editor文件夹,在所述Editor文件夹下创建AssetBundleBuilder.cs脚本;
其中,Asset是Unity项目中用于存放所有资源文件的地方,包括场景文件、模型、纹理、音频,而Editor文件夹用于存放自定义的Editor脚本,用于自动化和定制开发流程,AssetBundleBuilder.cs脚本是用户自定义的脚本,用存放打包成assetbundle文件的API,而AssetBundleBuilder.cs脚本内部API为 outputPath,BuildAssetBundleOptions.LZ4,BuildTarget.Android参数一为ab输出路径,参数二为压缩方式,参数三为打包平台,将上述API以方法的形式封装于AssetBundleBuilderBuildAssetBundles.cs脚本内。
S23、设置assetbundle标签,确定所述待定文件夹的assetbundle属性并在所述assetbundle属性下新建与所述场景模型道具相同且后缀命名为Unity3D的打包参数,使用所述AssetBundleBuilder.cs脚本并基于所述打包参数对所述场景模型道具进行打包处理,以得到打包assetbundle文件;
具体的,首先设置assetbundle标签,其是unity一个非常重要的概念,它允许开发者对AssetBundle进行分类和标识,以便在运行时根据标签来加载和管理这些资源包,AssetBundle标签的设置通常在打包过程中进行,并且可以在打包脚本中进行定制,在设置assetbundle标签之后,选中要打包的模型文件,在assetbundle属性下新建一个和场景模型道具名称一样的参数,后缀新建一个并命名为Unity3D,选择要打包的物体,使用所述AssetBundleBuilder.cs脚本进行打包,打包好的assetbundle文件会出现在outputPath所在目录下,outputPath代表了在Unity项目中用于保存生成的AssetBundle文件的目录路径。
S24、协程调用UnityWebRequest.Put接口并将所述打包assetbundle文件与对应的缩略图上传至服务器上;
其中,UnityWebRequest.Put接口是Unity网络请求系统中的一个方法,用于通过HTTP PUT请求向远程服务器上传数据。
S25、缓存上传返回的参数并记录返回的文件ID与返回的上传地址,设置请求参数fileUrl、thumbnailUrl、Name、fileType 字段赋值,判断返回的客户端状态码是否为0,若返回的客户端状态码为0,则上传完成,以得到场景素材库;
具体的,在将打包assetbundle文件通过接口进行上传的过程中,存在两步请求,第一步请求:unity客户端通过协程调用UnityWebRequest.Put接口 ,将本地assetbundle文件和缩略图上传到服务器上,并实时获取上传的进度progress,并将progress赋予UGUI界面用于进度展示,上传完成后,缓存返回的参数,记录返回的文件ID和返回的上传地址;第二步请求:设置请求参数 fileUrl、thumbnailUrl、Name、fileType 字段赋值,分别为:第一步中 assetbundle地址、缩略图地址、道具名称和道具分类,其中,fileUrl字段是PUT请求返回的资源下载地址,thumbnailUrl字段是PUT请求返回的资源缩略图的下载地址,Name字段是上传资源用户进行中文命名的名称,fileType字段是上传资源的文件类型,用1,2,3表示,然后进行上传,文件上传完成后,服务器返回给客户端状态码code为0,到此,场景资源文件上传已经完成,即可得到场景素材库。
S3、接收Unity客户方端下发的查询请求,基于所述查询请求在所述场景素材库中查询所需素材的素材文件,采用缓存机制将所述素材文件添加至所述3D场景中,以得到待编辑场景;
其中,所述步骤S3包括:
S31、接收Unity客户方端下发的查询请求,根据所述查询请求在所述场景素材库中查询所需素材的素材文件,并将所述素材文件返回给Unity客户方端,所述Unity客户方端对所述素材文件进行数据解析,以得到每个所述素材文件的缩略图与显示名称;
具体的,在场景模型道具上传之后,可直接场景素材库中搜索相应的素材文件进行添加,其具体为:Unity客户端通过接口向服务器进行分页查询请求,客户端将素材的关键字作为请求参数向服务器进行数据查询,服务器收到请求后,在场景素材库中进行模糊查询,将查询的所有数据以分页列表的形式返回给客户端,客户端收到响应内容,进行数据解析,获取每条数据的缩略图的url和显示名称,其中,缩略图的url即为缩略图的下载地址。
S32、判断每个所述素材文件的缩略图是否在缓存中,若所述素材文件的缩略图在缓存中,则直接获取缓存中素材文件的引用,若所述素材文件的缩略图不在缓存中,则对所述素材文件的md5进行编码并判断本地文件缓存目录cache下是否已存在该远程地址命名的md5编码的文件名;
具体的,为了方便缩略图进行快速显示,此处采用缓存机制,首先从缓存中获取该缩略图是否在缓存中,如果存在直接拿到缓存中文件的引用,如果不存在则对该文件的md5进行编码,然后判断本地文件缓存目录cache下是否已存在该远程地址命名的md5编码的文件名。
S33、若存在该远程地址命名的md5编码的文件名,则跳过下载过程并直接从本地文件缓存目录cache下读取文件,若不存在该远程地址命名的md5编码的文件名,则进行本地文件写入的操作并保存到本地文件缓存目录cache下。
具体的,如果存在该远程地址命名的md5编码的文件名则跳过下载,直接从本地文件缓存目录cache下读取文件,如果不存在该远程地址命名的md5编码的文件名则进行本地文件写入的操作,保存到本地文件缓存目录cache,目录cache为移动设备沙盒目录下的一个用于存储下载文件的目录。
S34、将加载成功的缩略图赋给UGUI的Image对象并将每个所述素材文件的缩略图与显示名称通过UGUI以scrollview组件的形式进行展示并在给scrollview组件下的所有item添加点击事件;
具体的,将加载成功的缩略图对象赋给UGUI的Image对象,最终所有道具的缩略图和名称通过UGUI以scrollview组件的滑动形式进行展示,并在给scrollview组件下的所有item添加点击事件,以实现点击添加道具的功能,Image对象是图片显示组件,主要用于显示图片,scrollview组件为滚动视图组件,用于当呈现的内容长宽大于显示区域时,允许用户在指定区域内拖拽以查看内容的全貌,Item是scrollview下需要展示的视图对象的一个总称,其可以是:图片对象、文字对象。
S35、若用户通过所述点击事件点击缩略图,则通过item所绑定的素材文件的唯一标识符在缓存数据中获取到该素材文件的assetbundle地址,基于assetbundle地址采用缓存机制获取assetbundle对象并进行assetbundle加载,以得到待编辑场景;
具体的,当用户选择列表中的某个素材文件的缩略图,客户端通过item所绑定的道具唯一标识符,在缓存数据中获取到该道具的assetbundle地址,同样采用缓存机制拿到assetbundle对象,然后进行assetbundle加载,同样的,为了保证加载的流程性,这里采用协程调用UnityWebRequestAssetBundle.GetAssetBundle获取Assetbundle对象,然后通过Instantiate将场景道具实例化在场景中,并添加BoxCollider组件用于后续射线操作,并将服务器返回的唯一标识符作为名字赋值给该场景道具对象,然后并根据当前相机的位置,将道具的位置设置在相机的正前方;
其中,UnityWebRequestAssetBundle.GetAssetBundle用于从远程服务器下载AssetBundle的一个方法,assetbundle对象为管理组件,用于管理游戏内容的一个关键特性,其允许将游戏资源打包成独立的文件,并在运行时动态加载这些资源,Instantiate为实例创建方法,其用于创建新的对象实例,BoxCollider组件为基本立方体形碰撞基元,这里用于和射线进行碰撞检测。
S4、获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制,若未超出编辑人数限制,则获取所述开发者的编辑请求,基于所述编辑请求对所述待编辑场景进行编辑;
具体的,步骤S4包括:
S41、获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制;
具体的,对于一个待编辑场景而言,其存在固定的编辑人数限制,即只能同时允许若干人数的开发者进行场景编辑。
S42、若所述开发者的数量未超出编辑人数限制,则获取所述开发者携带的场景ID,基于所述场景ID控制所述开发者进入对应的待编辑场景中。
S43、将所述待编辑场景的场景信息与已加载的素材文件的信息下发至所述开发者,对所述待编辑场景的场景信息进行加载与创建并对已加载的素材文件进行加载,加载完成后设置async.allowSceneActivation为true并将已加载的素材文件进行实例化;
具体的,其中的开发者包括待编辑场景的创建者与其余开发者,例如:开发者A请求并创建了一个场景,并且在场景中添加了很多场景道具,这时开发者B若想进入开发者A所在场景时,开发者B携带场景ID,开始向服务器发起请求进入该场景,服务器判断当前场景是否已达最大人数限制,如果未达到,则将所述待编辑场景的场景信息与已加载的素材文件的信息下发至所述开发者,下发给开发者B,对于开发者B而言,开发者B同样的通过协程调用SceneManager命名空间下的LoadSceneAsync实现异步场景加载和创建,调用之前设置async.allowSceneActivation为false,并通过LoadSceneAsync接口实时获取加载的progress参数,通过UGUI将progress以百分比的形式显示于加载界面,当progress大于等于0.9,将则判断待编辑场景已经加载完成,然后开始加载素材文件列表,加载百分比各占百分之50,加载进度值value = 0.5*(progress+0.1)+0.5*(index/Count),Count为需加载素材文件总数量,index为加载素材文件完成的数量,将value的值以百分比形式呈现在UGUI界面上,当index等同count时,同时设置async.allowSceneActivation为true,跳转到开发者A所在的待编辑场景,此时场景进入成功。
S44、添加BoxCollider组件用于后续射线操作,并将服务器返回的唯一标识符作为名字依次赋值给已加载的素材文件,并刷新已加载的素材文件的transform组件信息;
具体的,当场景进入成功之后,将加载成功的道具进行实例化,并添加BoxCollider组件用于后续射线操作,并将服务器返回的唯一标识符作为名字依次赋值给已加载的素材文件,并刷新已加载的素材文件的transform组件信息。
S45、基于所述transform组件信息进行素材文件的添加、已加载的素材文件的调整、已加载的素材文件的删除,以对所述待编辑场景进行编辑;
具体的,当开发者进入待编辑场景之后且各种素材文件已加载完毕,之后开发者便可执行相应的编辑操作,例如:素材文件的添加、已加载的素材文件的调整、已加载的素材文件的删除。
S5、获取所有所述开发者的编辑操作,基于所有所述开发者的编辑操作对所述待编辑场景进行同步处理;
其中,所述步骤S5包括:
S51、获取所有所述开发者的编辑操作,并判断所述编辑操作的类型。
S52、若所述编辑操作为素材文件的添加,则将素材文件的添加广播至所述待编辑场景中的其余开发者,并更新素材文件的transform组件信息并同步至其余开发者;
具体的,开发者B已经进入开发者A所在的场景后,当开发者A继续添加一个素材文件C,然后保存,即为素材文件的添加,此时开发者通过上述步骤S2进行素材文件的上传,此时所需的素材文件已上传至场景素材库中,开发者A向服务器发起添加素材文件的请求,服务器收到添加请求后,将添加素材文件C的操作广播给场景中的开发者B,开发者B收到广播后,添加本地缓存的场景道具数据,并进行下载加载,将加载成功的素材文件C进行实例化,并添加BoxCollider组件用于后续射线操作,并将服务器返回的唯一标识符作为名字依次赋值给素材文件,并刷新素材文件的transform组件信息。
S53、若所述编辑操作为素材文件的调整,则识别所述素材文件的唯一标识符并判断所述素材文件是否被其余开发者进行编辑操作,若所述素材文件没有被其余开发者进行编辑操作,则将所述素材文件与所述开发者进行归属绑定并广播至其余开发者,为所述素材文件添加不可编辑状态并同步至其余开发者;
具体的,当编辑操作为素材文件的调整时,开发者A若想对已存在的素材文件D进行编辑,由于场景所有素材文件均添加了BoxCollider,这里可以通过单指长按进行射线选中操作,具体为通过Input.GetTouch(0).position获取场景中的坐标,然后通过Camera.main.ScreenPointToRay生成射线,最后通过Physics.Raycast判断该射线是否与场景中的任何物体相交,并返回射线检测碰撞到的物体的详细信息,如碰撞点的位置、碰撞物体的引用等,获取素材文件D的唯一标识符,同样的客户端携带素材文件D的唯一标识符向服务器发起编辑请求,服务器收到编辑请求后,验证素材文件D是否可编辑,如果已经被其他用户编辑了,则返回不可编辑,如果未被用户编辑,则返回可以编辑,并且在数据库中将素材文件D与对应的开发者A进行归属绑定,并广播此素材文件D的数据给当前场景中的开发者B,开发者B收到广播后,将本地缓存的素材文件D的数据进行更新,并且在场景中遍历查找素材文件D,然后通过highlight plus插件将素材文件D的轮廓高光显示,用来标识此道具为不可编辑状态,同样的,当开发者A对素材文件D进行transform信息(大小、位置、朝向)的修改时,服务器也会将素材文件D的transform信息同步给当前场景中的开发者B,其详细过程为:当开发者A通过单指选中素材文件D后,且服务器可进行编辑后,开发者A开始进行编辑,随后将素材文件D加入实时同步队列中,以每秒30次的同步频率,向服务器同步素材文件D的transform数据,服务器收到同步信息后立马广播给当前场景下所有开发者,开发者A收到同步信息后,判断同步的素材文件D是否为自己正在编辑的道具,不做任何处理,开发者B收到同步信息后,更新本地缓存的素材文件D的数据,并且在场景中遍历查找素材文件D,将素材文件D的transform组件信息更新为最新数据;
其中,Input.GetTouch(0).position是属性获取接口,用于获取场景中第一个触摸点的位置的属性,Camera.main.ScreenPointToRay是转换接口,用于将场景中的点(通常触摸点的位置)转换为一个从相机出发并指向该屏幕点的射线,Physics.Raycast是检测接口,用于检测该射线是否与场景中的任何物体相交,Highlight Plus插件为用于实现物体高亮闪光效果的插件,这里用于通过调用Highligt plus插件的Highligt Effect类下的highted字段,来控制素材文件是否进行轮廓高光处理,transform信息表示素材文件实例的基本属性,包含对象的位置、旋转和缩放。
S54、若所述编辑操作为素材文件的删除,则在已加载的素材文件中检索是否存在对应的素材文件,若存在对应的素材文件,则判断所述素材文件是否被其余开发者进行编辑操作,若所述素材文件没有被其余开发者进行编辑操作,则将所述素材文件进行删除并广播至其余开发者,同时将所述素材文件的本地缓存数据进行移除、将所述素材文件的实例通过destroy方法进行删除并同步至其余开发者;
具体的,当所述编辑操作为素材文件的删除时,当开发者A选中素材文件E进行删除后,向服务器发起删除请求,服务器会验证素材文件E是否是开发者A所编辑的道具,如果不是,不可删除,如果是则服务器将素材文件E数据从数据库进行删除,然后将删除素材文件E的操作广播给开发者A和其余开发者,开发者A收到服务器的回复后,将本地缓存的素材文件E的数据进行移除,然后将素材文件E的实例通过destroy方法进行删除,同样的其余开发者收到服务器的回复后,将本地缓存的素材文件E的数据进行移除,然后将遍历查找场景中素材文件E的实例通过destroy方法进行删除。
因此,基于上述步骤,本申请使得场景设计人员能够专注于场景编辑,而不需要过多地熟悉对unity3d的使用,大大简化了操作过程,降低了学习成本,通过引入多人协同场景编辑,可以将大型场景的编辑工作分摊到多个人身上,大大减轻了个人的工作负担,提高了工作效率。同时,多人协同也可以避免因个人疏忽导致的场景冲突,提高了场景的质量,可以为团队合作带来全新的体验,通过共同参与、共同创造,可以提高团队的凝聚力和协作能力,同时也可以提高场景的设计质量和用户体验,本发明不仅适用于游戏开发,也适用于虚拟现实技术领域,具有较强的适应性和广泛的应用前景。
本发明实施例一提供的3D引擎的多人协同场景编辑方法,首先接收Unity客户方端下发的场景创建请求,基于所述场景创建请求创建3D场景;然后基于所述3D场景获取场景模型道具以及对应的缩略图,对所述场景模型道具以及对应的缩略图进行打包并上传至服务器中,以得到场景素材库;然后接收Unity客户方端下发的查询请求,基于所述查询请求在所述场景素材库中查询所需素材的素材文件,采用缓存机制将所述素材文件添加至所述3D场景中,以得到待编辑场景;然后获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制,若未超出编辑人数限制,则获取所述开发者的编辑请求,基于所述编辑请求对所述待编辑场景进行编辑;最后获取所有所述开发者的编辑操作,基于所有所述开发者的编辑操作对所述待编辑场景进行同步处理,本发明解决了场景编辑器使用过程中的高学习成本问题,降低了非Unity3D开发者人员的使用难度,同时还避免了场景冲突的工作量大的问题,通过多人协同场景编辑,可以有效地分担工作量,提高工作效率,降低了对Unity3D使用的依赖性,使得场景编辑更加简单和高效。
实施例二
如图2所示,在本发明的实施例二提供了一种3D引擎的多人协同场景编辑系统,所述系统包括:
创建模块1,用于接收Unity客户方端下发的场景创建请求,基于所述场景创建请求创建3D场景;
打包模块2,用于基于所述3D场景获取场景模型道具以及对应的缩略图,对所述场景模型道具以及对应的缩略图进行打包并上传至服务器中,以得到场景素材库;
加载模块3,用于接收Unity客户方端下发的查询请求,基于所述查询请求在所述场景素材库中查询所需素材的素材文件,采用缓存机制将所述素材文件添加至所述3D场景中,以得到待编辑场景;
编辑模块4,用于获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制,若未超出编辑人数限制,则获取所述开发者的编辑请求,基于所述编辑请求对所述待编辑场景进行编辑;
同步模块5,用于获取所有所述开发者的编辑操作,基于所有所述开发者的编辑操作对所述待编辑场景进行同步处理。
所述创建模块1包括:
ID生成子模块,用于接收Unity客户方端下发的场景创建请求,基于所述场景创建请求为3D场景生成唯一的场景ID;
场景加载子模块,用于基于所述场景ID并调用协程调用SceneManager下的LoadSceneAsync接口实现异步场景加载和创建;
参数加载子模块,用于调用预先设置的async.allowSceneActivation为false,并通过LoadSceneAsync接口实时获取加载的progress参数,通过UGUI将progress以百分比的形式显示于加载界面;
场景生成子模块,用于判断所述progress参数是否大于预设值,若所述progress参数大于预设值,则3D场景已加载完成,并将所述加载界面上显示的百分比设置为100%,同时设置async.allowSceneActivation为true,以得到3D场景。
所述打包模块2包括:
导入子模块,用于基于所述3D场景获取场景模型道具以及对应的缩略图,将所述场景模型道具导入Unity工程中,在所述Unity工程中将所述场景模型道具存入待定文件夹中;
脚本子模块,用于在Asset下新建Editor文件夹,在所述Editor文件夹下创建AssetBundleBuilder.cs脚本;
标签子模块,用于设置assetbundle标签,确定所述待定文件夹的assetbundle属性并在所述assetbundle属性下新建与所述场景模型道具相同且后缀命名为Unity3D的打包参数,使用所述AssetBundleBuilder.cs脚本并基于所述打包参数对所述场景模型道具进行打包处理,以得到打包assetbundle文件;
打包子模块,用于协程调用UnityWebRequest.Put接口并将所述打包assetbundle文件与对应的缩略图上传至服务器上;
赋值子模块,用于缓存上传返回的参数并记录返回的文件ID与返回的上传地址,设置请求参数fileUrl、thumbnailUrl、Name、fileType 字段赋值,判断返回的客户端状态码是否为0,若返回的客户端状态码为0,则上传完成,以得到场景素材库。
所述加载模块3包括:
查询子模块,用于接收Unity客户方端下发的查询请求,根据所述查询请求在所述场景素材库中查询所需素材的素材文件,并将所述素材文件返回给Unity客户方端,所述Unity客户方端对所述素材文件进行数据解析,以得到每个所述素材文件的缩略图与显示名称;
第一判断子模块,用于判断每个所述素材文件的缩略图是否在缓存中,若所述素材文件的缩略图在缓存中,则直接获取缓存中素材文件的引用,若所述素材文件的缩略图不在缓存中,则对所述素材文件的md5进行编码并判断本地文件缓存目录cache下是否已存在该远程地址命名的md5编码的文件名;
缓存子模块,用于若存在该远程地址命名的md5编码的文件名,则跳过下载过程并直接从本地文件缓存目录cache下读取文件,若不存在该远程地址命名的md5编码的文件名,则进行本地文件写入的操作并保存到本地文件缓存目录cache下;
点击子模块,用于将加载成功的缩略图赋给UGUI的Image对象并将每个所述素材文件的缩略图与显示名称通过UGUI以scrollview组件的形式进行展示并在给scrollview组件下的所有item添加点击事件;
加载子模块,用于若用户通过所述点击事件点击缩略图,则通过item所绑定的素材文件的唯一标识符在缓存数据中获取到该素材文件的assetbundle地址,基于assetbundle地址采用缓存机制获取assetbundle对象并进行assetbundle加载,以得到待编辑场景。
所述编辑模块4包括:
第二判断子模块,用于获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制;
场景加入子模块,用于若所述开发者的数量未超出编辑人数限制,则获取所述开发者携带的场景ID,基于所述场景ID控制所述开发者进入对应的待编辑场景中;
实例子模块,用于将所述待编辑场景的场景信息与已加载的素材文件的信息下发至所述开发者,对所述待编辑场景的场景信息进行加载与创建并对已加载的素材文件进行加载,加载完成后设置async.allowSceneActivation为true并将已加载的素材文件进行实例化;
刷新子模块,用于添加BoxCollider组件用于后续射线操作,并将服务器返回的唯一标识符作为名字依次赋值给已加载的素材文件,并刷新已加载的素材文件的transform组件信息;
编辑子模块,用于基于所述transform组件信息进行素材文件的添加、已加载的素材文件的调整、已加载的素材文件的删除,以对所述待编辑场景进行编辑。
所述同步模块5包括:
第三判断子模块,用于获取所有所述开发者的编辑操作,并判断所述编辑操作的类型;
第一同步子模块,用于若所述编辑操作为素材文件的添加,则将素材文件的添加广播至所述待编辑场景中的其余开发者,并更新素材文件的transform组件信息并同步至其余开发者;
第二同步子模块,用于若所述编辑操作为素材文件的调整,则识别所述素材文件的唯一标识符并判断所述素材文件是否被其余开发者进行编辑操作,若所述素材文件没有被其余开发者进行编辑操作,则将所述素材文件与所述开发者进行归属绑定并广播至其余开发者,为所述素材文件添加不可编辑状态并同步至其余开发者;
第三同步子模块,用于若所述编辑操作为素材文件的删除,则在已加载的素材文件中检索是否存在对应的素材文件,若存在对应的素材文件,则判断所述素材文件是否被其余开发者进行编辑操作,若所述素材文件没有被其余开发者进行编辑操作,则将所述素材文件进行删除并广播至其余开发者,同时将所述素材文件的本地缓存数据进行移除、将所述素材文件的实例通过destroy方法进行删除并同步至其余开发者
在本发明的另一些实施例中,本发明实施例提供以下技术方案,一种计算机,包括存储器102、处理器101以及存储在所述存储器102上并可在所述处理器101上运行的计算机程序,所述处理器101执行所述计算机程序时实现如上所述的3D引擎的多人协同场景编辑方法。
具体的,上述处理器101可以包括中央处理器(CPU),或者特定集成电路(Application Specific Integrated Circuit,简称为ASIC),或者可以被配置成实施本发明实施例的一个或多个集成电路。
其中,存储器102可以包括用于数据或指令的大容量存储器。举例来说而非限制,存储器102可包括硬盘驱动器(Hard Disk Drive,简称为HDD)、软盘驱动器、固态驱动器(Solid State Drive,简称为SSD)、闪存、光盘、磁光盘、磁带或通用串行总线(UniversalSerial Bus,简称为USB)驱动器或者两个或更多个以上这些的组合。在合适的情况下,存储器102可包括可移除或不可移除(或固定)的介质。在合适的情况下,存储器102可在数据处理装置的内部或外部。在特定实施例中,存储器102是非易失性(Non-Volatile)存储器。在特定实施例中,存储器102包括只读存储器(Read-Only Memory,简称为ROM)和随机存取存储器(Random Access Memory,简称为RAM)。在合适的情况下,该ROM可以是掩模编程的ROM、可编程ROM(Programmable Read-Only Memory,简称为PROM)、可擦除PROM(ErasableProgrammable Read-Only Memory,简称为EPROM)、电可擦除PROM(Electrically ErasableProgrammable Read-Only Memory,简称为EEPROM)、电可改写ROM(ElectricallyAlterable Read-Only Memory,简称为EAROM)或闪存(FLASH)或者两个或更多个以上这些的组合。在合适的情况下,该RAM可以是静态随机存取存储器(Static Random-AccessMemory,简称为SRAM)或动态随机存取存储器(Dynamic Random Access Memory,简称为DRAM),其中,DRAM可以是快速页模式动态随机存取存储器(Fast Page Mode DynamicRandom Access Memory,简称为FPMDRAM)、扩展数据输出动态随机存取存储器(ExtendedDate Out Dynamic Random Access Memory,简称为EDODRAM)、同步动态随机存取内存(Synchronous Dynamic Random-Access Memory,简称SDRAM)等。
存储器102可以用来存储或者缓存需要处理和/或通信使用的各种数据文件,以及处理器101所执行的可能的计算机程序指令。
处理器101通过读取并执行存储器102中存储的计算机程序指令,以实现上述3D引擎的多人协同场景编辑方法。
在其中一些实施例中,计算机还可包括通信接口103和总线100。其中,如图3所示,处理器101、存储器102、通信接口103通过总线100连接并完成相互间的通信。
通信接口103用于实现本发明实施例中各模块、装置、单元和/或设备之间的通信。通信接口103还可以实现与其他部件例如:外接设备、图像/数据采集设备、数据库、外部存储以及图像/数据处理工作站等之间进行数据通信。
总线100包括硬件、软件或两者,将计算机设备的部件彼此耦接在一起。总线100包括但不限于以下至少之一:数据总线(Data Bus)、地址总线(Address Bus)、控制总线(Control Bus)、扩展总线(Expansion Bus)、局部总线(Local Bus)。举例来说而非限制,总线100可包括图形加速接口(Accelerated Graphics Port,简称为AGP)或其他图形总线、增强工业标准架构(Extended Industry Standard Architecture,简称为EISA)总线、前端总线(Front Side Bus,简称为FSB)、超传输(Hyper Transport,简称为HT)互连、工业标准架构(Industry Standard Architecture,简称为ISA)总线、无线带宽(InfiniBand)互连、低引脚数(Low Pin Count,简称为LPC)总线、存储器总线、微信道架构(Micro ChannelArchitecture,简称为MCA)总线、外围组件互连(Peripheral Component Interconnect,简称为PCI)总线、PCI-Express(PCI-X)总线、串行高级技术附件(Serial AdvancedTechnology Attachment,简称为SATA)总线、视频电子标准协会局部(Video ElectronicsStandards Association Local Bus,简称为VLB)总线或其他合适的总线或者两个或更多个以上这些的组合。在合适的情况下,总线100可包括一个或多个总线。尽管本发明实施例描述和示出了特定的总线,但本发明考虑任何合适的总线或互连。
该计算机可以基于获取到3D引擎的多人协同场景编辑系统,执行本发明的3D引擎的多人协同场景编辑方法,从而实现3D引擎的多人协同场景编辑。
在本发明的再一些实施例中,结合上述的3D引擎的多人协同场景编辑方法,本发明实施例提供以下技术方案,一种存储介质,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述的3D引擎的多人协同场景编辑方法。
本领域技术人员可以理解,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或它们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (6)
1.一种3D引擎的多人协同场景编辑方法,其特征在于,包括:
接收Unity客户方端下发的场景创建请求,基于所述场景创建请求创建3D场景;
基于所述3D场景获取场景模型道具以及对应的缩略图,对所述场景模型道具以及对应的缩略图进行打包并上传至服务器中,以得到场景素材库;
接收Unity客户方端下发的查询请求,基于所述查询请求在所述场景素材库中查询所需素材的素材文件,采用缓存机制将所述素材文件添加至所述3D场景中,以得到待编辑场景;
获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制,若未超出编辑人数限制,则获取所述开发者的编辑请求,基于所述编辑请求对所述待编辑场景进行编辑;
获取所有所述开发者的编辑操作,基于所有所述开发者的编辑操作对所述待编辑场景进行同步处理;
所述基于所述3D场景获取场景模型道具以及对应的缩略图,对所述场景模型道具以及对应的缩略图进行打包并上传至服务器中,以得到场景素材库的步骤包括:
基于所述3D场景获取场景模型道具以及对应的缩略图,将所述场景模型道具导入Unity工程中,在所述Unity工程中将所述场景模型道具存入待定文件夹中;
在Asset下新建Editor文件夹,在所述Editor文件夹下创建AssetBundleBuilder.cs脚本;
设置assetbundle标签,确定所述待定文件夹的assetbundle属性并在所述assetbundle属性下新建与所述场景模型道具相同且后缀命名为Unity3D的打包参数,使用所述AssetBundleBuilder.cs脚本并基于所述打包参数对所述场景模型道具进行打包处理,以得到打包assetbundle文件;
协程调用UnityWebRequest.Put接口并将所述打包assetbundle文件与对应的缩略图上传至服务器上;
缓存上传返回的参数并记录返回的文件ID与返回的上传地址,设置请求参数fileUrl、thumbnailUrl、Name、fileType 字段赋值,判断返回的客户端状态码是否为0,若返回的客户端状态码为0,则上传完成,以得到场景素材库;
所述接收Unity客户方端下发的查询请求,基于所述查询请求在所述场景素材库中查询所需素材的素材文件,采用缓存机制将所述素材文件添加至所述3D场景中,以得到待编辑场景的步骤包括:
接收Unity客户方端下发的查询请求,根据所述查询请求在所述场景素材库中查询所需素材的素材文件,并将所述素材文件返回给Unity客户方端,所述Unity客户方端对所述素材文件进行数据解析,以得到每个所述素材文件的缩略图与显示名称;
判断每个所述素材文件的缩略图是否在缓存中,若所述素材文件的缩略图在缓存中,则直接获取缓存中素材文件的引用,若所述素材文件的缩略图不在缓存中,则对所述素材文件的md5进行编码并判断本地文件缓存目录cache下是否已存在远程地址命名的md5编码的文件名;
若存在该远程地址命名的md5编码的文件名,则跳过下载过程并直接从本地文件缓存目录cache下读取文件,若不存在该远程地址命名的md5编码的文件名,则进行本地文件写入的操作并保存到本地文件缓存目录cache下;
将加载成功的缩略图赋给UGUI的Image对象并将每个所述素材文件的缩略图与显示名称通过UGUI以scrollview组件的形式进行展示并在给scrollview组件下的所有item添加点击事件;
若用户通过所述点击事件点击缩略图,则通过item所绑定的素材文件的唯一标识符在缓存数据中获取到该素材文件的assetbundle地址,基于assetbundle地址采用缓存机制获取assetbundle对象并进行assetbundle加载,以得到待编辑场景;
所述获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制,若未超出编辑人数限制,则获取所述开发者的编辑请求,基于所述编辑请求对所述待编辑场景进行编辑的步骤包括:
获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制;
若所述开发者的数量未超出编辑人数限制,则获取所述开发者携带的场景ID,基于所述场景ID控制所述开发者进入对应的待编辑场景中;
将所述待编辑场景的场景信息与已加载的素材文件的信息下发至所述开发者,对所述待编辑场景的场景信息进行加载与创建并对已加载的素材文件进行加载,加载完成后设置async.allowSceneActivation为true并将已加载的素材文件进行实例化;
添加BoxCollider组件用于后续射线操作,并将服务器返回的唯一标识符作为名字依次赋值给已加载的素材文件,并刷新已加载的素材文件的transform组件信息;
基于所述transform组件信息进行素材文件的添加、已加载的素材文件的调整、已加载的素材文件的删除,以对所述待编辑场景进行编辑;
所述获取所有所述开发者的编辑操作,基于所有所述开发者的编辑操作对所述待编辑场景进行同步处理的步骤包括:
获取所有所述开发者的编辑操作,并判断所述编辑操作的类型;
若所述编辑操作为素材文件的添加,则将素材文件的添加广播至所述待编辑场景中的其余开发者,并更新素材文件的transform组件信息并同步至其余开发者;
若所述编辑操作为素材文件的调整,则识别所述素材文件的唯一标识符并判断所述素材文件是否被其余开发者进行编辑操作,若所述素材文件没有被其余开发者进行编辑操作,则将所述素材文件与所述开发者进行归属绑定并广播至其余开发者,为所述素材文件添加不可编辑状态并同步至其余开发者;
若所述编辑操作为素材文件的删除,则在已加载的素材文件中检索是否存在对应的素材文件,若存在对应的素材文件,则判断所述素材文件是否被其余开发者进行编辑操作,若所述素材文件没有被其余开发者进行编辑操作,则将所述素材文件进行删除并广播至其余开发者,同时将所述素材文件的本地缓存数据进行移除、将所述素材文件的实例通过destroy方法进行删除并同步至其余开发者。
2.根据权利要求1所述的3D引擎的多人协同场景编辑方法,其特征在于,所述接收Unity客户方端下发的场景创建请求,基于所述场景创建请求创建3D场景的步骤包括:
接收Unity客户方端下发的场景创建请求,基于所述场景创建请求为3D场景生成唯一的场景ID;
基于所述场景ID并调用协程调用SceneManager下的LoadSceneAsync接口实现异步场景加载和创建;
调用预先设置的async.allowSceneActivation为false,并通过LoadSceneAsync接口实时获取加载的progress参数,通过UGUI将progress以百分比的形式显示于加载界面;
判断所述progress参数是否大于预设值,若所述progress参数大于预设值,则3D场景已加载完成,并将所述加载界面上显示的百分比设置为100%,同时设置async.allowSceneActivation为true,以得到3D场景。
3.一种3D引擎的多人协同场景编辑系统,所述系统采用如权利要求1所述的3D引擎的多人协同场景编辑方法,其特征在于,所述系统包括:
创建模块,用于接收Unity客户方端下发的场景创建请求,基于所述场景创建请求创建3D场景;
打包模块,用于基于所述3D场景获取场景模型道具以及对应的缩略图,对所述场景模型道具以及对应的缩略图进行打包并上传至服务器中,以得到场景素材库;
加载模块,用于接收Unity客户方端下发的查询请求,基于所述查询请求在所述场景素材库中查询所需素材的素材文件,采用缓存机制将所述素材文件添加至所述3D场景中,以得到待编辑场景;
编辑模块,用于获取所述待编辑场景的开发者,并判断所述开发者的数量是否超出编辑人数限制,若未超出编辑人数限制,则获取所述开发者的编辑请求,基于所述编辑请求对所述待编辑场景进行编辑;
同步模块,用于获取所有所述开发者的编辑操作,基于所有所述开发者的编辑操作对所述待编辑场景进行同步处理;
所述打包模块包括:
导入子模块,用于基于所述3D场景获取场景模型道具以及对应的缩略图,将所述场景模型道具导入Unity工程中,在所述Unity工程中将所述场景模型道具存入待定文件夹中;
脚本子模块,用于在Asset下新建Editor文件夹,在所述Editor文件夹下创建AssetBundleBuilder.cs脚本;
标签子模块,用于设置assetbundle标签,确定所述待定文件夹的assetbundle属性并在所述assetbundle属性下新建与所述场景模型道具相同且后缀命名为Unity3D的打包参数,使用所述AssetBundleBuilder.cs脚本并基于所述打包参数对所述场景模型道具进行打包处理,以得到打包assetbundle文件;
打包子模块,用于协程调用UnityWebRequest.Put接口并将所述打包assetbundle文件与对应的缩略图上传至服务器上;
赋值子模块,用于缓存上传返回的参数并记录返回的文件ID与返回的上传地址,设置请求参数fileUrl、thumbnailUrl、Name、fileType 字段赋值,判断返回的客户端状态码是否为0,若返回的客户端状态码为0,则上传完成,以得到场景素材库。
4.根据权利要求3所述的3D引擎的多人协同场景编辑系统,其特征在于,所述创建模块包括:
ID生成子模块,用于接收Unity客户方端下发的场景创建请求,基于所述场景创建请求为3D场景生成唯一的场景ID;
场景加载子模块,用于基于所述场景ID并调用协程调用SceneManager下的LoadSceneAsync接口实现异步场景加载和创建;
参数加载子模块,用于调用预先设置的async.allowSceneActivation为false,并通过LoadSceneAsync接口实时获取加载的progress参数,通过UGUI将progress以百分比的形式显示于加载界面;
场景生成子模块,用于判断所述progress参数是否大于预设值,若所述progress参数大于预设值,则3D场景已加载完成,并将所述加载界面上显示的百分比设置为100%,同时设置async.allowSceneActivation为true,以得到3D场景。
5.一种计算机,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至2任一项所述的3D引擎的多人协同场景编辑方法。
6.一种存储介质,其特征在于,所述存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至2任一项所述的3D引擎的多人协同场景编辑方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410543966.3A CN118134440B (zh) | 2024-05-06 | 2024-05-06 | 一种3d引擎的多人协同场景编辑方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202410543966.3A CN118134440B (zh) | 2024-05-06 | 2024-05-06 | 一种3d引擎的多人协同场景编辑方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN118134440A CN118134440A (zh) | 2024-06-04 |
CN118134440B true CN118134440B (zh) | 2024-07-26 |
Family
ID=91246771
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202410543966.3A Active CN118134440B (zh) | 2024-05-06 | 2024-05-06 | 一种3d引擎的多人协同场景编辑方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN118134440B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111563727A (zh) * | 2020-05-06 | 2020-08-21 | 厦门知本家科技有限公司 | 一种多人在线协同编辑3d户型数据的方法及系统 |
CN117745992A (zh) * | 2023-12-04 | 2024-03-22 | 杭州我玩我酷科技有限公司 | 一种3d场景实时多人协同方法及系统 |
Family Cites Families (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107170050A (zh) * | 2017-06-05 | 2017-09-15 | 北京寰和通创科技有限公司 | 物联图元的3d场景建立方法及系统 |
CN108053174A (zh) * | 2017-12-06 | 2018-05-18 | 北京像素软件科技股份有限公司 | 场景编辑方法及系统 |
US20210304632A1 (en) * | 2020-03-16 | 2021-09-30 | Street Smarts VR | Dynamic scenario creation in virtual reality simulation systems |
CN114241130A (zh) * | 2021-12-13 | 2022-03-25 | 深圳市优必选科技股份有限公司 | 场景处理方法、装置及电子设备 |
CN114913306A (zh) * | 2022-04-29 | 2022-08-16 | 南京新研协同定位导航研究院有限公司 | 一种mr混合现实3d内容的多人协作编辑系统及方法 |
CN116843879B (zh) * | 2023-07-18 | 2024-01-19 | 数元科技(广州)有限公司 | 一种跨引擎vr编辑场景生成方法及系统 |
-
2024
- 2024-05-06 CN CN202410543966.3A patent/CN118134440B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111563727A (zh) * | 2020-05-06 | 2020-08-21 | 厦门知本家科技有限公司 | 一种多人在线协同编辑3d户型数据的方法及系统 |
CN117745992A (zh) * | 2023-12-04 | 2024-03-22 | 杭州我玩我酷科技有限公司 | 一种3d场景实时多人协同方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN118134440A (zh) | 2024-06-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8614706B2 (en) | Lightweight three-dimensional display | |
CN106598591B (zh) | 一种网页动态菜单生成方法及装置 | |
AU2009225393B2 (en) | File access via conduit application | |
US11016785B2 (en) | Method and system for mirror image package preparation and application operation | |
CN114064024B (zh) | 微应用的开发方法、装置、设备、存储介质及程序产品 | |
JPH1124980A (ja) | 複数媒体タイプにアクセスする媒体管理装置及び方法 | |
CN112631591B (zh) | 表元素联动方法、装置、设备与计算机可读存储介质 | |
CN112256990B (zh) | 一种图像处理方法及装置、计算机可读存储介质 | |
CN110245069A (zh) | 页面版本的测试方法和装置、页面的展示方法和装置 | |
CN111506300A (zh) | 一种小程序生成方法、装置、设备及存储介质 | |
CN113885935A (zh) | 资源打包方法、装置、电子设备及计算机可读存储介质 | |
CN114791961A (zh) | 媒体数据处理方法、装置及终端设备 | |
JP2002352219A (ja) | 視野データに従う仮想空間におけるリンクされた複数の情報オブジェクトの表示 | |
EP4300303A1 (en) | Animation resource information processing method and apparatus, device, medium and product | |
US12153902B2 (en) | Content development device | |
CN118134440B (zh) | 一种3d引擎的多人协同场景编辑方法及系统 | |
CN114995806A (zh) | 一种可被集成的高扩展性页面设计方法及系统 | |
CN115993971A (zh) | 活动页面生成方法、计算设备及计算机存储介质 | |
CN109508434B (zh) | 区块生成方法、网页渲染方法及装置 | |
CN116510315A (zh) | 虚拟资源的管理方法、装置、计算机设备及存储介质 | |
CN119182956A (zh) | 视频草稿编辑方法、装置、计算设备 | |
CN118585494A (zh) | 安装包解析方法、装置、计算机设备及存储介质 | |
CN116796101A (zh) | 一种构建数字化管理平台的方法、设备及存储介质 | |
CN117972249A (zh) | 应用资源的缓存方法、装置、电子设备及存储介质 | |
CN112487332A (zh) | 图片处理方法、装置、电子设备及可读介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |