1515using UnityEditor ;
1616using UnityEditor . PackageManager ;
1717using UnityEngine ;
18+ using UnityEngine . Rendering ;
1819using Wave . XR ;
1920using Wave . XR . Settings ;
2021
@@ -182,6 +183,35 @@ internal static bool IsInteractionModePackageOnceImported()
182183 }
183184 #endregion
184185
186+ #region BodyTracking asset
187+ const string kBodyTrackingAsset = "/BodyTracking.asset" ;
188+ public static void UpdateAssetBodyTracking ( bool importedBodyTrackingPackage )
189+ {
190+ PackageEssenceAsset asset = null ;
191+ if ( File . Exists ( WaveEssencePath + kBodyTrackingAsset ) )
192+ {
193+ asset = AssetDatabase . LoadAssetAtPath ( WaveEssencePath + kBodyTrackingAsset , typeof ( PackageEssenceAsset ) ) as PackageEssenceAsset ;
194+ asset . importedBodyTrackingPackage = importedBodyTrackingPackage ;
195+ }
196+ else
197+ {
198+ asset = ScriptableObject . CreateInstance ( typeof ( PackageEssenceAsset ) ) as PackageEssenceAsset ;
199+ asset . importedBodyTrackingPackage = importedBodyTrackingPackage ;
200+ AssetDatabase . CreateAsset ( asset , WaveEssencePath + kBodyTrackingAsset ) ;
201+ }
202+ AssetDatabase . SaveAssets ( ) ;
203+ Debug . Log ( "UpdateAssetBodyTracking() " + WaveEssencePath + kBodyTrackingAsset + ", importedBodyTrackingPackage: " + asset . importedBodyTrackingPackage ) ;
204+ }
205+ internal static bool IsBodyTrackingPackageOnceImported ( )
206+ {
207+ if ( ! File . Exists ( WaveEssencePath + kBodyTrackingAsset ) )
208+ return false ;
209+
210+ PackageEssenceAsset asset = AssetDatabase . LoadAssetAtPath ( WaveEssencePath + kBodyTrackingAsset , typeof ( PackageEssenceAsset ) ) as PackageEssenceAsset ;
211+ return asset . importedBodyTrackingPackage ;
212+ }
213+ #endregion
214+
185215 private static readonly string [ ] essenceKeywords = new string [ ]
186216 {
187217 "Wave" ,
@@ -195,7 +225,10 @@ internal static bool IsInteractionModePackageOnceImported()
195225 "XR" ,
196226 "Tracker" ,
197227 "ScenePerception" ,
198- "TrackableMarker"
228+ "TrackableMarker" ,
229+ "URPMaterials" ,
230+ "Spectator" ,
231+ "BodyTracking" ,
199232 } ;
200233
201234 internal static UnityEditor . PackageManager . PackageInfo pi = null ;
@@ -239,6 +272,12 @@ internal static void Init()
239272 internal const string kScenePerceptionPackage = "wave_essence_sceneperception.unitypackage" ;
240273 internal const string kTrackableMarkerPath = "/TrackableMarker" ;
241274 internal const string kTrackableMarkerPackage = "wave_essence_trackablemarker.unitypackage" ;
275+ internal const string kURPMaterialsPackage = "wave_essence_urpmaterials.unitypackage" ;
276+ internal const string kSpectatorPath = "/Spectator" ;
277+ internal const string kSpectatorPackage = "wave_essence_spectator.unitypackage" ;
278+ internal const string kBodyTrackingPath = "/BodyTracking" ;
279+ internal const string kBodyTrackingPackage = "wave_essence_bodytracking.unitypackage" ;
280+ internal const string kVrm1Package = "VRM-0.109.0_7aff.unitypackage" ;
242281
243282 internal static bool featureControllerModelImported = false ;
244283 internal static bool featureInputModuleImported = false ;
@@ -252,6 +291,8 @@ internal static void Init()
252291 internal static bool featureTrackerModelImported = false ;
253292 internal static bool featureScenePerceptionImported = false ;
254293 internal static bool featureTrackableMarkerImported = false ;
294+ internal static bool featureSpectatorImported = false ;
295+ internal static bool featureBodyTrackingImported = false ;
255296
256297 internal static bool featureControllerModelNeedUpdate = false ;
257298 internal static bool featureInputModuleNeedUpdate = false ;
@@ -265,6 +306,8 @@ internal static void Init()
265306 internal static bool featureTrackerModelNeedUpdate = false ;
266307 internal static bool featureScenePerceptionNeedUpdate = false ;
267308 internal static bool featureTrackableMarkerNeedUpdate = false ;
309+ internal static bool featureSpectatorNeedUpdate = false ;
310+ internal static bool featureBodyTrackingNeedUpdate = false ;
268311
269312 internal static bool hasFeatureNeedUpdate = false ;
270313
@@ -282,6 +325,8 @@ internal static bool checkFeaturePackages()
282325 featureTrackerModelImported = Directory . Exists ( WaveEssencePath + kTrackerModelPath ) ;
283326 featureScenePerceptionImported = Directory . Exists ( WaveEssencePath + kScenePerceptionPath ) ;
284327 featureTrackableMarkerImported = Directory . Exists ( WaveEssencePath + kTrackableMarkerPath ) ;
328+ featureSpectatorImported = Directory . Exists ( WaveEssencePath + kSpectatorPath ) ;
329+ featureBodyTrackingImported = Directory . Exists ( WaveEssencePath + kBodyTrackingPath ) ;
285330
286331 if ( pi == null )
287332 return false ;
@@ -310,9 +355,12 @@ internal static bool checkFeaturePackages()
310355 ! Directory . Exists ( WaveEssencePath + kScenePerceptionPath + "/" + FAKE_VERSION ) ;
311356 featureTrackableMarkerNeedUpdate = featureTrackableMarkerImported && ! Directory . Exists ( WaveEssencePath + kTrackableMarkerPath + "/" + pi . version ) &&
312357 ! Directory . Exists ( WaveEssencePath + kTrackableMarkerPath + "/" + FAKE_VERSION ) ;
358+ featureSpectatorNeedUpdate = featureSpectatorImported && ! Directory . Exists ( WaveEssencePath + kSpectatorPath + "/" + pi . version ) && ! Directory . Exists ( WaveEssencePath + kSpectatorPath + "/" + FAKE_VERSION ) ;
359+ featureBodyTrackingNeedUpdate = featureBodyTrackingImported && ! Directory . Exists ( WaveEssencePath + kBodyTrackingPath + "/" + pi . version ) &&
360+ ! Directory . Exists ( WaveEssencePath + kBodyTrackingPath + "/" + FAKE_VERSION ) ;
313361
314362 hasFeatureNeedUpdate = featureControllerModelNeedUpdate || featureInputModuleNeedUpdate || featureHandModelNeedUpdate || featureInteractionModeNeedUpdate || featureInteractionToolkitNeedUpdate ||
315- featureCameraTextureNeedUpdate || featureCompositorLayerNeedUpdate || featureBundlePreviewNeedUpdate || featureRenderDocNeedUpdate || featureScenePerceptionNeedUpdate || featureTrackableMarkerNeedUpdate ;
363+ featureCameraTextureNeedUpdate || featureCompositorLayerNeedUpdate || featureBundlePreviewNeedUpdate || featureRenderDocNeedUpdate || featureScenePerceptionNeedUpdate || featureTrackableMarkerNeedUpdate || featureSpectatorNeedUpdate || featureBodyTrackingNeedUpdate ;
316364
317365 return hasFeatureNeedUpdate ;
318366 }
@@ -344,6 +392,10 @@ public static void UpdateAllModules()
344392 UpdateModule ( WaveEssencePath + kScenePerceptionPath , kScenePerceptionPackage ) ;
345393 if ( featureTrackableMarkerNeedUpdate )
346394 UpdateModule ( WaveEssencePath + kTrackableMarkerPath , kTrackableMarkerPackage ) ;
395+ if ( featureSpectatorNeedUpdate )
396+ UpdateModule ( WaveEssencePath + kSpectatorPath , kSpectatorPackage ) ;
397+ if ( featureBodyTrackingNeedUpdate )
398+ UpdateModule ( WaveEssencePath + kBodyTrackingPath , kBodyTrackingPackage ) ;
347399 }
348400
349401 public override void OnGUI ( string searchContext )
@@ -361,6 +413,9 @@ public override void OnGUI(string searchContext)
361413 bool showTrackerModel = searchContext . Contains ( "Tracker" ) ;
362414 bool showScenePerception = searchContext . Contains ( "ScenePerception" ) ;
363415 bool showTrackableMarker = searchContext . Contains ( "TrackableMarker" ) ;
416+ bool showURPMaterials = searchContext . Contains ( "URPMaterials" ) ;
417+ bool showSpectator = searchContext . Contains ( "Spectator" ) ;
418+ bool showBodyTracking = searchContext . Contains ( "BodyTracking" ) ;
364419
365420 if ( showControllerModel ||
366421 showInputModule ||
@@ -373,7 +428,10 @@ public override void OnGUI(string searchContext)
373428 showInteractionToolkit ||
374429 showTrackerModel ||
375430 showScenePerception ||
376- showTrackableMarker )
431+ showTrackableMarker ||
432+ showURPMaterials ||
433+ showSpectator ||
434+ showBodyTracking )
377435 {
378436 hasKeyword = true ;
379437 }
@@ -392,7 +450,10 @@ public override void OnGUI(string searchContext)
392450 * 10. Tracker Model
393451 * 11. Scene Perception
394452 * 12. Trackable Marker
395- **/
453+ * 13. URP Materials
454+ * 14. Spectator
455+ * 15. Body Tracking
456+ **/
396457
397458 checkFeaturePackages ( ) ;
398459
@@ -754,7 +815,100 @@ public override void OnGUI(string searchContext)
754815 GUILayout . EndVertical ( ) ;
755816 }
756817
757- }
818+ if ( GraphicsSettings . renderPipelineAsset != null && ( showURPMaterials || ! hasKeyword ) )
819+ {
820+ GUILayout . BeginVertical ( EditorStyles . helpBox ) ;
821+ {
822+ GUILayout . Label ( "URP materials" , EditorStyles . boldLabel ) ;
823+ GUILayout . Label ( "These materials will overwrite the original contents."
824+ , new GUIStyle ( EditorStyles . label ) { wordWrap = true } ) ;
825+ GUILayout . Label ( "The feature will be imported at everywhere" , EditorStyles . label ) ;
826+ GUILayout . Space ( 5f ) ;
827+ if ( GUILayout . Button ( "Import Feature - URP Materials" , GUILayout . ExpandWidth ( false ) ) )
828+ ImportModule ( kURPMaterialsPackage , true ) ;
829+ GUILayout . Space ( 5f ) ;
830+ GUI . enabled = true ;
831+ }
832+ GUILayout . EndVertical ( ) ;
833+ }
834+
835+ if ( showSpectator || ! hasKeyword )
836+ {
837+ GUILayout . BeginVertical ( EditorStyles . helpBox ) ;
838+ {
839+ GUILayout . Label ( "Spectator" , EditorStyles . boldLabel ) ;
840+ GUILayout . Label ( "Note: This feature is currently in Beta.\n " +
841+ "Spectator is a feature that enables you to set the spectator camera to record the VR scene freely.\n "
842+ , new GUIStyle ( EditorStyles . label ) { wordWrap = true } ) ;
843+ GUILayout . Label ( "The feature will be imported at " + WaveEssencePath + kSpectatorPath , EditorStyles . label ) ;
844+ GUILayout . Space ( 5f ) ;
845+ GUI . enabled = ! featureSpectatorImported || featureSpectatorNeedUpdate ;
846+ if ( featureSpectatorNeedUpdate )
847+ {
848+ if ( GUILayout . Button ( "Update Feature - Spectator" , GUILayout . ExpandWidth ( false ) ) )
849+ {
850+ // To check wherever the Spectator setup correctly in the Wave setting
851+ WaveXRSettings waveXRSettings = WaveXRSettings . GetInstance ( ) ;
852+ if ( waveXRSettings != null )
853+ {
854+ if ( waveXRSettings . allowSpectatorCamera == false )
855+ {
856+ waveXRSettings . allowSpectatorCamera = true ;
857+ }
858+ UpdateModule ( WaveEssencePath + kSpectatorPath , kSpectatorPackage ) ;
859+ }
860+ else
861+ {
862+ Debug . LogError ( "Import Spectator feature fail because cannot get the WaveXR" +
863+ "setting, please try again later." ) ;
864+ }
865+ }
866+ }
867+ else
868+ {
869+ if ( GUILayout . Button ( "Import Feature - Spectator" , GUILayout . ExpandWidth ( false ) ) )
870+ ImportModule ( kSpectatorPackage ) ;
871+ }
872+ GUILayout . Space ( 5f ) ;
873+ GUI . enabled = true ;
874+ }
875+ GUILayout . EndVertical ( ) ;
876+ }
877+
878+ if ( showBodyTracking || ! hasKeyword )
879+ {
880+ GUILayout . BeginVertical ( EditorStyles . helpBox ) ;
881+ {
882+ GUILayout . Label ( "Body Tracking" , EditorStyles . boldLabel ) ;
883+ GUILayout . Label (
884+ "The Body Tracking feature depends on Humanoid VRM plugin." ,
885+ new GUIStyle ( EditorStyles . label ) { wordWrap = true } ) ;
886+ GUILayout . Label (
887+ "Note: Must using Unity Editor 2020.3.30f1 or newer version." ,
888+ new GUIStyle ( EditorStyles . label ) { wordWrap = true } ) ;
889+ GUILayout . Label ( "This feature will be imported at " + WaveEssencePath + "/BodyTracking.\n " +
890+ "Import the Tracker Model package first before using this feature." , EditorStyles . label ) ;
891+ GUILayout . Space ( 5f ) ;
892+ GUI . enabled = ( ! featureBodyTrackingImported || featureBodyTrackingNeedUpdate ) && featureTrackerModelImported ;
893+ if ( featureBodyTrackingNeedUpdate )
894+ {
895+ if ( GUILayout . Button ( "Update Feature - Body Tracking" , GUILayout . ExpandWidth ( false ) ) )
896+ UpdateModule ( WaveEssencePath + kBodyTrackingPath , kBodyTrackingPackage ) ;
897+ }
898+ else
899+ {
900+ if ( GUILayout . Button ( "Import Feature - Body Tracking" , GUILayout . ExpandWidth ( false ) ) )
901+ {
902+ ImportModule ( kVrm1Package ) ;
903+ ImportModule ( kBodyTrackingPackage ) ;
904+ }
905+ }
906+ GUILayout . Space ( 5f ) ;
907+ GUI . enabled = true ;
908+ }
909+ GUILayout . EndVertical ( ) ;
910+ }
911+ }
758912
759913 public static void DeleteFolder ( string path )
760914 {
@@ -852,11 +1006,11 @@ internal static void UpdateModule(string ModelPath, string packagePath)
8521006 AssetDatabase . ImportPackage ( target , false ) ;
8531007 }
8541008
855- internal static void ImportModule ( string packagePath )
1009+ internal static void ImportModule ( string packagePath , bool interactive = false )
8561010 {
8571011 string target = Path . Combine ( "Packages/" + Constants . EssencePackageName + "/UnityPackages~" , packagePath ) ;
8581012 Debug . Log ( "Import: " + target ) ;
859- AssetDatabase . ImportPackage ( target , false ) ;
1013+ AssetDatabase . ImportPackage ( target , interactive ) ;
8601014 }
8611015
8621016 [ SettingsProvider ]
@@ -1093,6 +1247,27 @@ static List<Item> GetItems()
10931247 GetCurrent = ( ) => { return EssenceSettingsProvider . featureTrackableMarkerNeedUpdate . ToString ( ) ; } ,
10941248 } ;
10951249
1250+ var URPMaterials = new Item ( "URP Materials" )
1251+ {
1252+ IsShow = ( ) => { return true ; } ,
1253+ IsReady = ( ) => { return true ; } ,
1254+ GetCurrent = ( ) => { return "Need Manual Update" ; } ,
1255+ } ;
1256+
1257+ var Spectator = new Item ( "Spectator" )
1258+ {
1259+ IsShow = ( ) => { return EssenceSettingsProvider . featureSpectatorImported ; } ,
1260+ IsReady = ( ) => { return ! EssenceSettingsProvider . featureSpectatorNeedUpdate ; } ,
1261+ GetCurrent = ( ) => { return EssenceSettingsProvider . featureSpectatorNeedUpdate . ToString ( ) ; } ,
1262+ } ;
1263+
1264+ var BodyTracking = new Item ( "Body Tracking" )
1265+ {
1266+ IsShow = ( ) => { return EssenceSettingsProvider . featureBodyTrackingImported ; } ,
1267+ IsReady = ( ) => { return ! EssenceSettingsProvider . featureBodyTrackingNeedUpdate ; } ,
1268+ GetCurrent = ( ) => { return EssenceSettingsProvider . featureBodyTrackingNeedUpdate . ToString ( ) ; } ,
1269+ } ;
1270+
10961271 return new List < Item > ( )
10971272 {
10981273 ControllerModel ,
@@ -1105,7 +1280,10 @@ static List<Item> GetItems()
11051280 RenderDoc ,
11061281 InteractionToolkit ,
11071282 ScenePerception ,
1108- TrackableMarker
1283+ TrackableMarker ,
1284+ URPMaterials ,
1285+ Spectator ,
1286+ BodyTracking ,
11091287 } ;
11101288 }
11111289
0 commit comments