🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
VIVE

VIVEは、VR向けヘッドマウントディスプレイです。センサーによって部屋自体をVR空間にするルームスケールが大きな特徴。プレイヤーはその空間を自由に歩き回ることが可能なため、高い没入感を体験できます。

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2716閲覧

UnityのSteamVR Plugin内のスクリプトにNullReferenceExceptionエラーがでてビルド時に正常に動作しない

ra7ra7_430

総合スコア5

VIVE

VIVEは、VR向けヘッドマウントディスプレイです。センサーによって部屋自体をVR空間にするルームスケールが大きな特徴。プレイヤーはその空間を自由に歩き回ることが可能なため、高い没入感を体験できます。

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

ビルド

ソースコードを単体で実行可能なソフトウェアへ変換する過程をビルド(build)と呼びます

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2019/09/25 07:46

編集2019/09/25 16:52

前提・実現したいこと

Unityで3Dの人型モデルの指動きを、HTC VIVEのコントローラーの
トラックパッドで入力できるようにしたいです。

SteamVR plugin v2以降です。

Unityのビュー(再生)では問題なく動作が確認できるのですが、
ビルドすると指のみ動きません。

指の動作にあたるプログラム周辺でエラーが起こっているで、それが原因だろうというのはわかるのですが、
どのように対処すればよいかわかりません。

発生している問題・エラーメッセージ

NullReferenceException:Object reference not set to an instance of an object
Valve.VR.SteamVR_Actions.get_default_Trackpad()(at Asset/SteamVR_Imput/SteamVR_Imput_Actions.cs:132)

該当のソースコード

エラーメッセージが指しているのが132行目なのでかなり長くなります。
1つめのソースコードの一番下がエラー箇所です。

指の動作のプログラムも関わっていそうなので記載します。
(SteamVR_Actions.default_TrackPad ← これが怪しいのかしらと素人ながら思っています。
ただ、これをどうすればいいのかわかりません…)

namespace Valve.VR { using System; using UnityEngine; public partial class SteamVR_Actions { private static SteamVR_Action_Boolean p_default_InteractUI; private static SteamVR_Action_Boolean p_default_Teleport; private static SteamVR_Action_Boolean p_default_GrabPinch; private static SteamVR_Action_Boolean p_default_GrabGrip; private static SteamVR_Action_Pose p_default_Pose; private static SteamVR_Action_Skeleton p_default_SkeletonLeftHand; private static SteamVR_Action_Skeleton p_default_SkeletonRightHand; private static SteamVR_Action_Single p_default_Squeeze; private static SteamVR_Action_Boolean p_default_HeadsetOnHead; private static SteamVR_Action_Vector2 p_default_TrackPad; private static SteamVR_Action_Vibration p_default_Haptic; private static SteamVR_Action_Vector2 p_platformer_Move; private static SteamVR_Action_Boolean p_platformer_Jump; private static SteamVR_Action_Vector2 p_buggy_Steering; private static SteamVR_Action_Single p_buggy_Throttle; private static SteamVR_Action_Boolean p_buggy_Brake; private static SteamVR_Action_Boolean p_buggy_Reset; private static SteamVR_Action_Pose p_mixedreality_ExternalCamera; public static SteamVR_Action_Boolean default_InteractUI { get { return SteamVR_Actions.p_default_InteractUI.GetCopy<SteamVR_Action_Boolean>(); } } public static SteamVR_Action_Boolean default_Teleport { get { return SteamVR_Actions.p_default_Teleport.GetCopy<SteamVR_Action_Boolean>(); } } public static SteamVR_Action_Boolean default_GrabPinch { get { return SteamVR_Actions.p_default_GrabPinch.GetCopy<SteamVR_Action_Boolean>(); } } public static SteamVR_Action_Boolean default_GrabGrip { get { return SteamVR_Actions.p_default_GrabGrip.GetCopy<SteamVR_Action_Boolean>(); } } public static SteamVR_Action_Pose default_Pose { get { return SteamVR_Actions.p_default_Pose.GetCopy<SteamVR_Action_Pose>(); } } public static SteamVR_Action_Skeleton default_SkeletonLeftHand { get { return SteamVR_Actions.p_default_SkeletonLeftHand.GetCopy<SteamVR_Action_Skeleton>(); } } public static SteamVR_Action_Skeleton default_SkeletonRightHand { get { return SteamVR_Actions.p_default_SkeletonRightHand.GetCopy<SteamVR_Action_Skeleton>(); } } public static SteamVR_Action_Single default_Squeeze { get { return SteamVR_Actions.p_default_Squeeze.GetCopy<SteamVR_Action_Single>(); } } public static SteamVR_Action_Boolean default_HeadsetOnHead { get { return SteamVR_Actions.p_default_HeadsetOnHead.GetCopy<SteamVR_Action_Boolean>(); } } public static SteamVR_Action_Vector2 default_TrackPad { get {          //↓ここがエラー箇所    return SteamVR_Actions.p_default_TrackPad.GetCopy<SteamVR_Action_Vector2>(); } }

指を動かすために作っているプログラム(一部)はこちらです。

using System.Collections; using System.Collections.Generic; using VrmArPlayer; using UnityEngine; using Valve.VR; public class TrackpadControl : MonoBehaviour { private SteamVR_Action_Vector2 TrackPad = SteamVR_Actions.default_TrackPad; private Vector2 pos, pos2; // Start is called before the first frame update void Start() { var fingerController = gameObject.AddComponent<FingerController>(); }    // Update is called once per frame void Update() { var fingerController = gameObject.AddComponent<FingerController>(); pos = TrackPad.GetLastAxis(SteamVR_Input_Sources.RightHand); pos2 = TrackPad.GetLastAxis(SteamVR_Input_Sources.LeftHand); Debug.Log(pos.x + " " + pos.y); //以下に指の関節の指定が続く

試したこと

エラーメッセージに記載があったプログラムのnullを探してみたのですが見つからず…
プログラム初心者のため見落としや理解不足があるかもしれません。

コントローラーのバインド設定なども確認しました。

補足情報(FW/ツールのバージョンなど)

unity 2019 2.2f
SteamVR 1.7.15
SteamVR Plugin 2.3.2

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

SteamVR_Actions.p_default_TrackPad

たんに、p_default_TrackPad を生成してないだけでは。
これ、nullになってませんか?

投稿2019/09/25 08:56

y_waiwai

総合スコア88038

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ra7ra7_430

2019/09/26 01:13

ご回答ありがとうございます。 どこがnullになっていたのかもわからなかったのですが SteamVR Pluginのプログラム内でのエラーで、 どうしてp_default_TrackPadが生成されなくなったのかもわからず… ”TrackpadControl” をアタッチしてからでたエラーなので、それが原因なのだろうとは思っているのですが、どう対処したらよいかわからない状態で… プログラミング自体初めてで、質問の内容が分かりにくいところもあるかと思いますが 引き続きご回答いただければ幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問