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

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

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

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

意見交換

クローズ

4回答

589閲覧

OnTriggerEnterを使わない実装

CsharpOnly

総合スコア6

Unity

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

0グッド

0クリップ

投稿2023/10/27 02:47

編集2023/10/27 02:48

0

0

実現したいこと

現在 VRゲームを作っており
「コントローラーを近づけてトリガー入力をするとオブジェクトごとにリアクションを起こす」
という部分を実装している最中です。

この機能を
「コントローラがコライダーに近づくたびにオブジェクトから特定のインタフェースを取得し保存。
トリガー入力すると、取得していたインタフェースの関数を発火する」
という手法で実装しています。

ただ、この実装方法だと「使わないインタフェース」だとしてもいちいち保存するため
「トリガー入力がきた瞬間にのみインタフェースを取得し発火する」方式にしたいです。

何か良い実装方法はないでしょうか。
よろしくお願いいたします。

条件

・OnTriggerEnter, OnTriggerStayは使わない
・UniRXなどの外部アセットは使用可
・できるだけパフォーマンスの良い方法でお願いいたします

該当のソースコード

C#

1using UnityEngine; 2 3public class TriggerAction : MonoBehaviour 4{ 5 //特定のインタフェース 6 private ITriggerAction _triggerAction; 7 8 private void OnTriggerEnter(Collider other) 9 { 10 //特定のインタフェースを持っているなら保存 11 if (other.gameObject.TryGetComponent<ITriggerAction>(out _triggerAction)) 12 { 13 Debug.Log("get"); 14 } 15 } 16 17 private void OnTriggerExit(Collider other) 18 { 19 if (other.gameObject.TryGetComponent<ITriggerAction>(out _triggerAction)) 20 { 21 if(_triggerAction != null) 22 { 23 //初期化 24 _triggerAction = null; 25 } 26 } 27 } 28 29 private void Start() 30 { 31 _triggerAction = null; 32 } 33 34 private void Update() 35 { 36 //トリガー入力の代わり 37 if (!Input.GetKeyDown(KeyCode.Space)) return; 38 39 if(_triggerAction != null) 40 { 41 _triggerAction.Fire(); 42 } 43 } 44} 45

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

Unity 2021.3.16f1
上記のプログラムは簡易版です。

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

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

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

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

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

回答4

#1

bboydaisuke

総合スコア5339

投稿2023/10/27 13:37

Physics.〇〇Castを使ってみては?

例)Physics.SphereCast

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

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

#2

isimasa

総合スコア308

投稿2023/10/28 17:16

コライダーを指定の時間だけ有効にする
コライダーを指定の時間だけ有効にするのはどうでしょうか?

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

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

#3

CsharpOnly

総合スコア6

投稿2023/10/31 01:21

#1 bboydaisuke様
反応が遅れて申し訳ありません。

立体的にRayを飛ばすことができるのですね。
これなら「トリガー入力」→「Ray照射」→「判定」といった流れにすれば実装できます。

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

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

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

#4

CsharpOnly

総合スコア6

投稿2023/10/31 01:31

#2 blanket様
反応が遅れて申し訳ありません。

コライダーのON/OFFを切り替える…。
単純ですが盲点でした。
「○○している間はコライダーを有効にする」という風にすれば
フラグ管理の手間が減りそうですね。

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

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

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

最新の回答から1ヶ月経過したため この意見交換はクローズされました

意見をやりとりしたい話題がある場合は質問してみましょう!

質問する

関連した質問