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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Unity3D

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

Unity

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

Q&A

解決済

2回答

495閲覧

Unityでドアを開けたい!しかし応答性が良くない...

Bsaalovedelic

総合スコア13

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2018/04/11 05:58

編集2018/04/11 07:07

C

1 void OnTriggerStay(Collider other) 2 { 3 4 if (Lock == 0) 5 { 6 7 if (Input.GetButtonDown("e")) 8 { 9 10 if (!flag && i == 1) 11 { 12 animator.SetBool("Close", true); 13 flag = true; 14 audioSource.PlayOneShot(sound2); 15 i = 0; 16 } 17 18 else if (flag && i == 1) 19 { 20 animator.SetBool("Close", false); 21 flag = false; 22 audioSource.PlayOneShot(sound1); 23 i = 0; 24 } 25 } 26 27 else if (Input.GetButtonUp("e")) 28 { 29 i = 1; 30 } 31 32 33 } 34 35 36 else if (Lock == 1 && i == 1) 37 { 38 if (Input.GetButton("e") && a == true) 39 { 40 audioSource.PlayOneShot(sound3); 41 a = false; 42 } 43 44 if (Input.GetButtonUp("e")) 45 { 46 a = true; 47 } 48 } 49 50 51 } 52```3Dでゲームを作っている際に、ドアを実装する必要がでてきました。 53Box coliderで当たり判定をつくり、範囲内に入った場合にキーを押した(GetButtonDown使用)瞬間、 54音が再生され開閉アニメーションをするという大まかな仕組みで実装しました。 55しかしここで問題が出てきました。 56ドアの応答性が悪いのです。 57キーを押すと音は再生されるのですが4回連打くらいしてやっと開閉モーションに遷移します。 58連打で開く回数もまちまちで、 59さらにプロジェクトをビルドするとさらに応答性が悪くなって5~8回ほどの連打で開きます。 60何故でしょうか。

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

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

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

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

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

coco_bauer

2018/04/11 06:27

質問に作成中のゲームのコードを追加してください。コードを見ないで不具合の原因を推測するのは無理ですから。
Bsaalovedelic

2018/04/11 07:04

その通りです。コードを載せますので少々お待ちください。
guest

回答2

0

ベストアンサー

コードが無いので直感ですが、OnTriggerStay()とかOnCollisionStay()とかFixedUpdate()とかでGetButtonDown()を呼び出していないでしょうか?

もしそうであれば、Update()GetButtonDown()を呼び出すようにしてください。

投稿2018/04/11 06:46

編集2018/04/11 06:52
fiveHundred

総合スコア9796

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

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

Bsaalovedelic

2018/04/11 07:14 編集

おっしゃる通り、 OnTriggerStay内で呼び出していました。Update()で伸びだした場合、当たり判定の範囲内でキーを押した場合、という処理はどのように実装すればよいのでしょうか?
fiveHundred

2018/04/11 07:31

以下のいずれかを行えばよいです(他に細かい処理が必要かも)。 ・OnTriggerEnter()やOnTriggerExit()で当たり判定の中にいるかどうかを取得、それをメンバー変数に格納し、Update()でその変数を参照して使う ・上記とは逆に、Update()内で取得したボタンの状態をメンバー変数に格納しておき、OnTriggerStay()ではその変数を参照するようにする
Bsaalovedelic

2018/04/11 15:31

ありがとうございます!!!!!おかげでこの2年間、苦しめられた 応答性の悪さも解決しました!!!本当に助かりました!!! 感謝です!!
guest

0

どういう実装をしたのか具体的にコードがないと回答が難しいと思います。

まず問題を切り分けましょう。

接触、接近判定がおかしいのか?
開閉モーションに負荷がかかりすぎているのか…などなど
キー入力がおかしいのか?

各モジュールでどういう順番で動いているのか、ログなどを出力してみたり
それぞれ独立して動かしてどこが問題なのかを確認しましょう。

これは私の、”感”ですが、入力判定がおかしいのではないかと思います。
開閉の入力が連続で入ってしまって、内部で、開く・閉じる(以下繰り返し)みたいな感じになってしまっていないでしょうか?
一定期間コマンドを受け付けなくしたり、開閉モーションが終わるまで開閉に関する命令はストップするなどの処理は入っていますか?

投稿2018/04/11 06:28

CodeLab

総合スコア1939

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

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

Bsaalovedelic

2018/04/11 07:14

アニメーション内部で、Has Exit Timeの設定をしたので、一応開く前に閉じるアニメーションに途中で遷移することはないと思います。入力判定はキーを押したときのDownで取っています。色々検証してみます。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問