質問をすることでしか得られない、回答やアドバイスがある。

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

ただいまの
回答率

90.34%

  • C#

    7695questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    4409questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

Oculus goでunityを動かすと、oculusの画面が切れる

受付中

回答 0

投稿

  • 評価
  • クリップ 1
  • VIEW 349

l_h_l_h

score 7

oculus goの画面が、勝手に消えるのですが、処理落ちでしょうか?

実施したこととして、
unityちゃん3Dモデルデータをインポートして、Locomotionのシーンに、oculus用のカメラを設置しました
また、コントローラーからレーザーポインタが出るようにしました
その後、カメラにスクリプトを追加して、タッチパッドで前後の移動と左右の回転を行えるようにしました

oculus対応はこちらを参考に、同じことを実施しました
http://rikoubou.hatenablog.com/entry/2018/06/04/193607
レーザーポインタを出現させるところまでやりました

その後、移動を行うため
https://qiita.com/ry-kgy/items/a319c812bfade3d01aa0
こちらと同じことを行いました

あと、動作テスト用に、トリガーボタンを押すと1f後退するだけの単純なスクリプトもありますが、その機能はプレイ中に使用していません

症状として、移動を繰り返していると、時々画面が消えます
電源ボタンを押してスリープモードになった時と同じよう、「フォン」と音が鳴って消えます
電源ボタンを押すと「VRをスタート」の画面に戻ります

これは単純に処理落ちでしょうか?
回避方法などはないのでしょうか?

コピペになりますが、ソースコードは以下の通りです

レーザーポインタを出すコード

using System.Collections.Generic;
using UnityEngine;

/**
 * レーザーポインターを出すクラス
 */
public class LaserPointer : MonoBehaviour {

    [SerializeField]
    private Transform _RightHandAnchor; // 右手

    [SerializeField]
    private Transform _LeftHandAnchor;  // 左手

    [SerializeField]
    private Transform _CenterEyeAnchor; // 目の中心

    [SerializeField]
    private float _MaxDistance = 100.0f; // 距離

    [SerializeField]
    private LineRenderer _LaserPointerRenderer; // LineRenderer

    // コントローラー
    private Transform Pointer {
        get {
            // 現在アクティブなコントローラーを取得
            var controller = OVRInput.GetActiveController();
            if (controller == OVRInput.Controller.RTrackedRemote) {
                return _RightHandAnchor;
            } else if (controller == OVRInput.Controller.LTrackedRemote) {
                return _LeftHandAnchor;
            }
            // どちらも取れなければ目の間からビームが出る
            return _CenterEyeAnchor;
        }
    }

    void Update () {
        var pointer = Pointer; // コントローラーを取得
        // コントローラーがない or LineRendererがなければ何もしない
        if (pointer == null || _LaserPointerRenderer == null) {
            return;
        }
        // コントローラー位置からRayを飛ばす
        Ray pointerRay = new Ray(pointer.position, pointer.forward);

        // レーザーの起点
        _LaserPointerRenderer.SetPosition(0, pointerRay.origin);

        RaycastHit hitInfo;
        if (Physics.Raycast(pointerRay, out hitInfo, _MaxDistance)) {
            // Rayがヒットしたらそこまで
            _LaserPointerRenderer.SetPosition(1, hitInfo.point);

            /* ---以下追加した部分--- */
            // ヒットしたオブジェクトを取得
            GameObject obj = hitInfo.collider.gameObject;
            // ヒットしたオブジェクトのScaleを取得
            Vector3 scale = obj.transform.localScale;

            if (OVRInput.GetDown(OVRInput.Button.PrimaryIndexTrigger)) {
                // トリガーボタンを押した時
                Vector3 maxScale = new Vector3(5f,5f,5f);
                // スケールの各値が5より小さい場合は0.1大きくする
                if (scale.sqrMagnitude < maxScale.sqrMagnitude) {
                    obj.transform.localScale = new Vector3 (scale.x + 0.1f, scale.y + 0.1f, scale.z + 0.1f);
                }
            } else if (OVRInput.GetDown(OVRInput.Button.PrimaryTouchpad)) {
                // タッチパッドボタンを押した時
                Vector3 minScale = new Vector3(0.5f,0.5f,0.5f);
                // スケールの各値が0.5より大きい場合は0.1小さくする
                if (scale.sqrMagnitude > minScale.sqrMagnitude) {
                    obj.transform.localScale = new Vector3 (scale.x - 0.1f, scale.y - 0.1f, scale.z - 0.1f);
                }
            }
            /* ---追加した部分ここまで--- */
        } else {
            // Rayがヒットしなかったら向いている方向にMaxDistance伸ばす
            _LaserPointerRenderer.SetPosition(1, pointerRay.origin + pointerRay.direction * _MaxDistance);
        }
    }
}
コード


移動するコード

using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour {

    Rigidbody m_Rigidbody;

    // Use this for initialization
    void Start () {
        // 自分のRigidbodyを取ってくる
        m_Rigidbody = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void FixedUpdate () {
        float x = 0.0f;
        float z = 0.0f;
        Vector2 touchPadPt = OVRInput.Get(OVRInput.Axis2D.PrimaryTouchpad);

        if (touchPadPt.x > 0.5 && -0.5 < touchPadPt.y && touchPadPt.y < 0.5) //右方向
        {
            transform.Rotate(new Vector3(0.0f, 0.5f, 0.0f)); // 十字キーで首を左右に回す
            x += 0.5f;
        }
        if (touchPadPt.x < -0.5 && -0.5 < touchPadPt.y && touchPadPt.y < 0.5) //左方向
        {
            transform.Rotate(new Vector3(0.0f, -0.5f, 0.0f));         // 十字キーで首を左右に回す
            x -= 0.5f;
        }
        if (touchPadPt.y > 0.5 && -0.5 < touchPadPt.x && touchPadPt.x < 0.5) //上方向
        {
            z += 5.0f;
        }
        if (touchPadPt.y < -0.5 && -0.5 < touchPadPt.x && touchPadPt.x < 0.5) //下方向
        {
            z -= 5.0f;
        }

        m_Rigidbody.velocity = z * transform.forward + x * transform.right;
    }

}
コード

どなたか分かる方いらっしゃいましたらご助力お願いします

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

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

まだ回答がついていません

同じタグがついた質問を見る

  • C#

    7695questions

    C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

  • Unity

    4409questions

    Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。