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

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

新規登録して質問してみよう
ただいま回答率
85.50%
C#

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

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Unity

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

WebGL

WebGL(ウェブジーエル)は、ウェブブラウザで 3次元コンピュータグラフィックスを表示させるための標準仕様です。

Q&A

解決済

1回答

2802閲覧

UnityにおけるPS4コントローラー使用時のボタンの押しっぱなし誤動作

Izayoi-san

総合スコア12

C#

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

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Unity

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

WebGL

WebGL(ウェブジーエル)は、ウェブブラウザで 3次元コンピュータグラフィックスを表示させるための標準仕様です。

0グッド

0クリップ

投稿2020/06/08 08:21

編集2020/06/08 09:49

Unityで2Dアクションゲームを自作し、PS4コントローラーで操作することを目的としたプログラムを作成してします。

その際にWEBGL形式でUnityRoomにアップロードし、
他者から操作感に関する意見をもらおうとテストプレイを依頼したときに下記の問題が発生しました。

・ボタンを押しっぱなしの状態になってしまい、操作ができない。

PS4用コントローラーによる操作の下記の方法で実行しています。

・Project SettingによるPS4の各ボタンへの名前の付与(Fire1,Jumpなど)
・スクリプトによるボタン入力の取得(Input.GetAxis("Vertical")、Input.GetButtonDown("Fire2") )

プログラムの基本構成としては下記のように、ボタンを押すことで入力の確認と連射防止フラグを生成し、
ボタンを押した状態から戻すことで連射防止フラグを戻します。
private float GetySpeed()のような自作の関数と、private void Update()内に記述しております。
***************************
if (Input.GetButtonDown("Death"))//ボタンを押したことの確認
{
if (!isPityun)//押しっぱなしによる暴発を防止
{
anim.Play("mariko_death");//アニメーションの再生
}
isPityun = true;//連射防止フラグ生成
}
if (Input.GetButtonUp("Death"))//ボタンを押した状態から戻したことを確認
{
isPityun = false;//連射防止フラグを戻す
}
***************************

上記のプログラムでUnity上でのデバッグ、自身でUnityRoomにアップしたものをプレイした場合は問題ありませんが、
他者が別環境でプレイした場合は押しっぱなしでアニメーションが連続して再生されるとの報告を受けました。

自身の環境では再現がされないためデバッグすらできない状態に陥っています。
上記バグの解決手段・アプローチ手段をご指導ご鞭撻いただきたいです。

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

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

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

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

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

fiveHundred

2020/06/08 08:29

提示のコードはどこに記述されておりますか? (例えば、FixedUpdate()に記述した場合、正しく動作しません)
Izayoi-san

2020/06/08 08:35

ご指摘いただきありがとうございます。 private float GetySpeed()のような自作の関数と、private void Update()内に記述しております。 FixedUpdate()はスクリプト内には存在していますが、ボタンの入力の判定は行っておりません。 これらの状態においても動作の異常は発生するのでしょうか。
fiveHundred

2020/06/08 09:52

GetySpeed()の呼び出し元はUpdate()ですよね?
Izayoi-san

2020/06/08 10:00 編集

GetYSpeedとGetXSpeedを用いてFixedUpdated()内で下記のように呼び出しています。 float xSpeed = GetXSpeed(); float ySpeed = GetYSpeed(); rb.velocity = new Vector2(xSpeed, ySpeed)
guest

回答1

0

ベストアンサー

GetYSpeedとGetXSpeedを用いてFixedUpdated()内で下記のように呼び出しています。

であれば、そこが原因かと。
別の関数であっても、FixedUpdate()から呼び出されているのであれば、FixedUpdate()内に直接記述したのと同じように処理されます。

あと、Input.GetButtonDown()は押し始めた瞬間しかtrueにならないので、わざわざ「連射防止フラグ」を用意する必要はありません。
(逆に押されている間に毎フレーム実行したい場合は、Input.GetButton()を使います)

投稿2020/06/08 10:10

fiveHundred

総合スコア9774

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

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

Izayoi-san

2020/06/08 10:44

ご回答いただきありがとうございます。 今Aさんの環境ではバグが起きるが、Bさんの環境ではバグが起きないという状態になっております。 FixedUpdated()内に記述することで、こういった環境に依存したバグが起きるのでしょうか?
fiveHundred

2020/06/08 11:39

Unityの場合、処理間隔は不定なので、処理が遅れると間隔がその分空くことも考えられます。 なので、環境の処理速度によって結果が異なることもあり得ます。 FixedUpdate()は例外ですが、そもそもそこでInputクラスを使ってはいけないので、Inputクラスの処理間隔もそれに準じているのでしょう。
Izayoi-san

2020/06/08 11:48

詳細な回答ありがとうございます。 修正し、再度テストプレイを依頼してみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問