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: An area that the player can teleport to
//
//=============================================================================
using UnityEngine;#if UNITY_EDITOR
using UnityEditor;#endif
namespace Valve.VR.InteractionSystem{ //-------------------------------------------------------------------------
public class TeleportArea : TeleportMarkerBase { //Public properties
public Bounds meshBounds { get; private set; }
//Private data
private MeshRenderer areaMesh; private int tintColorId = 0; private Color visibleTintColor = Color.clear; private Color highlightedTintColor = Color.clear; private Color lockedTintColor = Color.clear; private bool highlighted = false;
//-------------------------------------------------
public void Awake() { areaMesh = GetComponent<MeshRenderer>();
#if UNITY_URP
tintColorId = Shader.PropertyToID( "_BaseColor" );#else
tintColorId = Shader.PropertyToID("_TintColor");#endif
CalculateBounds(); }
//-------------------------------------------------
public void Start() { visibleTintColor = Teleport.instance.areaVisibleMaterial.GetColor( tintColorId ); highlightedTintColor = Teleport.instance.areaHighlightedMaterial.GetColor( tintColorId ); lockedTintColor = Teleport.instance.areaLockedMaterial.GetColor( tintColorId ); }
//-------------------------------------------------
public override bool ShouldActivate( Vector3 playerPosition ) { return true; }
//-------------------------------------------------
public override bool ShouldMovePlayer() { return true; }
//-------------------------------------------------
public override void Highlight( bool highlight ) { if ( !locked ) { highlighted = highlight;
if ( highlight ) { areaMesh.material = Teleport.instance.areaHighlightedMaterial; } else { areaMesh.material = Teleport.instance.areaVisibleMaterial; } } }
//-------------------------------------------------
public override void SetAlpha( float tintAlpha, float alphaPercent ) { Color tintedColor = GetTintColor(); tintedColor.a *= alphaPercent; areaMesh.material.SetColor( tintColorId, tintedColor ); }
//-------------------------------------------------
public override void UpdateVisuals() { if ( locked ) { areaMesh.material = Teleport.instance.areaLockedMaterial; } else { areaMesh.material = Teleport.instance.areaVisibleMaterial; } }
//-------------------------------------------------
public void UpdateVisualsInEditor() { if (Teleport.instance == null) return;
areaMesh = GetComponent<MeshRenderer>();
if ( locked ) { areaMesh.sharedMaterial = Teleport.instance.areaLockedMaterial; } else { areaMesh.sharedMaterial = Teleport.instance.areaVisibleMaterial; } }
//-------------------------------------------------
private bool CalculateBounds() { MeshFilter meshFilter = GetComponent<MeshFilter>(); if ( meshFilter == null ) { return false; }
Mesh mesh = meshFilter.sharedMesh; if ( mesh == null ) { return false; }
meshBounds = mesh.bounds; return true; }
//-------------------------------------------------
private Color GetTintColor() { if ( locked ) { return lockedTintColor; } else { if ( highlighted ) { return highlightedTintColor; } else { return visibleTintColor; } } } }
#if UNITY_EDITOR
//-------------------------------------------------------------------------
[CustomEditor( typeof( TeleportArea ) )] public class TeleportAreaEditor : Editor { //-------------------------------------------------
void OnEnable() { if ( Selection.activeTransform != null ) { TeleportArea teleportArea = Selection.activeTransform.GetComponent<TeleportArea>(); if ( teleportArea != null ) { teleportArea.UpdateVisualsInEditor(); } } }
//-------------------------------------------------
public override void OnInspectorGUI() { DrawDefaultInspector();
if ( Selection.activeTransform != null ) { TeleportArea teleportArea = Selection.activeTransform.GetComponent<TeleportArea>(); if ( GUI.changed && teleportArea != null ) { teleportArea.UpdateVisualsInEditor(); } } } }#endif
}
|