CN117827309A - 在Unity的play模式下修改预制的方法、系统、设备及介质 - Google Patents
在Unity的play模式下修改预制的方法、系统、设备及介质 Download PDFInfo
- Publication number
- CN117827309A CN117827309A CN202311750862.1A CN202311750862A CN117827309A CN 117827309 A CN117827309 A CN 117827309A CN 202311750862 A CN202311750862 A CN 202311750862A CN 117827309 A CN117827309 A CN 117827309A
- Authority
- CN
- China
- Prior art keywords
- prefabrication
- node
- loading
- component
- instanceid
- 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.)
- Pending
Links
- 238000009417 prefabrication Methods 0.000 title claims abstract description 207
- 238000000034 method Methods 0.000 title claims abstract description 45
- 230000004048 modification Effects 0.000 claims abstract description 51
- 238000012986 modification Methods 0.000 claims abstract description 51
- 238000013507 mapping Methods 0.000 claims abstract description 39
- 230000008859 change Effects 0.000 claims description 7
- 230000008569 process Effects 0.000 claims description 7
- 238000012217 deletion Methods 0.000 claims description 6
- 230000037430 deletion Effects 0.000 claims description 6
- 238000010276 construction Methods 0.000 claims description 3
- 230000009286 beneficial effect Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 230000006870 function Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 238000009877 rendering Methods 0.000 description 1
- 238000013515 script Methods 0.000 description 1
Classifications
-
- 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
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
在Unity的play模式下修改预制的方法、系统、设备及介质,包括加载每个预制资源时,获取加载预制每个节点及节点对应组件的InstanceID;基于加载预制生成对应的实例化预制时,获取实例化预制每个节点及节点对应组件的InstanceID;将实例化预制与加载预制的InstanceID一一对应,构建以实例化预制InstanceID为key,加载预制InstanceID为value的〈key,value〉结构,得到二者的映射关系;获取用户选择指令,保存所选节点的当前组件信息以及对应的属性信息;基于所选节点根据预设修改方式对所选节点的对应组件进行修改,并将实例化预制的修改同步应用至加载预制。
Description
技术领域
本发明涉及计算机技术领域,特别是在Unity的play模式下修改预制的方法、系统、设备及介质。
背景技术
Unity是一款是实时3D互动内容创作和运营平台,其界面直观,架构非常简单(包括对象和组件)。此外,Unity还具有强大的图形渲染以及引擎性能,无论是策划人员、美术人员、测试人员还是程序员都可以很好地使用Unity进行游戏创作。
Unity在2018.3以前的版本中提供了一个属性“ExecuteInEditMode”,这个属性是为了在Editor模式下也能完整地执行脚本的MonoBehaviour周期。但是,“ExecuteInEditMode”属性会导致在play模式下无法打开预制体进行编辑和更改,而实际开发中该属性会被大量地使用。这意味着,当运行游戏时,若需要修改预制节点,则需要先退出play模式,再打开预制修改,进入play模式查看实际的运行效果,导致整个修改预制的操作繁琐且耗时。
因此,现有技术中修改预制的方法存在操作繁琐、效率较低的问题。
发明内容
本发明的主要目的在于提供了在Unity的play模式下修改预制的方法、系统、设备及介质,旨在解决现有的修改预制的方法操作繁琐、效率较低的技术问题。
为实现上述目的,本发明提供了在Unity的play模式下修改预制的方法,其包括以下步骤:S100、加载每个预制资源时,获取加载预制每个节点及节点对应组件的InstanceID;S200、基于加载预制生成对应的实例化预制时,获取实例化预制每个节点及节点对应组件的InstanceID;S300、将实例化预制的InstanceID与加载预制的InstanceID一一对应,构建以实例化预制的InstanceID为key,加载预制的InstanceID为value的〈key,value〉结构,得到加载预制与实例化预制的映射关系;S400、获取用户选择指令,保存用户选择指令中所选节点的当前组件信息以及组件对应的属性信息;所述用户选择指令具体为用户在play模式下所选的需要保存的实例化预制节点;S500、基于所选节点,根据预设修改方式对所选节点的对应组件进行修改,并根据映射关系将实例化预制的修改同步应用至加载预制;所述修改具体为更改预制节点组件或删除预制节点组件或增加预制节点组件。
可选的,步骤S300至少包括以下步骤:S310、基于实例化预制,遍历实例化预制所有的子节点,遍历的过程中以同样的路径获取加载预制中对应的子节点;S320、加载实例化预制节点所有对应组件的InstanceID以及加载预制节点所有对应组件的InstanceID,并将实例化预制的InstanceID与加载预制的InstanceID一一对应;S330、构建以实例化预制的InstanceID为key,加载预制的InstanceID为value的〈key,value〉结构,得到加载预制与实例化预制的映射关系。
可选的,步骤S400所述保存用户选择指令中所选节点的当前组件信息以及组件对应的属性信息,具体是通过Unity中的SerializedObject类保存所选节点的当前组件信息,通过Unity中的SerializedProperty类保存当前组件对应的属性信息。
可选的,步骤S400至少包括以下步骤:S410、将所选节点的当前组件信息作为参数传递至SerializedObject类,基于SerializedObject类对当前组件信息进行解析处理,得到当前组件存储的属性字段以及对应的值;S411、将当前组件存储的属性字段以及对应的值保存为SerializedProperty类。
可选的,步骤S500中,当所述修改具体为更改预制节点组件时,步骤S500至少包括以下步骤:S510、基于SerializedObject类的GetIterator接口和NextVisible接口,遍历SerializedObject类所存储的所有SerializedProperty属性;S511、基于加载预制与实例化预制的映射关系,获取加载预制中对应节点的对应组件的SerializedProperty属性;所述对应节点具体为加载预制中与所选节点对应的加载预制节点;S512、调用SerializedProperty类的DataEquals接口,将步骤S510与S511的两个SerializedProperty属性进行对比,判断两者是否一致,若是,则返回True,若否,则返回False,分别显示两个SerializedProperty属性并执行步骤S513;S513、获取用户所要保存回实例化预制的SerializedProperty属性,基于加载预制与实例化预制的映射关系获取加载预制的对应节点,并将对应的SerializedProperty属性写回至加载预制中。
可选的,步骤S500中,当所述修改具体为删除预制节点组件时,则步骤S500至少包括以下步骤:S520、基于加载预制与实例化预制的映射关系,遍历映射数据中所选节点对应组件的InstanceID以及加载预制中对应节点的对应组件的InstanceID;所述对应节点具体为加载预制中与所选节点对应的加载预制节点;S521、判断是否存在仅存在于加载预制中的InstanceID,若是,则认定所选节点已删除该InstanceID对应的组件,执行步骤S522;S522、基于加载预制与实例化预制的映射关系获取加载预制的对应节点,并调用DestroyImmediate接口删除对应节点的对应组件;所述对应节点具体为加载预制中与所选节点对应的加载预制节点。
可选的,步骤S500中,当所述修改具体为增加预制节点组件时,则步骤S500至少包括以下步骤:S530、遍历所选节点的组件;S531、将步骤S530的遍历结果与步骤S200获取的实例化预制节点对应组件的InstanceID进行对比,判断遍历结果是否均存在对应的InstanceID,若否,则认定所选节点存在新增组件,执行步骤S532;S532、先调用ComponentUtility.CopyComp onent(component)接口对新增组件进行复制,再调用ComponentUtility.PasteComponentAsNew(root)接口将新增组件复制至加载预制节点。
与所述在Unity的play模式下修改预制的方法相对应的,本发明提供一种在Unity的play模式下修改预制的系统,其包括:第一数据获取模块,加载每个预制资源时,获取加载预制每个节点及节点对应组件的InstanceID;第二数据获取模块,用于基于加载预制生成对应的实例化预制时,获取实例化预制每个节点及节点对应组件的InstanceID;映射关系构建模块,用于将实例化预制的InstanceID与加载预制的InstanceID一一对应,构建以实例化预制的InstanceID为key,加载预制的InstanceID为value的〈key,value〉结构,得到加载预制与实例化预制的映射关系;用户选择指令获取模块,用于获取用户选择指令,保存用户选择指令中所选节点的当前组件信息以及组件对应的属性信息;所述用户选择指令具体为用户在play模式下所选的需要保存的实例化预制节点;修改模块,用于基于所选节点,根据预设修改方式对所选节点的对应组件进行修改,并根据映射关系将实例化预制的修改同步应用至加载预制;所述修改具体为更改预制节点组件或删除预制节点组件或增加预制节点组件。
此外,为实现上述目的,本发明还提供一种在Unity的play模式下修改预制的设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现如上文所述的在Unity的play模式下修改预制的方法的步骤。
此外,为实现上述目的,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有在Unity的play模式下修改预制的程序,所述在Unity的play模式下修改预制的程序被处理器执行时实现如上文所述的在Unity的play模式下修改预制的方法的步骤。
本发明的有益效果是:
(1)与现有技术相比,本发明通过将实例化预制的InstanceID与加载预制的InstanceID一一对应,构建以实例化预制的InstanceID为key,加载预制的InstanceID为value的〈key,value〉结构,得到加载预制与实例化预制的映射关系;将实例化预制的InstanceID和加载预制的InstanceID做映射,确保有个唯一标识符用于定位到加载预制上,以达到在play模式下能直接将对实例化预制的改动同步应用在加载预制上,不需要反复切入切出play模式,因此与现有技术相比,本发明操作简便、效率较高;
(2)与现有技术相比,本发明通过Unity中的SerializedObject类保存所选节点的当前组件信息,通过Unity中的SerializedProperty类保存当前组件对应的属性信息,能够为后续基于所选节点,根据预设修改方式对所选节点的对应组件进行修改的操作打下基础,确保能够高效、准确地执行修改操作;
(3)与现有技术相比,本发明通过将所选节点对应组件的SerializedProperty属性与加载预制中对应节点的对应组件的SerializedProperty属性进行对比,能够确定两者是否一致,并对所选节点的对应组件进行更改,再将更改写回至加载预制中;
(4)与现有技术相比,本发明通过遍历映射数据中所选节点对应组件的InstanceID以及加载预制中对应节点的对应组件的InstanceID,判断是否存在仅存在于加载预制中的InstanceID;能够确定所选节点已删除的组件,并调用DestroyImmediate接口删除对应节点的对应组件;
(5)与现有技术相比,本发明通过将步骤S530的遍历结果与步骤S200获取的实例化预制节点对应组件的InstanceID进行对比,判断遍历结果是否均存在对应的InstanceID;能够确定是否存在新增组件,并将新增组件复制至加载预制节点。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为本发明在Unity的play模式下修改预制的方法一实施例的流程简图;
图2为本发明在Unity的play模式下修改预制的系统一实施例的框架图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
如图1所示,本发明的在Unity的play模式下修改预制的方法,其包括以下步骤:S100、加载每个预制资源时,获取加载预制每个节点及节点对应组件的InstanceID;S200、基于加载预制生成对应的实例化预制时,获取实例化预制每个节点及节点对应组件的InstanceID;S300、将实例化预制的InstanceID与加载预制的InstanceID一一对应,构建以实例化预制的InstanceID为key,加载预制的InstanceID为value的〈key,value〉结构,得到加载预制与实例化预制的映射关系;S400、获取用户选择指令,保存用户选择指令中所选节点的当前组件信息以及组件对应的属性信息;所述用户选择指令具体为用户在play模式下所选的需要保存的实例化预制节点;S500、基于所选节点,根据预设修改方式对所选节点的对应组件进行修改,并根据映射关系将实例化预制的修改同步应用至加载预制;所述修改具体为更改预制节点组件或删除预制节点组件或增加预制节点组件。
优选的,预制资源指未加载前还在硬盘上的资源;加载预制是指保存在硬盘上的预制资源;实例化预制是指将加载预制读到内存中,并通过加载预制实例化出来的预制,可以理解为是对加载预制的拷贝;节点是指Unity中的GameObject对象;组件是指Unity中实现各种功能的基类,每个GameObject对象都包含多个组件;InstanceID是指Unity中用来表示唯一对象的标识,对象包括GameObject以及组件。
本发明通过将实例化预制的InstanceID与加载预制的InstanceID一一对应,构建以实例化预制的InstanceID为key,加载预制的InstanceID为value的〈key,value〉结构,得到加载预制与实例化预制的映射关系;将实例化预制的InstanceID和加载预制的InstanceID做映射,确保有个唯一标识符用于定位到加载预制上,以达到在play模式下能直接将对实例化预制的改动同步应用在加载预制上,不需要反复切入切出play模式,因此与现有技术相比,本发明操作简便、效率较高。
在本实施例中,步骤S300至少包括以下步骤:S310、基于实例化预制,遍历实例化预制所有的子节点,遍历的过程中以同样的路径获取加载预制中对应的子节点;S320、加载实例化预制节点所有对应组件的InstanceID以及加载预制节点所有对应组件的InstanceID,并将实例化预制的InstanceID与加载预制的InstanceID一一对应;S330、构建以实例化预制的InstanceID为key,加载预制的InstanceID为value的〈key,value〉结构,得到加载预制与实例化预制的映射关系。
优选的,S310所述遍历的过程中以同样的路径获取加载预制中对应的子节点,例如:当获取实例化预制第一层的第二个位置的子节点时,相应地,也获取加载预制第一层的第二个位置的子节点。
在本实施例中,步骤S400所述保存用户选择指令中所选节点的当前组件信息以及组件对应的属性信息,具体是通过Unity中的SerializedObject类保存所选节点的当前组件信息,通过Unity中的SerializedProperty类保存当前组件对应的属性信息。
在本实施例中,步骤S400至少包括以下步骤:S410、将所选节点的当前组件信息作为参数传递至SerializedObject类,基于SerializedObject类对当前组件信息进行解析处理,得到当前组件存储的属性字段以及对应的值;S411、将当前组件存储的属性字段以及对应的值保存为SerializedProperty类。
本发明通过Unity中的SerializedObject类保存所选节点的当前组件信息,通过Unity中的SerializedProperty类保存当前组件对应的属性信息,能够为后续基于所选节点,根据预设修改方式对所选节点的对应组件进行修改的操作打下基础,确保能够高效、准确地执行修改操作。
现有技术中,在Unity的play模式下,对实例化预制的修改是没有办法应用到加载预制上的,并且通常需要在实例化预制上先进行一次改动来确定需要改动的具体值,然后再退出Unity的play模式,去另外修改加载预制。本发明所述在Unity的play模式下修改预制的方法主要解决的就是该痛点,达到在play模式下能直接将对实例化预制的改动同步应用在加载预制上。
具体而言,在本实施例中,步骤S500中,当所述修改具体为更改预制节点组件时,步骤S500至少包括以下步骤:S510、基于SerializedObject类的GetIterator接口和NextVisible接口,遍历SerializedObject类所存储的所有SerializedProperty属性;S511、基于加载预制与实例化预制的映射关系,获取加载预制中对应节点的对应组件的SerializedProperty属性;所述对应节点具体为加载预制中与所选节点对应的加载预制节点;S512、调用SerializedProperty类的DataEquals接口,将步骤S510与S511的两个SerializedProperty属性进行对比,判断两者是否一致,若是,则返回True,若否,则返回False,分别显示两个SerializedProperty属性并执行步骤S513;S513、获取用户所要保存回实例化预制的SerializedProperty属性,基于加载预制与实例化预制的映射关系获取加载预制的对应节点,并将对应的SerializedProperty属性写回至加载预制中。
优选的,分别显示两个SerializedProperty属性时,显示面板的左边可显示原来的SerializedProperty属性,右边显示修改后的SerializedProperty属性;这是为了便于用户清楚更改内容,以及选择所要保存回实例化预制的SerializedProperty属性。
本发明通过将所选节点对应组件的SerializedProperty属性与加载预制中对应节点的对应组件的SerializedProperty属性进行对比,能够确定两者是否一致,并对所选节点的对应组件进行更改,再将更改写回至加载预制中。
在本实施例中,步骤S500中,当所述修改具体为删除预制节点组件时,则步骤S500至少包括以下步骤:S520、基于加载预制与实例化预制的映射关系,遍历映射数据中所选节点对应组件的InstanceID以及加载预制中对应节点的对应组件的InstanceID;所述对应节点具体为加载预制中与所选节点对应的加载预制节点;S521、判断是否存在仅存在于加载预制中的InstanceID,若是,则认定所选节点已删除该InstanceID对应的组件,执行步骤S522;S522、基于加载预制与实例化预制的映射关系获取加载预制的对应节点,并调用DestroyImmediate接口删除对应节点的对应组件;所述对应节点具体为加载预制中与所选节点对应的加载预制节点。
本发明通过遍历映射数据中所选节点对应组件的InstanceID以及加载预制中对应节点的对应组件的InstanceID,判断是否存在仅存在于加载预制中的InstanceID;能够确定所选节点已删除的组件,并调用DestroyImmediate接口删除对应节点的对应组件。
在本实施例中,步骤S500中,当所述修改具体为增加预制节点组件时,则步骤S500至少包括以下步骤:S530、遍历所选节点的组件;S531、将步骤S530的遍历结果与步骤S200获取的实例化预制节点对应组件的InstanceID进行对比,判断遍历结果是否均存在对应的InstanceID,若否,则认定所选节点存在新增组件,执行步骤S532;S532、先调用ComponentUtility.Copy Component(component)接口对新增组件进行复制,再调用ComponentUtility.PasteComponentAsNew(root)接口将新增组件复制至加载预制节点。
本发明通过将步骤S530的遍历结果与步骤S200获取的实例化预制节点对应组件的InstanceID进行对比,判断遍历结果是否均存在对应的InstanceID;能够确定是否存在新增组件,并将新增组件复制至加载预制节点。
如图2所示,本发明还对应提供一种在Unity的play模式下修改预制的系统,其包括:第一数据获取模块10,加载每个预制资源时,获取加载预制每个节点及节点对应组件的InstanceID;第二数据获取模块20,用于基于加载预制生成对应的实例化预制时,获取实例化预制每个节点及节点对应组件的InstanceID;映射关系构建模块30,用于将实例化预制的InstanceID与加载预制的InstanceID一一对应,构建以实例化预制的InstanceID为key,加载预制的InstanceID为value的〈key,value〉结构,得到加载预制与实例化预制的映射关系;用户选择指令获取模块40,用于获取用户选择指令,保存用户选择指令中所选节点的当前组件信息以及组件对应的属性信息;所述用户选择指令具体为用户在play模式下所选的需要保存的实例化预制节点;修改模块50,用于基于所选节点,根据预设修改方式对所选节点的对应组件进行修改,并根据映射关系将实例化预制的修改同步应用至加载预制;所述修改具体为更改预制节点组件或删除预制节点组件或增加预制节点组件。
本发明实施例还提供一种在Unity的play模式下修改预制的设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的程序,所述处理器执行所述程序时实现图1所示的在Unity的play模式下修改预制的方法的步骤。
本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中的存储器中所包含的计算机可读存储介质;也可以是单独存在,未装配入设备中的计算机可读存储介质。该计算机可读存储介质中存储有至少一条指令,所述指令由处理器加载并执行以实现图1所示的在Unity的play模式下修改预制的方法。所述计算机可读存储介质可以是只读存储器,磁盘或光盘等。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置实施例、设备实施例及存储介质实施例而言,由于其与方法实施例基本相似,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。
并且,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
上述说明示出并描述了本发明的优选实施例,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
Claims (10)
1.在Unity的play模式下修改预制的方法,其特征在于,包括以下步骤:
S100、加载每个预制资源时,获取加载预制每个节点及节点对应组件的InstanceID;
S200、基于加载预制生成对应的实例化预制时,获取实例化预制每个节点及节点对应组件的InstanceID;
S300、将实例化预制的InstanceID与加载预制的InstanceID一一对应,构建以实例化预制的InstanceID为key,加载预制的InstanceID为value的〈key,value〉结构,得到加载预制与实例化预制的映射关系;
S400、获取用户选择指令,保存用户选择指令中所选节点的当前组件信息以及组件对应的属性信息;所述用户选择指令具体为用户在play模式下所选的需要保存的实例化预制节点;
S500、基于所选节点,根据预设修改方式对所选节点的对应组件进行修改,并根据映射关系将实例化预制的修改同步应用至加载预制;所述修改具体为更改预制节点组件或删除预制节点组件或增加预制节点组件。
2.根据权利要求1所述的在Unity的play模式下修改预制的方法,其特征在于:步骤S300至少包括以下步骤:
S310、基于实例化预制,遍历实例化预制所有的子节点,遍历的过程中以同样的路径获取加载预制中对应的子节点;
S320、加载实例化预制节点所有对应组件的InstanceID以及加载预制节点所有对应组件的InstanceID,并将实例化预制的InstanceID与加载预制的InstanceID一一对应;
S330、构建以实例化预制的InstanceID为key,加载预制的InstanceID为value的〈key,value〉结构,得到加载预制与实例化预制的映射关系。
3.根据权利要求1所述的在Unity的play模式下修改预制的方法,其特征在于:步骤S400所述保存用户选择指令中所选节点的当前组件信息以及组件对应的属性信息,具体是通过Unity中的SerializedObject类保存所选节点的当前组件信息,通过Unity中的SerializedProperty类保存当前组件对应的属性信息。
4.根据权利要求3所述的在Unity的play模式下修改预制的方法,其特征在于:步骤S400至少包括以下步骤:
S410、将所选节点的当前组件信息作为参数传递至SerializedObject类,基于SerializedObject类对当前组件信息进行解析处理,得到当前组件存储的属性字段以及对应的值;
S411、将当前组件存储的属性字段以及对应的值保存为SerializedProperty类。
5.根据权利要求4所述的在Unity的play模式下修改预制的方法,其特征在于:步骤S500中,当所述修改具体为更改预制节点组件时,步骤S500至少包括以下步骤:
S510、基于SerializedObject类的GetIterator接口和NextVisible接口,遍历SerializedObject类所存储的所有SerializedProperty属性;
S511、基于加载预制与实例化预制的映射关系,获取加载预制中对应节点的对应组件的SerializedProperty属性;所述对应节点具体为加载预制中与所选节点对应的加载预制节点;
S512、调用SerializedProperty类的DataEquals接口,将步骤S510与S511的两个SerializedProperty属性进行对比,判断两者是否一致,若是,则返回True,若否,则返回False,分别显示两个SerializedProperty属性并执行步骤S513;
S513、获取用户所要保存回实例化预制的SerializedProperty属性,基于加载预制与实例化预制的映射关系获取加载预制的对应节点,并将对应的SerializedProperty属性写回至加载预制中。
6.根据权利要求4所述的在Unity的play模式下修改预制的方法,其特征在于:步骤S500中,当所述修改具体为删除预制节点组件时,则步骤S500至少包括以下步骤:
S520、基于加载预制与实例化预制的映射关系,遍历映射数据中所选节点对应组件的InstanceID以及加载预制中对应节点的对应组件的InstanceID;所述对应节点具体为加载预制中与所选节点对应的加载预制节点;
S521、判断是否存在仅存在于加载预制中的InstanceID,若是,则认定所选节点已删除该InstanceID对应的组件,执行步骤S522;
S522、基于加载预制与实例化预制的映射关系获取加载预制的对应节点,并调用DestroyImmediate接口删除对应节点的对应组件;所述对应节点具体为加载预制中与所选节点对应的加载预制节点。
7.根据权利要求4所述的在Unity的play模式下修改预制的方法,其特征在于:步骤S500中,当所述修改具体为增加预制节点组件时,则步骤S500至少包括以下步骤:
S530、遍历所选节点的组件;
S531、将步骤S530的遍历结果与步骤S200获取的实例化预制节点对应组件的InstanceID进行对比,判断遍历结果是否均存在对应的InstanceID,若否,则认定所选节点存在新增组件,执行步骤S532;
S532、先调用ComponentUtility.CopyComponent(component)接口对新增组件进行复制,再调用ComponentUtility.PasteComponentAsNew(root)接口将新增组件复制至加载预制节点。
8.一种在Unity的play模式下修改预制的系统,其特征在于,包括:
第一数据获取模块,加载每个预制资源时,获取加载预制每个节点及节点对应组件的InstanceID;
第二数据获取模块,用于基于加载预制生成对应的实例化预制时,获取实例化预制每个节点及节点对应组件的InstanceID;
映射关系构建模块,用于将实例化预制的InstanceID与加载预制的InstanceID一一对应,构建以实例化预制的InstanceID为key,加载预制的InstanceID为value的〈key,value〉结构,得到加载预制与实例化预制的映射关系;
用户选择指令获取模块,用于获取用户选择指令,保存用户选择指令中所选节点的当前组件信息以及组件对应的属性信息;所述用户选择指令具体为用户在play模式下所选的需要保存的实例化预制节点;
修改模块,用于基于所选节点,根据预设修改方式对所选节点的对应组件进行修改,并根据映射关系将实例化预制的修改同步应用至加载预制;所述修改具体为更改预制节点组件或删除预制节点组件或增加预制节点组件。
9.一种在Unity的play模式下修改预制的设备,包括存储器、处理器以及存储在存储器上并可在处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至7任一项所述的在Unity的play模式下修改预制的方法的步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有在Unity的play模式下修改预制的程序,所述在Unity的play模式下修改预制的程序被处理器执行时实现如权利要求1至7任一项所述的在Unity的play模式下修改预制的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311750862.1A CN117827309A (zh) | 2023-12-18 | 2023-12-18 | 在Unity的play模式下修改预制的方法、系统、设备及介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311750862.1A CN117827309A (zh) | 2023-12-18 | 2023-12-18 | 在Unity的play模式下修改预制的方法、系统、设备及介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117827309A true CN117827309A (zh) | 2024-04-05 |
Family
ID=90520162
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311750862.1A Pending CN117827309A (zh) | 2023-12-18 | 2023-12-18 | 在Unity的play模式下修改预制的方法、系统、设备及介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117827309A (zh) |
-
2023
- 2023-12-18 CN CN202311750862.1A patent/CN117827309A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7836055B2 (en) | XNA relationship management | |
KR101130525B1 (ko) | 서식 유형들을 사용하여 서식을 생성하기 위한 방법 및장치 | |
US8190648B1 (en) | Method and system for the storage and use of engineering modeling alternatives with unitized data | |
Mehra et al. | A generic approach to supporting diagram differencing and merging for collaborative design | |
US5019961A (en) | Computer apparatus and method for logical modelling | |
US6651240B1 (en) | Object-oriented software development support apparatus and development support method | |
KR101183351B1 (ko) | 사용자 맞춤화에 기초한 그래픽 프레젠테이션 관리 | |
JP4195444B2 (ja) | ファイル・システムapiを拡張するための方法およびシステム | |
US5913063A (en) | Drag and drop object subclassing | |
WO2007089350A1 (en) | Displaying game asset relationships in a game development environment | |
US8584084B2 (en) | System for library content creation | |
CN108280026A (zh) | 自动化测试方法及装置、存储介质、电子设备 | |
KR100928192B1 (ko) | 내장형 디바이스에서의 3d 콘텐츠에 대한 오프라인 최적화파이프라인 | |
CN114494024B (zh) | 图像渲染方法、装置、设备及存储介质 | |
US20050216883A1 (en) | API for building semantically rich diagramming tools | |
Paterno' et al. | A Semantics‐based Approach for the Design and Implementation of Interaction Objects | |
CN112138380A (zh) | 一种游戏中数据编辑的方法和装置 | |
CN117827309A (zh) | 在Unity的play模式下修改预制的方法、系统、设备及介质 | |
CN115390840A (zh) | 一种可视化页面的生成方法、装置及系统 | |
CN112966041A (zh) | 数据处理方法、装置、设备及存储介质 | |
CN117035081B (zh) | 一种多元多模态知识图谱的构建方法及装置 | |
Mitchell et al. | DRIVE: an environment for the organised construction of user-interfaces to databases | |
KR100277706B1 (ko) | 서비스개발환경에서 에스아이비 응용 프로그램 수행 방법 | |
US11822773B2 (en) | Systems and methods for generating and utilizing an interactive causal loop diagram using a causal loop designer | |
JP3314905B2 (ja) | 画面情報参照再生装置 |
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 |