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: Single location that the player can teleport to
//
//=============================================================================
using UnityEngine;using UnityEngine.UI;#if UNITY_EDITOR
using UnityEditor;#endif
namespace Valve.VR.InteractionSystem{ //-------------------------------------------------------------------------
public class TeleportPoint : TeleportMarkerBase { public enum TeleportPointType { MoveToLocation, SwitchToNewScene };
//Public variables
public TeleportPointType teleportType = TeleportPointType.MoveToLocation; public string title; public string switchToScene; public Color titleVisibleColor; public Color titleHighlightedColor; public Color titleLockedColor; public bool playerSpawnPoint = false;
//Private data
private bool gotReleventComponents = false; private MeshRenderer markerMesh; private MeshRenderer switchSceneIcon; private MeshRenderer moveLocationIcon; private MeshRenderer lockedIcon; private MeshRenderer pointIcon; private Transform lookAtJointTransform; private new Animation animation; private Text titleText; private Player player; private Vector3 lookAtPosition = Vector3.zero; private int tintColorID = 0; private Color tintColor = Color.clear; private Color titleColor = Color.clear; private float fullTitleAlpha = 0.0f;
//Constants
private const string switchSceneAnimation = "switch_scenes_idle"; private const string moveLocationAnimation = "move_location_idle"; private const string lockedAnimation = "locked_idle";
//-------------------------------------------------
public override bool showReticle { get { return false; } }
//-------------------------------------------------
void Awake() { GetRelevantComponents();
animation = GetComponent<Animation>();
#if UNITY_URP
tintColorID = Shader.PropertyToID( "_BaseColor" );#else
tintColorID = Shader.PropertyToID("_TintColor");#endif
moveLocationIcon.gameObject.SetActive( false ); switchSceneIcon.gameObject.SetActive( false ); lockedIcon.gameObject.SetActive( false );
UpdateVisuals(); }
//-------------------------------------------------
void Start() { player = Player.instance; }
//-------------------------------------------------
void Update() { if ( Application.isPlaying ) { lookAtPosition.x = player.hmdTransform.position.x; lookAtPosition.y = lookAtJointTransform.position.y; lookAtPosition.z = player.hmdTransform.position.z;
lookAtJointTransform.LookAt( lookAtPosition ); } }
//-------------------------------------------------
public override bool ShouldActivate( Vector3 playerPosition ) { return ( Vector3.Distance( transform.position, playerPosition ) > 1.0f ); }
//-------------------------------------------------
public override bool ShouldMovePlayer() { return true; }
//-------------------------------------------------
public override void Highlight( bool highlight ) { if ( !locked ) { if ( highlight ) { SetMeshMaterials( Teleport.instance.pointHighlightedMaterial, titleHighlightedColor ); } else { SetMeshMaterials( Teleport.instance.pointVisibleMaterial, titleVisibleColor ); } }
if ( highlight ) { pointIcon.gameObject.SetActive( true ); animation.Play(); } else { pointIcon.gameObject.SetActive( false ); animation.Stop(); } }
//-------------------------------------------------
public override void UpdateVisuals() { if ( !gotReleventComponents ) { return; }
if ( locked ) { SetMeshMaterials( Teleport.instance.pointLockedMaterial, titleLockedColor );
pointIcon = lockedIcon;
animation.clip = animation.GetClip( lockedAnimation ); } else { SetMeshMaterials( Teleport.instance.pointVisibleMaterial, titleVisibleColor );
switch ( teleportType ) { case TeleportPointType.MoveToLocation: { pointIcon = moveLocationIcon;
animation.clip = animation.GetClip( moveLocationAnimation ); } break; case TeleportPointType.SwitchToNewScene: { pointIcon = switchSceneIcon;
animation.clip = animation.GetClip( switchSceneAnimation ); } break; } }
titleText.text = title; }
//-------------------------------------------------
public override void SetAlpha( float tintAlpha, float alphaPercent ) { tintColor = markerMesh.material.GetColor( tintColorID ); tintColor.a = tintAlpha;
markerMesh.material.SetColor( tintColorID, tintColor ); switchSceneIcon.material.SetColor( tintColorID, tintColor ); moveLocationIcon.material.SetColor( tintColorID, tintColor ); lockedIcon.material.SetColor( tintColorID, tintColor );
titleColor.a = fullTitleAlpha * alphaPercent; titleText.color = titleColor; }
//-------------------------------------------------
public void SetMeshMaterials( Material material, Color textColor ) { markerMesh.material = material; switchSceneIcon.material = material; moveLocationIcon.material = material; lockedIcon.material = material;
titleColor = textColor; fullTitleAlpha = textColor.a; titleText.color = titleColor; }
//-------------------------------------------------
public void TeleportToScene() { if ( !string.IsNullOrEmpty( switchToScene ) ) { Debug.Log("<b>[SteamVR Interaction]</b> TeleportPoint: Hook up your level loading logic to switch to new scene: " + switchToScene, this); } else { Debug.LogError("<b>[SteamVR Interaction]</b> TeleportPoint: Invalid scene name to switch to: " + switchToScene, this); } }
//-------------------------------------------------
public void GetRelevantComponents() { markerMesh = transform.Find( "teleport_marker_mesh" ).GetComponent<MeshRenderer>(); switchSceneIcon = transform.Find( "teleport_marker_lookat_joint/teleport_marker_icons/switch_scenes_icon" ).GetComponent<MeshRenderer>(); moveLocationIcon = transform.Find( "teleport_marker_lookat_joint/teleport_marker_icons/move_location_icon" ).GetComponent<MeshRenderer>(); lockedIcon = transform.Find( "teleport_marker_lookat_joint/teleport_marker_icons/locked_icon" ).GetComponent<MeshRenderer>(); lookAtJointTransform = transform.Find( "teleport_marker_lookat_joint" );
titleText = transform.Find( "teleport_marker_lookat_joint/teleport_marker_canvas/teleport_marker_canvas_text" ).GetComponent<Text>();
gotReleventComponents = true; }
//-------------------------------------------------
public void ReleaseRelevantComponents() { markerMesh = null; switchSceneIcon = null; moveLocationIcon = null; lockedIcon = null; lookAtJointTransform = null; titleText = null; }
//-------------------------------------------------
public void UpdateVisualsInEditor() { if ( Application.isPlaying ) { return; }
GetRelevantComponents();
if ( locked ) { lockedIcon.gameObject.SetActive( true ); moveLocationIcon.gameObject.SetActive( false ); switchSceneIcon.gameObject.SetActive( false );
markerMesh.sharedMaterial = Teleport.instance.pointLockedMaterial; lockedIcon.sharedMaterial = Teleport.instance.pointLockedMaterial;
titleText.color = titleLockedColor; } else { lockedIcon.gameObject.SetActive( false );
markerMesh.sharedMaterial = Teleport.instance.pointVisibleMaterial; switchSceneIcon.sharedMaterial = Teleport.instance.pointVisibleMaterial; moveLocationIcon.sharedMaterial = Teleport.instance.pointVisibleMaterial;
titleText.color = titleVisibleColor;
switch ( teleportType ) { case TeleportPointType.MoveToLocation: { moveLocationIcon.gameObject.SetActive( true ); switchSceneIcon.gameObject.SetActive( false ); } break; case TeleportPointType.SwitchToNewScene: { moveLocationIcon.gameObject.SetActive( false ); switchSceneIcon.gameObject.SetActive( true ); } break; } }
titleText.text = title;
ReleaseRelevantComponents(); } }
#if UNITY_EDITOR
//-------------------------------------------------------------------------
[CustomEditor( typeof( TeleportPoint ) )] public class TeleportPointEditor : Editor { //-------------------------------------------------
void OnEnable() { if ( Selection.activeTransform ) { TeleportPoint teleportPoint = Selection.activeTransform.GetComponent<TeleportPoint>(); if (teleportPoint != null) teleportPoint.UpdateVisualsInEditor(); } }
//-------------------------------------------------
public override void OnInspectorGUI() { DrawDefaultInspector();
if ( Selection.activeTransform ) { TeleportPoint teleportPoint = Selection.activeTransform.GetComponent<TeleportPoint>(); if ( GUI.changed ) { teleportPoint.UpdateVisualsInEditor(); } } } }#endif
}
|