| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 | 
							- using UnityEngine;
 
- using System.Collections.Generic;
 
- //-----------------------------------------------------------------------------
 
- // Copyright 2015-2021 RenderHeads Ltd.  All rights reserved.
 
- //-----------------------------------------------------------------------------
 
- namespace RenderHeads.Media.AVProVideo.Demos
 
- {
 
- 	/// <summary>
 
- 	/// Rotate the transform (usually with Camera attached) to look around during playback of 360/180 videos.
 
- 	/// Unity will rotate the camera automatically if VR is enabled, in which case this script does nothing.
 
- 	/// Otherwise if there is a gyroscope it will be used, otherwise the mouse/touch can be used.
 
- 	/// </summary>
 
- 	public class LookAround360 : MonoBehaviour
 
- 	{
 
- 		[SerializeField] bool _lockPitch = false;
 
- 		[SerializeField] float _maxSpinSpeed = 40f;
 
- 		[SerializeField, Range(1f, 10f)] float _spinDamping = 5f;
 
- 		private float _spinX;
 
- 		private float _spinY;
 
- 		private static bool IsVrPresent()
 
- 		{
 
- 			bool result = false;
 
- 		#if UNITY_2019_3_OR_NEWER
 
- 			var xrDisplaySubsystems = new List<UnityEngine.XR.XRDisplaySubsystem>();
 
- 			SubsystemManager.GetInstances<UnityEngine.XR.XRDisplaySubsystem>(xrDisplaySubsystems);
 
- 			foreach (var xrDisplay in xrDisplaySubsystems)
 
- 			{
 
- 				if (xrDisplay.running)
 
- 				{
 
- 					result = true;
 
- 					break;
 
- 				}
 
- 			}
 
- 		#else
 
- 		#if UNITY_2018_1_OR_NEWER
 
- 			result = (UnityEngine.XR.XRDevice.isPresent);
 
- 		#else
 
- 			result = (UnityEngine.VR.VRDevice.isPresent);
 
- 		#endif
 
- 		#endif
 
- 			return result;
 
- 		}
 
- 		void Start()
 
- 		{
 
- 			if (IsVrPresent())
 
- 			{
 
- 				this.enabled = false;
 
- 				return;
 
- 			}
 
- 			if (SystemInfo.supportsGyroscope)
 
- 			{
 
- 				Input.gyro.enabled = true;
 
- 			}
 
- 		}
 
- 		void Update()
 
- 		{
 
- 			if (SystemInfo.supportsGyroscope && Input.gyro.enabled)
 
- 			{
 
- 				RotateFromGyro();
 
- 			}
 
- 			else
 
- 			{
 
- 				RotateFromMouseOrTouch();
 
- 			}
 
- 		}
 
- 		void OnDestroy()
 
- 		{
 
- 			if (SystemInfo.supportsGyroscope)
 
- 			{
 
- 				Input.gyro.enabled = false;
 
- 			}
 
- 		}
 
- 		void RotateFromGyro()
 
- 		{
 
- 			// Invert the z and w of the gyro attitude
 
- 			this.transform.localRotation = new Quaternion(Input.gyro.attitude.x, Input.gyro.attitude.y, -Input.gyro.attitude.z, -Input.gyro.attitude.w);
 
- 		}
 
- 		void RotateFromMouseOrTouch()
 
- 		{
 
- 			if (Input.GetMouseButton(0))
 
- 			{
 
- 				float h = _maxSpinSpeed * -Input.GetAxis("Mouse X") * Time.deltaTime;
 
- 				float v = 0f;
 
- 				if (!_lockPitch)
 
- 				{
 
- 					v = _maxSpinSpeed * Input.GetAxis("Mouse Y") * Time.deltaTime;
 
- 				}						
 
- 				h = Mathf.Clamp(h, -0.5f, 0.5f);
 
- 				v = Mathf.Clamp(v, -0.5f, 0.5f);
 
- 				_spinX += h;
 
- 				_spinY += v;
 
- 			}
 
- 			if (!Mathf.Approximately(_spinX, 0f) || !Mathf.Approximately(_spinY, 0f))
 
- 			{
 
- 				this.transform.Rotate(Vector3.up, _spinX);
 
- 				this.transform.Rotate(Vector3.right, _spinY);
 
- 				_spinX = Mathf.MoveTowards(_spinX, 0f, _spinDamping * Time.deltaTime);
 
- 				_spinY = Mathf.MoveTowards(_spinY, 0f, _spinDamping * Time.deltaTime);
 
- 			}
 
- 		}
 
- 	}
 
- }
 
 
  |