Unityで再生した後にONにしていた機能をOFFにしたい

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 397

ehuronkon35

score 31

Unityで再生した後にONにしていた機能をOFFにしたい
イメージ説明

これはFOVE0のカメラのインターフェースです。

この中の「Fove Interface」の中の
「Client uses...」の
「Orientation」のチャックを再生した後に外したいです。

そのためにはどうすればいいか教えていただきたいです。

このスクリプトはこれです。

using Fove.Managed;
using System;
using System.Collections;
using System.Collections.Generic;

namespace UnityEngine
{

    public sealed class FoveInterface : FoveInterfaceBase
    {
        [Tooltip(
            "INTERMEDIATE: Use this prefab as a template for creating eye cameras. Useful if you want custom shaders, etc...")]
        [SerializeField] private Camera eyeCameraPrototype = null;

        [SerializeField] private bool useCameraPrefab = false;

        [Tooltip(
            "ADVANCED: Use this if you are wanting to take (almost) full control of the camera system... use at own risk")]
        [SerializeField] private Camera leftEyeOverride = null;

        [Tooltip(
            "ADVANCED: Use this if you are wanting to take (almost) full control of the camera system... use at own risk")]
        [SerializeField] private Camera rightEyeOverride = null;

        [Tooltip(
            "ADVANCED: Use this if you are wanting to take (almost) full control of the camera system... use at own risk")]
        [SerializeField] private bool useCameraOverride = false;

        [SerializeField] private int antialiasSampleCount = 1;
        [SerializeField] private bool overrideAntialiasing = false;

        [SerializeField] private bool enableRendering = true;

        private Camera _leftCamera, _rightCamera;
        private GameObject _leftCameraObject, _rightCameraObject;
        private bool _hasCameras = false;
        private FoveEyeCamera _leftFoveEye, _rightFoveEye;

        private static List<FoveInterface> _sAllLegacyInterfaces;

        private GameObject SetupDummyViewCameraObject(float ipd, EFVR_Eye whichEye)
        {
            GameObject temp = new GameObject();
            temp.name = string.Format("FOVE Eye ({0})", whichEye);
            temp.transform.parent = transform;
            temp.transform.localPosition = new Vector3(ipd, eyeHeight, eyeForward) * worldScale;
            temp.transform.localRotation = UnityEngine.Quaternion.identity;
            return temp;
        }


        private Camera SetupFoveViewCamera(float ipd, EFVR_Eye whichEye, out GameObject go, out FoveEyeCamera ec)
        {
            GameObject temp = null;
            Camera cam = null;
            Camera mirror = GetComponent<Camera>();

            if (useCameraOverride && useCameraPrefab)
            {
                Debug.LogError("You can not use a prefab and override cameras at the same time!");
            }

            if (useCameraOverride)
            {
                if (leftEyeOverride != null && rightEyeOverride != null)
                {
                    if (whichEye == EFVR_Eye.Left)
                    {
                        cam = leftEyeOverride;
                    }
                    else if (whichEye == EFVR_Eye.Right)
                    {
                        cam = rightEyeOverride;
                    }
                    else
                    {
                        Debug.LogError("Camera Override in unforseen state");
                    }
                    temp = cam.gameObject;
                    _nearClip = leftEyeOverride.nearClipPlane;
                    _farClip = leftEyeOverride.farClipPlane;

                    //sanity check
                    if (leftEyeOverride.nearClipPlane != rightEyeOverride.nearClipPlane ||
                        leftEyeOverride.farClipPlane != rightEyeOverride.farClipPlane)
                    {
                        Debug.LogWarning("Left and Right eye clip planes differ, using left plane for VR!");
                    }

                    //the mirror camera is the portal/preview view for unity etc - useful for use when there is no compositor.
                    if (mirror != null)
                    {
                        mirror.nearClipPlane = _nearClip;
                        mirror.farClipPlane = _farClip;
                    }
                }
                else
                {
                    Debug.LogError("Both Camera Overrides must be assiged if using override mode.");
                }
            }

            // Use a camera prefab if set to do so and one is available
            if (useCameraPrefab)
            {
                if (eyeCameraPrototype != null)
                {
                    if (eyeCameraPrototype.GetComponent<FoveInterface>() != null)
                    {
                        Debug.LogError("FoveInterface's eye camera prototype has another FoveInterface component attached. " + whichEye);
                        go = null;
                        ec = null;
                        return null;
                    }
                    cam = Instantiate(eyeCameraPrototype);
                    _nearClip = cam.nearClipPlane;
                    _farClip = cam.farClipPlane;

                    temp = cam.gameObject;

                    if (mirror != null)
                    {
                        mirror.nearClipPlane = _nearClip;
                        mirror.farClipPlane = _farClip;
                    }
                }
            }

            cam.fieldOfView = 95.0f;

            ec = temp.GetComponent<FoveEyeCamera>();
            if (ec == null)
            {
                ec = temp.AddComponent<FoveEyeCamera>();
            }

            ec.whichEye = whichEye;
            ec.suppressProjectionUpdates = suppressProjectionUpdates;
            ec.foveInterfaceBase = this;


            temp.name = string.Format("FOVE Eye ({0})", whichEye);
            temp.transform.parent = transform;

            UpdateCameraSettings(temp, ec, ipd);

            go = temp;
            return cam;
        }

