- LocalizationManager: 新增翻译表(SetFormatted/SetDuration/LocalizeOperateMsg) - LoginPanel: InputField placeholder本地化、字体颜色保持 - HistoryPanel: 用时数据本地化、placeholder本地化 - RecordDetailPanel: 操作详情消息本地化(LanguageChanged重建) - AppraiseWindowBase: 评价等级本地化、操作消息重建 - EditorAppraiser: 所有评估消息改用InjectOperateMsgLocalized - StudentOperateRecorder: 新增InjectOperateMsgLocalized方法 - LocalizationLanguageTestBar: 单例模式、ScreenSpaceOverlay筛选 - 字体切换时保留颜色和verticalOverflow
169 lines
4.6 KiB
Plaintext
169 lines
4.6 KiB
Plaintext
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
|
|
//
|
|
// Purpose: Spawns a render model for the controller from SteamVR 从steamVR中为控制器生成一个的渲染模型
|
|
//
|
|
//=============================================================================
|
|
|
|
using UnityEngine;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
|
|
namespace Valve.VR.InteractionSystem
|
|
{
|
|
//-------------------------------------------------------------------------
|
|
public class SpawnRenderModel : MonoBehaviour
|
|
{
|
|
public Material[] materials;
|
|
|
|
private SteamVR_RenderModel[] renderModels;
|
|
private Hand hand;
|
|
private List<MeshRenderer> renderers = new List<MeshRenderer>();
|
|
|
|
private static List<SpawnRenderModel> spawnRenderModels = new List<SpawnRenderModel>();
|
|
private static int lastFrameUpdated;
|
|
private static int spawnRenderModelUpdateIndex;
|
|
|
|
SteamVR_Events.Action renderModelLoadedAction;
|
|
|
|
|
|
//-------------------------------------------------在一开始被唤醒的时候
|
|
void Awake()
|
|
{
|
|
renderModels = new SteamVR_RenderModel[materials.Length];//通过材质的数量控制实例化渲染的模型
|
|
renderModelLoadedAction = SteamVR_Events.RenderModelLoadedAction( OnRenderModelLoaded );//注册事件?当渲染模型被加载的时候触发?
|
|
}
|
|
|
|
|
|
//-------------------------------------------------当激活的时候触发
|
|
void OnEnable()
|
|
{
|
|
ShowController();//显示控制器
|
|
|
|
renderModelLoadedAction.enabled = true;//设置渲染模型被加载事件已激活
|
|
|
|
spawnRenderModels.Add( this );//生成渲染模型参数为自己
|
|
}
|
|
|
|
|
|
//-------------------------------------------------摧毁时触发
|
|
void OnDisable()
|
|
{
|
|
HideController();//隐藏控制器
|
|
|
|
renderModelLoadedAction.enabled = false;
|
|
|
|
spawnRenderModels.Remove( this );//移除
|
|
}
|
|
|
|
|
|
//------------------------------------------------- 当附加到手上时触发吗?参数为附加的那只手
|
|
private void OnAttachedToHand( Hand hand )
|
|
{
|
|
this.hand = hand;
|
|
ShowController();//显示模型
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
private void OnDetachedFromHand( Hand hand )
|
|
{
|
|
this.hand = null;
|
|
HideController();
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
void Update()
|
|
{
|
|
// Only update one per frame
|
|
if ( lastFrameUpdated == Time.renderedFrameCount)//如果最后一帧更新的时间等于被渲染帧的次数
|
|
{
|
|
return;
|
|
}
|
|
lastFrameUpdated = Time.renderedFrameCount;
|
|
|
|
|
|
// SpawnRenderModel overflow 生成渲染模型溢出
|
|
if ( spawnRenderModelUpdateIndex >= spawnRenderModels.Count )
|
|
{
|
|
spawnRenderModelUpdateIndex = 0;
|
|
}
|
|
|
|
|
|
// Perform update
|
|
if ( spawnRenderModelUpdateIndex < spawnRenderModels.Count )
|
|
{
|
|
SteamVR_RenderModel renderModel = spawnRenderModels[spawnRenderModelUpdateIndex].renderModels[0];
|
|
if ( renderModel != null )
|
|
{
|
|
renderModel.UpdateComponents( OpenVR.RenderModels );
|
|
}
|
|
}
|
|
|
|
spawnRenderModelUpdateIndex++;
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
private void ShowController()
|
|
{
|
|
if ( hand == null || hand.controller == null )
|
|
{
|
|
return;
|
|
}
|
|
|
|
for ( int i = 0; i < renderModels.Length; i++ )
|
|
{
|
|
if ( renderModels[i] == null )
|
|
{
|
|
renderModels[i] = new GameObject( "SteamVR_RenderModel" ).AddComponent<SteamVR_RenderModel>();
|
|
renderModels[i].updateDynamically = false; // Update one per frame (see Update() method)
|
|
renderModels[i].transform.parent = transform;
|
|
Util.ResetTransform( renderModels[i].transform );
|
|
}
|
|
|
|
renderModels[i].gameObject.SetActive( true );
|
|
renderModels[i].SetDeviceIndex( (int)hand.controller.index );
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
private void HideController()
|
|
{
|
|
for ( int i = 0; i < renderModels.Length; i++ )
|
|
{
|
|
if ( renderModels[i] != null )
|
|
{
|
|
renderModels[i].gameObject.SetActive( false );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
private void OnRenderModelLoaded( SteamVR_RenderModel renderModel, bool success )
|
|
{
|
|
for ( int i = 0; i < renderModels.Length; i++ )
|
|
{
|
|
if ( renderModel == renderModels[i] )
|
|
{
|
|
if ( materials[i] != null )
|
|
{
|
|
renderers.Clear();
|
|
renderModels[i].GetComponentsInChildren<MeshRenderer>( renderers );
|
|
for ( int j = 0; j < renderers.Count; j++ )
|
|
{
|
|
Texture mainTexture = renderers[j].material.mainTexture;
|
|
renderers[j].sharedMaterial = materials[i];
|
|
renderers[j].material.mainTexture = mainTexture;
|
|
renderers[j].gameObject.layer = gameObject.layer;
|
|
renderers[j].tag = gameObject.tag;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|