22using System ;
33using UnityEngine . Networking ;
44using System . Runtime . CompilerServices ;
5+ using UnityEngine . Rendering ;
6+ using UnityEngine . Rendering . Universal ;
7+ using Unity . VisualScripting ;
8+ using System . Collections . Generic ;
59
6- namespace from2001
10+ namespace VisualScriptingNodes
711{
812 public class Utils : MonoBehaviour
913 {
10- static int addTest ( int a , int b )
14+ /// <summary>
15+ /// Return true if current OS is VisionOS.
16+ /// </summary>
17+ /// <returns></returns>
18+ public static bool IsVisionOS ( )
1119 {
12- return a + b ;
20+ //When operatingSystem is "visionOS", return true
21+ if ( SystemInfo . operatingSystem . Contains ( "visionOS" ) ) return true ;
22+
23+ //When VolumeCamera exists in scene, return true
24+ foreach ( GameObject obj in GetAllObjectsInScene ( ) )
25+ {
26+ Component [ ] components = obj . GetComponents < Component > ( ) ;
27+ foreach ( Component component in components )
28+ {
29+ if ( component . GetType ( ) . Name == "VolumeCamera" ) return true ;
30+ }
31+ }
32+
33+ return false ;
34+ }
35+
36+ /// <summary>
37+ /// Return all GameObjects in scene.
38+ /// </summary>
39+ /// <returns></returns>
40+ public static List < GameObject > GetAllObjectsInScene ( )
41+ {
42+ List < GameObject > objectsInScene = new List < GameObject > ( ) ;
43+ foreach ( GameObject obj in UnityEngine . SceneManagement . SceneManager . GetActiveScene ( ) . GetRootGameObjects ( ) )
44+ {
45+ objectsInScene . Add ( obj ) ;
46+ GetChildObjects ( obj , ref objectsInScene ) ;
47+ }
48+ return objectsInScene ;
49+
50+ static void GetChildObjects ( GameObject obj , ref List < GameObject > objectsInScene )
51+ {
52+ foreach ( Transform child in obj . transform )
53+ {
54+ objectsInScene . Add ( child . gameObject ) ;
55+ GetChildObjects ( child . gameObject , ref objectsInScene ) ;
56+ }
57+ }
58+ }
59+
60+
61+
62+ /// <summary>
63+ /// Change all shaders of GameObject to new one.
64+ /// This method is intended to be used for VRM and glTF models on VisionOS.
65+ /// </summary>
66+ /// <param name="targetObject"></param>
67+ /// <param name="newShader">"Universal Render Pipeline/Unlit", "Universal Render Pipeline/Lit", etc.</param>
68+ /// <param name="texturePropertyName_old">Set "_MainTex" for Built-in shader</param>
69+ /// <param name="texturePropertyName_new">Set "_BaseMap" for URP Shader</param>
70+ public static void ChangeShadersWithTexture ( GameObject targetObject , string newShader = "Universal Render Pipeline/Unlit" , string texturePropertyName_old = "_MainTex" , string texturePropertyName_new = "_BaseMap" )
71+ {
72+ SkinnedMeshRenderer [ ] skinedMeshrenderers = targetObject . GetComponentsInChildren < SkinnedMeshRenderer > ( ) ;
73+ foreach ( SkinnedMeshRenderer renderer in skinedMeshrenderers ) foreach ( Material mat in renderer . materials ) ChangeShader ( mat , newShader ) ;
74+
75+ MeshRenderer [ ] meshrenderers = targetObject . GetComponentsInChildren < MeshRenderer > ( ) ;
76+ foreach ( MeshRenderer renderer in meshrenderers ) foreach ( Material mat in renderer . materials ) ChangeShader ( mat , newShader ) ;
77+
78+ void ChangeShader ( Material mat , string shaderName )
79+ {
80+ if ( mat . HasProperty ( texturePropertyName_old ) )
81+ {
82+ Texture texture = mat . GetTexture ( texturePropertyName_old ) ;
83+ mat . shader = Shader . Find ( shaderName ) ;
84+ mat . SetTexture ( texturePropertyName_new , texture ) ;
85+ }
86+ else
87+ {
88+ mat . shader = Shader . Find ( newShader ) ;
89+ }
90+ }
1391 }
1492 }
1593}
0 commit comments