prefab内容分析

本文转自:https://www.cnblogs.com/blueberryzzz/p/9097391.html,请点击链接查看原文,尊重楼主版权。(有个人轻微修改)

前言:

如果打开prefab文件是乱码,则Unity中点击Edit-Project Setting-Editor,然后在Inspector面板中AssetSerialization里选择ForceText。(本文Unity版本为2017.4.12,与5.x版本有些不同)

一、什么是Prefab

Prefab是unity3d中的一种资源类型,用于存储可重复使用的游戏对象,来方便快捷的创建实例。
通过prefab在场景中创建的所有实例,都会链接到原始的prefab,所以当修改原始的prefab时,所有场景中的所有prefab实例都会被修改。

二、Prefab文件的内容

Prefab文件的内容是通过YAML语言序列化的一个GameObject的对象,包含了这个GameObject的所有描述信息(GameObject信息、Compent实例和属性等)。

三、从一个UI的Prefab说起

prefab文件的内容

一个MainUI空物体下有:一个Image组件使用了RectTransform-CanvasRenderer-Image组件,一个Text使用了RectTransform-CanvasRenderer-NewTempText组件,NewTempText继承自UGUI的Text。

%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!1001 &100100000
Prefab:
  m_ObjectHideFlags: 1
  serializedVersion: 2
  m_Modification:
    m_TransformParent: {fileID: 0}
    m_Modifications: []
    m_RemovedComponents: []
  m_ParentPrefab: {fileID: 0}
  m_RootGameObject: {fileID: 1584932412801430}
  m_IsPrefabParent: 1
--- !u!1 &1371898556151132
GameObject:
  m_ObjectHideFlags: 0
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  serializedVersion: 5
  m_Component:
  - component: {fileID: 224403532645876076}
  - component: {fileID: 222392532102221554}
  - component: {fileID: 114249348854969090}
  m_Layer: 0
  m_Name: Image
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!1 &1477442230281094
GameObject:
  m_ObjectHideFlags: 0
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  serializedVersion: 5
  m_Component:
  - component: {fileID: 224125095733739228}
  - component: {fileID: 222881951360802480}
  - component: {fileID: 114755593969431376}
  m_Layer: 0
  m_Name: Text
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!1 &1584932412801430
GameObject:
  m_ObjectHideFlags: 0
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  serializedVersion: 5
  m_Component:
  - component: {fileID: 224345533291003680}
  m_Layer: 0
  m_Name: MainUI
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!114 &114249348854969090
MonoBehaviour:
  m_ObjectHideFlags: 1
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  m_GameObject: {fileID: 1371898556151132}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}
  m_Name: 
  m_EditorClassIdentifier: 
  m_Material: {fileID: 0}
  m_Color: {r: 1, g: 1, b: 1, a: 1}
  m_RaycastTarget: 1
  m_OnCullStateChanged:
    m_PersistentCalls:
      m_Calls: []
    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
  m_Sprite: {fileID: 0}
  m_Type: 0
  m_PreserveAspect: 0
  m_FillCenter: 1
  m_FillMethod: 4
  m_FillAmount: 1
  m_FillClockwise: 1
  m_FillOrigin: 0
--- !u!114 &114755593969431376
MonoBehaviour:
  m_ObjectHideFlags: 1
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  m_GameObject: {fileID: 1477442230281094}
  m_Enabled: 1
  m_EditorHideFlags: 0
  m_Script: {fileID: 11500000, guid: a9148530f8f3cbf4daf4b87f1ac10dde, type: 3}
  m_Name: 
  m_EditorClassIdentifier: 
  m_Material: {fileID: 0}
  m_Color: {r: 1, g: 1, b: 1, a: 1}
  m_RaycastTarget: 1
  m_OnCullStateChanged:
    m_PersistentCalls:
      m_Calls: []
    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
  m_FontData:
    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
    m_FontSize: 14
    m_FontStyle: 0
    m_BestFit: 0
    m_MinSize: 10
    m_MaxSize: 40
    m_Alignment: 0
    m_AlignByGeometry: 0
    m_RichText: 1
    m_HorizontalOverflow: 0
    m_VerticalOverflow: 0
    m_LineSpacing: 1
  m_Text: AA
  isNew: 1