        private void UpdateCameraSettings(GameObject cameraObject, FoveEyeCamera eyeCam, float iod)
        {
            cameraObject.transform.localPosition = new Vector3(iod, eyeHeight, eyeForward) * worldScale;
            cameraObject.transform.localRotation = Quaternion.identity;

            eyeCam.resolutionScale = oversamplingRatio;

            if (overrideAntialiasing)
            {
                eyeCam.antiAliasing = antialiasSampleCount;
            }
            else
            {
                if (QualitySettings.antiAliasing > 0)
                {
                    eyeCam.antiAliasing = QualitySettings.antiAliasing;
                }
                else
                {
                    eyeCam.antiAliasing = 1;
                }
            }
        }

        public override bool RefreshSetup() // called before any Start methods
        {
            if (!base.RefreshSetup())
                return false;

            // Initialize the extra-legacy static list of all legacy interfaces
            if (_sAllLegacyInterfaces == null)
            {
                _sAllLegacyInterfaces = new List<FoveInterface>();
            }
            if (!_sAllLegacyInterfaces.Contains(this))
            {
                _sAllLegacyInterfaces.Add(this);
            }

            if (!ConnectCompositor())
                return false;

            // Use the legacy screen blit shader, but make sure to use the right version to fix (or not)
            // a screen inversion bug that happened until version 5.6.
            {
                var unityVersion = Application.unityVersion;
                var versionBits = unityVersion.Split('.');

                if (versionBits.Length < 2)
                {
                    Debug.LogWarning("FoveInterface: Unrecognized Unity version: " + unityVersion);
                }

                var uMajor = int.Parse(versionBits[0]);
                var uMinor = int.Parse(versionBits[1]);

                string shaderString = "Fove/EyeShader";

                // Before Unity 5.6, there was a bug with antialiasing when blitting to the screen that would invert
                // the texture. If running on Unity below 5.6, swap the blit texture if AA detected.
                if (QualitySettings.antiAliasing != 0 && uMajor < 6 && uMinor < 6)
                {
                    shaderString = "Fove/EyeShaderInverted";
                }
                _screenBlitMaterial = new Material(Shader.Find(shaderString));
            }

            return true;
        }

        protected override void StartHelper()
        {
            base.StartHelper();

            if (enableRendering)
            {
                StartCoroutine(RenderCoroutine());
            }
        }
        public override bool ConnectCompositor()
        {
            if (!base.ConnectCompositor())
                return false;

            if (!_hasCameras)
            {
                // LEFT eye
                if (_leftCamera == null)
                {
                    _leftCamera = SetupFoveViewCamera(-usedIOD * 0.5f, EFVR_Eye.Left, out _leftCameraObject, out _leftFoveEye);
                }
                else
                {
                    UpdateCameraSettings(_leftCameraObject, _leftFoveEye, -usedIOD * 0.5f);
                }

                // RIGHT eye
                if (_rightCamera == null)
                {
                    _rightCamera = SetupFoveViewCamera(usedIOD * 0.5f, EFVR_Eye.Right, out _rightCameraObject, out _rightFoveEye);
                }
                else
                {
                    UpdateCameraSettings(_rightCameraObject, _rightFoveEye, usedIOD * 0.5f);
                }

                if (_leftCamera == null || _rightCamera == null)
                {
                    Debug.LogError("Error refreshing FoveInterface (Legacy) setup: One or more eye cameras weren't initialized.");
                    enabled = false;
                    return false;
                }

                // Disable eye cameras if we aren't meant to be rendering anything
                if (!enableRendering)
                {
                    _leftFoveEye.enabled = false;
                    _rightFoveEye.enabled = false;
                }

                // Disable the mirror camera
                Camera mirror = GetComponent<Camera>();
                if (mirror != null)
                {
                    mirror.cullingMask = 0;
                    mirror.stereoTargetEye = StereoTargetEyeMask.None;
                }

                if (eyeCameraPrototype != null)
                {
                    if (eyeCameraPrototype.gameObject.activeInHierarchy)
                    {
                        eyeCameraPrototype.gameObject.SetActive(false);
                    }
                }
                _hasCameras = true;
            }
            else
            {
                _leftCameraObject.SetActive(true);
                _rightCameraObject.SetActive(true);
            }

            _leftFoveEye.Compositor = _compositor;
            _rightFoveEye.Compositor = _compositor;

            return true;
        }

        public new static Quaternion GetHMDRotation_Immediate()
        {
            if (_sAllLegacyInterfaces.Count > 0)
            {
                return ((FoveInterfaceBase) _sAllLegacyInterfaces[0]).GetHMDRotation_Immediate();
            }
            return Quaternion.identity;
        }

    }
}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2018/10/25 12:21

    回答依頼いただいて申し訳ないのですがいずれのタグも私の方では持ち合わせがないので他の方に回していただければと

    キャンセル

回答 1

checkベストアンサー

0

        protected override void StartHelper()
        {
            base.StartHelper();

            if (enableRendering)
            {
                StartCoroutine(RenderCoroutine());
            }

            orientation = false;
        }

再生した直後で良いならば上記の様にorientation = false;を追記するだけで良いのではないでしょうか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/10/25 14:59

    回答ありがとうございます!!

    すいません、このコードはどこに書くとできますかね。。。
    Unityの理解が浅くてすいません。。

    キャンセル

  • 2018/10/25 15:08

    ありがとうございます!!
    それを追記するだけでできました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.22%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる