8 using System.Collections;
9 using System.Collections.Generic;
11 namespace Valve.VR.InteractionSystem
16 public Material[] materials;
20 private List<MeshRenderer> renderers =
new List<MeshRenderer>();
22 private static List<SpawnRenderModel> spawnRenderModels =
new List<SpawnRenderModel>();
23 private static int lastFrameUpdated;
24 private static int spawnRenderModelUpdateIndex;
33 renderModelLoadedAction = SteamVR_Events.RenderModelLoadedAction( OnRenderModelLoaded );
42 renderModelLoadedAction.enabled =
true;
44 spawnRenderModels.Add( this );
53 renderModelLoadedAction.enabled =
false;
55 spawnRenderModels.Remove( this );
60 private void OnAttachedToHand(
Hand hand )
68 private void OnDetachedFromHand(
Hand hand )
79 if ( lastFrameUpdated == Time.renderedFrameCount )
83 lastFrameUpdated = Time.renderedFrameCount;
87 if ( spawnRenderModelUpdateIndex >= spawnRenderModels.Count )
89 spawnRenderModelUpdateIndex = 0;
94 if ( spawnRenderModelUpdateIndex < spawnRenderModels.Count )
96 SteamVR_RenderModel renderModel = spawnRenderModels[spawnRenderModelUpdateIndex].renderModels[0];
97 if ( renderModel != null )
99 renderModel.UpdateComponents( OpenVR.RenderModels );
103 spawnRenderModelUpdateIndex++;
108 private void ShowController()
110 if ( hand == null || hand.controller == null )
115 for (
int i = 0; i < renderModels.Length; i++ )
117 if ( renderModels[i] == null )
119 renderModels[i] =
new GameObject(
"SteamVR_RenderModel" ).AddComponent<
SteamVR_RenderModel>();
120 renderModels[i].updateDynamically =
false;
121 renderModels[i].transform.parent = transform;
122 Util.ResetTransform( renderModels[i].transform );
125 renderModels[i].gameObject.SetActive( true );
126 renderModels[i].SetDeviceIndex( (int)hand.controller.index );
132 private void HideController()
134 for (
int i = 0; i < renderModels.Length; i++ )
136 if ( renderModels[i] != null )
138 renderModels[i].gameObject.SetActive( false );
147 for (
int i = 0; i < renderModels.Length; i++ )
149 if ( renderModel == renderModels[i] )
151 if ( materials[i] != null )
154 renderModels[i].GetComponentsInChildren<MeshRenderer>( renderers );
155 for (
int j = 0; j < renderers.Count; j++ )
157 Texture mainTexture = renderers[j].material.mainTexture;
158 renderers[j].sharedMaterial = materials[i];
159 renderers[j].material.mainTexture = mainTexture;
160 renderers[j].gameObject.layer = gameObject.layer;
161 renderers[j].tag = gameObject.tag;