--- !u!222 &222392532102221554
CanvasRenderer:
  m_ObjectHideFlags: 1
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  m_GameObject: {fileID: 1371898556151132}
--- !u!222 &222881951360802480
CanvasRenderer:
  m_ObjectHideFlags: 1
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  m_GameObject: {fileID: 1477442230281094}
--- !u!224 &224125095733739228
RectTransform:
  m_ObjectHideFlags: 1
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  m_GameObject: {fileID: 1477442230281094}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 224345533291003680}
  m_RootOrder: 1
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
  m_AnchoredPosition: {x: 0, y: 0}
  m_SizeDelta: {x: 160, y: 30}
  m_Pivot: {x: 0.5, y: 0.5}
--- !u!224 &224345533291003680
RectTransform:
  m_ObjectHideFlags: 1
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  m_GameObject: {fileID: 1584932412801430}
  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children:
  - {fileID: 224403532645876076}
  - {fileID: 224125095733739228}
  m_Father: {fileID: 0}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0, y: 0}
  m_AnchorMax: {x: 1, y: 1}
  m_AnchoredPosition: {x: 0, y: 0}
  m_SizeDelta: {x: 0, y: 0}
  m_Pivot: {x: 0.5, y: 0.5}
--- !u!224 &224403532645876076
RectTransform:
  m_ObjectHideFlags: 1
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  m_GameObject: {fileID: 1371898556151132}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 224345533291003680}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
  m_AnchoredPosition: {x: 0, y: 0}
  m_SizeDelta: {x: 100, y: 100}
  m_Pivot: {x: 0.5, y: 0.5}

分析其中内容

1.前两行内容是yaml语言的注释

2.接下来是prefab中所有对象的描述信息

每个元素的描述内容以--- !u!n1 & n2开头,其中n1代表元素的类型ID(每个ID的具体含义参考YAML Class ID Reference),n2代表这个元素的本地ID(fileID,在prefab文件中唯一)

可以看到这个prefab中有Prefab,GameObject,MonoBehaviour,CanvasRenderer,RectTransform 几种类型。
除了Prefab对象代表prefab本身的信息,其他几个对象正是物体和组件的信息。

3.Prefab的详细说明
— !u!1001 &100100000
1001 代表这是一个Prefab,prefab的本地Id一般都是100100000。
m_RootGameObject交代了prefab根节点物体的本地ID。

<1>前两个下面再说
<2>m_Modification:
当一个prefab实例化到场景中的时候,代表场景prefab实例被修改的值,这些值不随原始prefab资源的修改而修改。
在原始prefab资源中是空的。
<3>m_ParentPrefab: {fileID: 0}
在场景中的一个prefab实例中代表这个prefab对应的原始perfab资源中的prefab对象。
在prefab实例中是0。
<4>m_RootGameObject: {fileID: 1584932412801430}
交代了prefab根节点物体的本地ID。
<5>m_IsPrefabParent: 1
可能是Prefab是资源还是实例的标记,不太确定。

4.第一个GameObject对象的详细说明(第一个GameObject不一定是根节点物体,例如这里第一个GameObject是子物体Image物体)

<1>— !u!1 &1371898556151132
1代表这是一个GameObject类型的对象,1371898556151132是这个GameObject对象在Prefab资源中的fileID(本地ID)。
<2>m_ObjectHideFlags:0
这个元素在Project视图中是否被隐藏,没被隐藏,值为0。(Project下Prefab一般只显示根节点和1级子节点,更深层次的被隐藏)
<3>m_PrefabParentObject: {fileID: 0}
代表场景中的prefab实例与原始prefab资源的链接,当一个prefab实例链接被破坏(删除prefab实例的一个子节点,或修改一个子节点父子关系),或其中的compent被剥离到场景文件中(stripped,比如prefab实例在场景中不是根节点,而是一个GameObject的子节点,那么prefab实例的transtrom就会被剥离到场景文件中,赋予一个fileID,用来描述prefab实例的父子关系)时,生成的对象的m_PrefabParentObject会对应到原始prefab资源中的对象。

