using System; using UnityEngine; [RequireComponent(typeof(RectTransform))] [RequireComponent(typeof(Canvas))] [RequireComponent(typeof(CanvasGroup))] public abstract class VRWfChangeCanvas : MonoBehaviour { public virtual bool isVisible { get { return this.canvasGroup.alpha != 0f; } set { this.canvasGroup.alpha = (float)((!value) ? 0 : 1); } } protected RenderMode renderMode { get { return this.parentCanvas.renderMode; } set { this.parentCanvas.renderMode = value; if (this.parentCanvas.renderMode == RenderMode.ScreenSpaceOverlay) { this.parentCanvas.pixelPerfect = true; } } } protected virtual void Awake() { this.rectTransform = base.GetComponent(); this.parentCanvas = base.GetComponent(); this.canvasGroup = base.GetComponent(); } public virtual void ChangeDeviceMode(GameMain.VRDeviceType devideType) { if (devideType == GameMain.VRDeviceType.NON || devideType == GameMain.VRDeviceType.RIFT || devideType == GameMain.VRDeviceType.FOVE) { this.isVisible = true; this.ChangeDrawMode(devideType != GameMain.VRDeviceType.NON); } else { this.isVisible = false; } } public abstract void ChangeDrawMode(bool worldMode); protected virtual void FixedUpdate() { if (!this.updateWorldPosition || this.parentCanvas.renderMode != RenderMode.WorldSpace || GameMain.Instance.OvrMgr == null) { return; } OvrCamera ovrCamera = GameMain.Instance.OvrMgr.OvrCamera; this.rectTransform.position = ovrCamera.m_goCenterEye.transform.position + ovrCamera.m_goCenterEye.transform.forward * this.distanceFromCamera; this.rectTransform.rotation = Quaternion.LookRotation(this.rectTransform.position - ovrCamera.m_goCenterEye.transform.position); } [SerializeField] [Tooltip("ワールド座標での位置を更新し続けるかどうか")] public bool updateWorldPosition = true; [SerializeField] [Tooltip("ワールド座標モードでのカメラからの距離")] public float distanceFromCamera = 0.2f; protected RectTransform rectTransform; protected CanvasGroup canvasGroup; protected Canvas parentCanvas; }