@@ -84,17 +84,44 @@ private static DragAndDropVisualMode OnProjectBrowserDrop(int dragInstanceId, st
84
84
{
85
85
VolumeRenderedObject srcVolRendObj = volRendObjects [ i ] ;
86
86
VolumeRenderedObject prefabVolRendObj = prefabVolRendObjects [ i ] ;
87
- VolumeDataset dataset = ScriptableObject . Instantiate ( srcVolRendObj . dataset ) ;
88
- TransferFunction transferFunction = ScriptableObject . Instantiate ( srcVolRendObj . transferFunction ) ;
89
- Material material = Material . Instantiate ( srcVolRendObj . meshRenderer . sharedMaterial ) ;
90
- AssetDatabase . AddObjectToAsset ( dataset , prefab ) ;
91
- AssetDatabase . AddObjectToAsset ( transferFunction , prefab ) ;
92
- AssetDatabase . AddObjectToAsset ( material , prefab ) ;
93
- prefabVolRendObj . dataset = dataset ;
94
- prefabVolRendObj . transferFunction = transferFunction ;
95
- prefabVolRendObj . meshRenderer . material = material ;
87
+ if ( srcVolRendObj . dataset != prefabVolRendObj . dataset )
88
+ {
89
+ // Dataset changed => remove old one form asset to avoid wasting space
90
+ if ( prefabVolRendObj . dataset != null )
91
+ AssetDatabase . RemoveObjectFromAsset ( prefabVolRendObj . dataset ) ;
92
+ VolumeDataset dataset = ScriptableObject . Instantiate ( srcVolRendObj . dataset ) ;
93
+ AssetDatabase . AddObjectToAsset ( dataset , prefab ) ;
94
+ prefabVolRendObj . dataset = dataset ;
95
+ }
96
+ if ( srcVolRendObj . transferFunction != prefabVolRendObj . transferFunction )
97
+ {
98
+ if ( prefabVolRendObj . transferFunction != null )
99
+ AssetDatabase . RemoveObjectFromAsset ( prefabVolRendObj . transferFunction ) ;
100
+ TransferFunction transferFunction = ScriptableObject . Instantiate ( srcVolRendObj . transferFunction ) ;
101
+ AssetDatabase . AddObjectToAsset ( transferFunction , prefab ) ;
102
+ prefabVolRendObj . transferFunction = transferFunction ;
103
+ }
104
+ if ( srcVolRendObj . meshRenderer . sharedMaterial != prefabVolRendObj . meshRenderer . sharedMaterial )
105
+ {
106
+ if ( prefabVolRendObj . meshRenderer . sharedMaterial != null )
107
+ AssetDatabase . RemoveObjectFromAsset ( prefabVolRendObj . meshRenderer . sharedMaterial ) ;
108
+ Material material = Material . Instantiate ( srcVolRendObj . meshRenderer . sharedMaterial ) ;
109
+ AssetDatabase . AddObjectToAsset ( material , prefab ) ;
110
+ prefabVolRendObj . meshRenderer . material = material ;
111
+ }
96
112
}
97
113
PrefabUtility . SavePrefabAsset ( prefab ) ;
114
+ for ( int i = 0 ; i < volRendObjects . Length ; i ++ )
115
+ {
116
+ VolumeRenderedObject srcVolRendObj = volRendObjects [ i ] ;
117
+ VolumeRenderedObject prefabVolRendObj = prefabVolRendObjects [ i ] ;
118
+ if ( ! AssetDatabase . Contains ( srcVolRendObj . dataset ) )
119
+ ScriptableObject . DestroyImmediate ( srcVolRendObj . dataset ) ;
120
+ srcVolRendObj . dataset = prefabVolRendObj . dataset ;
121
+ srcVolRendObj . transferFunction = prefabVolRendObj . transferFunction ;
122
+ srcVolRendObj . meshRenderer . sharedMaterial = prefabVolRendObj . meshRenderer . sharedMaterial ;
123
+ srcVolRendObj . UpdateMaterialProperties ( ) ;
124
+ }
98
125
}
99
126
100
127
return DragAndDropVisualMode . Copy ;
0 commit comments