在原始prefab资源中,所有对象的m_PrefabParentObject都是0,代表空。
<4>m_PrefabInternal: {fileID: 100100000}
该属性表示这个对象属于哪个prefab对象。
在场景中当一个compent被剥离时,会指向场景中的prefab实例。
在原始prefab资源中,因为prefab中只有一个prefab对象,fileID就是1000100000。
所以在原始prefab资源中,所有对象的m_PrefabInternal值都是{fileID: 100100000}。
Stripped举例:
新建一个叫testStripped的prefab,用一个空的GameObject给它赋值,然后将这个prefab拖到Main Camera下,保存场景文件后查看场景文件内容。

Transform:
  m_ObjectHideFlags: 0
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 0}
  m_GameObject: {fileID: 280358070}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 1, z: -10}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_Children:
  - {fileID: 619871928}
  m_Father: {fileID: 0}
  m_RootOrder: 0
--- !u!1001 &619871927
Prefab:
  m_ObjectHideFlags: 0
  serializedVersion: 2
  m_Modification:
    m_TransformParent: {fileID: 280358075}
    m_Modifications:
    - target: {fileID: 488654, guid: 617cd7fcc638efd44b4beab357086bc0, type: 2}
      propertyPath: m_LocalPosition.x
      value: 384.3385
      objectReference: {fileID: 0}
    - target: {fileID: 488654, guid: 617cd7fcc638efd44b4beab357086bc0, type: 2}
      propertyPath: m_LocalPosition.y
      value: 223.03131
      objectReference: {fileID: 0}
    - target: {fileID: 488654, guid: 617cd7fcc638efd44b4beab357086bc0, type: 2}
      propertyPath: m_LocalPosition.z
      value: 126.32626
      objectReference: {fileID: 0}
    - target: {fileID: 488654, guid: 617cd7fcc638efd44b4beab357086bc0, type: 2}
      propertyPath: m_LocalRotation.x
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 488654, guid: 617cd7fcc638efd44b4beab357086bc0, type: 2}
      propertyPath: m_LocalRotation.y
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 488654, guid: 617cd7fcc638efd44b4beab357086bc0, type: 2}
      propertyPath: m_LocalRotation.z
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 488654, guid: 617cd7fcc638efd44b4beab357086bc0, type: 2}
      propertyPath: m_LocalRotation.w
      value: 1
      objectReference: {fileID: 0}
    - target: {fileID: 488654, guid: 617cd7fcc638efd44b4beab357086bc0, type: 2}
      propertyPath: m_RootOrder
      value: 0
      objectReference: {fileID: 0}
    m_RemovedComponents: []
  m_ParentPrefab: {fileID: 100100000, guid: 617cd7fcc638efd44b4beab357086bc0, type: 2}
  m_IsPrefabParent: 0
--- !u!4 &619871928 stripped
Transform:
  m_PrefabParentObject: {fileID: 488654, guid: 617cd7fcc638efd44b4beab357086bc0, type: 2}
  m_PrefabInternal: {fileID: 619871927}

<5>serializedVersion: 5
序列化的版本,跟unity版本有关,不太确定。
<6>m_Component:
该GameObject包含哪些component,包含的对象用fileID表示。这个GameObject包含了3个Component,分别是RectTransform,CanvasRenderer,Image。可在prefab内容的下方看到这些组件的详细信息。
<7>m_Layer: 0
GameObject所在的层级。
<8>m_Name: Image
GameObject的名称。
<9>m_TagString: Untagged
Tag。
<10>m_Icon: {fileID: 0}
图标,fileID为0代表没有图标。
图标会显示在场景中,比如选择这个红色的icon,在场景中就可以看到prefab上出现了一个红色的标签。0代表没有标签。

prefab内容分析

prefab内容分析

<11>m_NavMeshLayer: 0
GameObject的NavigationArea属性,与自动寻路有关。
<12>m_StaticEditorFlags: 0
GameObject的Static属性。
<13>m_IsActive: 1
GameObject是否是active状态。

4.接下来看下组件的信息

--- !u!224 &224403532645876076
RectTransform:
  m_ObjectHideFlags: 1
  m_PrefabParentObject: {fileID: 0}
  m_PrefabInternal: {fileID: 100100000}
  m_GameObject: {fileID: 1371898556151132}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 0, y: 0, z: 0}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_Children: []
  m_Father: {fileID: 224345533291003680}
  m_RootOrder: 0
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_AnchorMin: {x: 0.5, y: 0.5}
  m_AnchorMax: {x: 0.5, y: 0.5}
  m_AnchoredPosition: {x: 0, y: 0}
  m_SizeDelta: {x: 100, y: 100}
  m_Pivot: {x: 0.5, y: 0.5}

