2021년 4학년 1학기 기업연계프로젝트2
컴퓨터소프트웨어공학과 <원광투어팀>
팀장 : 송유진
팀원 : 김나영, 이경희, 한유진
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
//
// Purpose: Uses the see thru renderer while attached to hand
//
//=============================================================================
using UnityEngine;using System.Collections;using System.Collections.Generic;
namespace Valve.VR.InteractionSystem{ //-------------------------------------------------------------------------
public class SeeThru : MonoBehaviour { public Material seeThruMaterial;
private GameObject seeThru; private Interactable interactable; private Renderer sourceRenderer; private Renderer destRenderer;
//-------------------------------------------------
void Awake() { interactable = GetComponentInParent<Interactable>();
//
// Create child game object for see thru renderer
//
seeThru = new GameObject( "_see_thru" ); seeThru.transform.parent = transform; seeThru.transform.localPosition = Vector3.zero; seeThru.transform.localRotation = Quaternion.identity; seeThru.transform.localScale = Vector3.one;
//
// Copy mesh filter
//
MeshFilter sourceMeshFilter = GetComponent<MeshFilter>(); if ( sourceMeshFilter != null ) { MeshFilter destMeshFilter = seeThru.AddComponent<MeshFilter>(); destMeshFilter.sharedMesh = sourceMeshFilter.sharedMesh; }
//
// Copy mesh renderer
//
MeshRenderer sourceMeshRenderer = GetComponent<MeshRenderer>(); if ( sourceMeshRenderer != null ) { sourceRenderer = sourceMeshRenderer; destRenderer = seeThru.AddComponent<MeshRenderer>(); }
//
// Copy skinned mesh renderer
//
SkinnedMeshRenderer sourceSkinnedMeshRenderer = GetComponent<SkinnedMeshRenderer>(); if ( sourceSkinnedMeshRenderer != null ) { SkinnedMeshRenderer destSkinnedMeshRenderer = seeThru.AddComponent<SkinnedMeshRenderer>();
sourceRenderer = sourceSkinnedMeshRenderer; destRenderer = destSkinnedMeshRenderer;
destSkinnedMeshRenderer.sharedMesh = sourceSkinnedMeshRenderer.sharedMesh; destSkinnedMeshRenderer.rootBone = sourceSkinnedMeshRenderer.rootBone; destSkinnedMeshRenderer.bones = sourceSkinnedMeshRenderer.bones; destSkinnedMeshRenderer.quality = sourceSkinnedMeshRenderer.quality; destSkinnedMeshRenderer.updateWhenOffscreen = sourceSkinnedMeshRenderer.updateWhenOffscreen; }
//
// Create see thru materials
//
if ( sourceRenderer != null && destRenderer != null ) { int materialCount = sourceRenderer.sharedMaterials.Length; Material[] destRendererMaterials = new Material[materialCount]; for ( int i = 0; i < materialCount; i++ ) { destRendererMaterials[i] = seeThruMaterial; } destRenderer.sharedMaterials = destRendererMaterials;
for ( int i = 0; i < destRenderer.materials.Length; i++ ) { destRenderer.materials[i].renderQueue = 2001; // Rendered after geometry
}
for ( int i = 0; i < sourceRenderer.materials.Length; i++ ) { if ( sourceRenderer.materials[i].renderQueue == 2000 ) { sourceRenderer.materials[i].renderQueue = 2002; } } }
seeThru.gameObject.SetActive( false ); }
//-------------------------------------------------
void OnEnable() { interactable.onAttachedToHand += AttachedToHand; interactable.onDetachedFromHand += DetachedFromHand; }
//-------------------------------------------------
void OnDisable() { interactable.onAttachedToHand -= AttachedToHand; interactable.onDetachedFromHand -= DetachedFromHand; }
//-------------------------------------------------
private void AttachedToHand( Hand hand ) { seeThru.SetActive( true ); }
//-------------------------------------------------
private void DetachedFromHand( Hand hand ) { seeThru.SetActive( false ); }
//-------------------------------------------------
void Update() { if ( seeThru.activeInHierarchy ) { int materialCount = Mathf.Min( sourceRenderer.materials.Length, destRenderer.materials.Length ); for ( int i = 0; i < materialCount; i++ ) { destRenderer.materials[i].mainTexture = sourceRenderer.materials[i].mainTexture; destRenderer.materials[i].color = destRenderer.materials[i].color * sourceRenderer.materials[i].color; } } } }}
|