— !u!224 &224403532645876076
224表示RectTransform
然后下面列出了组件的一些数据信息

同样222表示CanvasRenderer,和这个类似。

然后看下Image组件:
— !u!114 &114249348854969090

114表示MonoBehaviour,代表脚本组件,不同于其他基本组件。

里面也列出了一些数据信息,注意比上面两个组件多了一个m_Script:

m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}

这里的fileID是整这个组件引用的脚本文件的FileID,guid是这个脚本文件的GUID(全局唯一,记录在文件对应的的meta文件中)。

补充知识点:GUID与fileID(本地ID)

Unity会为每个导入到Assets目录中的资源创建一个meta文件,文件中记录了GUID,GUID用来记录资源之间的引用关系。还有fileID(本地ID),用于标识资源内部的资源。资源间的依赖关系通过GUID来确定;资源内部的依赖关系使用fileID来确定。

简单总结一下一个prefab的内容

prefab文件并不存储具体资源,而是使用了yaml语言描述了一个被序列化的GameObject对象中包含的所有GameObject,Component的信息。包括相互之间的关系、存储的数据和引用信息。

四、prefab在场景中的使用

1.简单介绍场景文件的内容
一个场景文件也是通过yaml语言序列化的场景内容,一个场景文件不仅包含显示在hierarchy中的GameObject、prefab信息,还包含了场景的设置信息。比prefab稍微复杂一些。

2.prefab文件在场景中的内容
新建一个test场景,将test拖入场景中,然后保存,查看场景中的Prefab实例信息。

--- !u!1001 &131130024
Prefab:
  m_ObjectHideFlags: 0
  serializedVersion: 2
  m_Modification:
    m_TransformParent: {fileID: 0}
    m_Modifications:
    - target: {fileID: 481870, guid: fda6bd048b136f44286b537a5526a83c, type: 2}
      propertyPath: m_LocalPosition.x
      value: 384.3385
      objectReference: {fileID: 0}
    - target: {fileID: 481870, guid: fda6bd048b136f44286b537a5526a83c, type: 2}
      propertyPath: m_LocalPosition.y
      value: 224.03131
      objectReference: {fileID: 0}
    - target: {fileID: 481870, guid: fda6bd048b136f44286b537a5526a83c, type: 2}
      propertyPath: m_LocalPosition.z
      value: 116.32626
      objectReference: {fileID: 0}
    - target: {fileID: 481870, guid: fda6bd048b136f44286b537a5526a83c, type: 2}
      propertyPath: m_LocalRotation.x
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 481870, guid: fda6bd048b136f44286b537a5526a83c, type: 2}
      propertyPath: m_LocalRotation.y
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 481870, guid: fda6bd048b136f44286b537a5526a83c, type: 2}
      propertyPath: m_LocalRotation.z
      value: 0
      objectReference: {fileID: 0}
    - target: {fileID: 481870, guid: fda6bd048b136f44286b537a5526a83c, type: 2}
      propertyPath: m_LocalRotation.w
      value: 1
      objectReference: {fileID: 0}
    - target: {fileID: 481870, guid: fda6bd048b136f44286b537a5526a83c, type: 2}
      propertyPath: m_RootOrder
      value: 2
      objectReference: {fileID: 0}
    m_RemovedComponents: []
  m_ParentPrefab: {fileID: 100100000, guid: fda6bd048b136f44286b537a5526a83c, type: 2}
  m_IsPrefabParent: 0

可以看到一个prefab被实例化到场景中时,没有将prefab资源中内容直接复制到场景中,而是生成了一个prefab对象。
m_ParentPrefab代表这个prefab对应的prefab资源。
m_Modification代表这个prefab实例中属性的修改信息,场景在读取一个prefab实例时,会查看prefab资源中的属性是否在m_Modification中存在,如果存在,则使用m_Modification中保存的值。这样就保证了修改了场景中的prefab实例的属性,不会被prefab资源的修改而覆盖。
正是这两个属性让prefab实例具有了与prefab资源同步修改,但会保存自己特性的功能。

3.Break Prefab Instance
如果我们希望一个prefab实例完全不随prefab的修改而修改,那么我们可以通过Break Prefab Instance选项实现。

prefab内容分析
将一个prefab实例Break之后,这个prefab就会像一个普通的GameObject存在场景中

--- !u!1 &765230757
GameObject:
  m_ObjectHideFlags: 0
  m_PrefabParentObject: {fileID: 101978, guid: fda6bd048b136f44286b537a5526a83c, type: 2}
  m_PrefabInternal: {fileID: 0}
  serializedVersion: 4
  m_Component:
  - 4: {fileID: 765230761}
  - 33: {fileID: 765230760}
  - 65: {fileID: 765230759}
  - 23: {fileID: 765230758}
  m_Layer: 0
  m_Name: aCube
  m_TagString: Untagged
  m_Icon: {fileID: 0}
  m_NavMeshLayer: 0
  m_StaticEditorFlags: 0
  m_IsActive: 1
--- !u!23 &765230758
MeshRenderer:
  m_ObjectHideFlags: 0
  m_PrefabParentObject: {fileID: 2346436, guid: fda6bd048b136f44286b537a5526a83c,
    type: 2}
  m_PrefabInternal: {fileID: 0}
  m_GameObject: {fileID: 765230757}
  m_Enabled: 1
  m_CastShadows: 1
  m_ReceiveShadows: 1
  m_Materials:
  - {fileID: 10303, guid: 0000000000000000f000000000000000, type: 0}
  m_SubsetIndices: 
  m_StaticBatchRoot: {fileID: 0}
  m_UseLightProbes: 1
  m_ReflectionProbeUsage: 1
  m_ProbeAnchor: {fileID: 0}
  m_ScaleInLightmap: 1
  m_PreserveUVs: 1
  m_IgnoreNormalsForChartDetection: 0
  m_ImportantGI: 0
  m_MinimumChartSize: 4
  m_AutoUVMaxDistance: 0.5
  m_AutoUVMaxAngle: 89
  m_LightmapParameters: {fileID: 0}
  m_SortingLayerID: 0
  m_SortingOrder: 0
--- !u!65 &765230759
BoxCollider:
  m_ObjectHideFlags: 0
  m_PrefabParentObject: {fileID: 6596578, guid: fda6bd048b136f44286b537a5526a83c,
    type: 2}
  m_PrefabInternal: {fileID: 0}
  m_GameObject: {fileID: 765230757}
  m_Material: {fileID: 0}
  m_IsTrigger: 0
  m_Enabled: 1
  serializedVersion: 2
  m_Size: {x: 1, y: 1, z: 1}
  m_Center: {x: 0, y: 0, z: 0}
--- !u!33 &765230760
MeshFilter:
  m_ObjectHideFlags: 0
  m_PrefabParentObject: {fileID: 3343092, guid: fda6bd048b136f44286b537a5526a83c,
    type: 2}
  m_PrefabInternal: {fileID: 0}
  m_GameObject: {fileID: 765230757}
  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}
--- !u!4 &765230761
Transform:
  m_ObjectHideFlags: 0
  m_PrefabParentObject: {fileID: 481870, guid: fda6bd048b136f44286b537a5526a83c, type: 2}
  m_PrefabInternal: {fileID: 0}
  m_GameObject: {fileID: 765230757}
  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
  m_LocalPosition: {x: 384.3385, y: 224.03131, z: 116.32626}
  m_LocalScale: {x: 1, y: 1, z: 1}
  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
  m_Children: []
  m_Father: {fileID: 0}
  m_RootOrder: 2

每个元素的m_PrefabParentObject都指向了原始prefab资源中对应的对象。

prefab内容分析
右边的prefab表示也会变为黄色,这代表这个prefab虽然被break了,但是还可以通过与原始prefab资源的链接去select,revert或apply,来变回或修改原来的prefab实例。

再次声明:

本文转自:https://www.cnblogs.com/blueberryzzz/p/9097391.html,请点击链接查看原文,尊重楼主版权。

相关文章:

  • 2021-06-28
  • 2021-06-25
  • 2021-07-03
  • 2022-01-16
  • 2021-05-16
  • 2021-10-30
  • 2022-02-08
  • 2021-08-02
猜你喜欢
  • 2021-06-24
  • 2022-01-28
  • 2022-12-23
  • 2022-12-23
  • 2021-11-12
  • 2021-05-26
相关资源
相似解决方案