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

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

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

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

Q&A

解決済

3回答

20065閲覧

Unity-範囲内に特定のオブジェクトが存在するかどうかを判定する

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

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

1グッド

1クリップ

投稿2017/10/02 00:04

格子状の迷路を探索する3Dゲームを製作しています。

・実装したいこと
前後左右に1マスずつ移動するプレイヤーが行く手を壁に阻まれたとき、その方向へ移動できなくなるようにしたいです。
壁はアイテムを使用すれば破壊できる仕様です。

・試したこと
プレイヤーの周囲の空間と壁オブジェクトにTrigger状態のBoxColliderを設定し、これらが接触しているならOnTriggerStay()で対応する方向へ移動できないようにし、接触が終わったならOnTriggerExit()移動できるように戻す。

しかし壁が破壊できる仕様のため、コライダがDestroy()される時はOnTriggerExit()が呼び出されないことから、このやり方は適さないようです。

そこで質問なのですが、
上記以外の方法で「ある範囲内に特定のオブジェクトが存在するかどうか」を判定する方法はありますか?

asdfghjk👍を押しています

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

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

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

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

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

guest

回答3

0

回答済みで恐縮ですが、
こういう方法もあります。

自信から10m以内の円を判定する、サーチ用collider用意するという方法。
isTrigerにチェックし、layer等でフィルターを欠けておけば。
普通の当たり判定と同じ容量で障害物を検知できる方法もあります。

僕はこの方法が楽なので良く使ってしまいます。汗

投稿2017/10/05 02:01

chibikurosan

総合スコア52

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

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

0

ベストアンサー

https://docs.unity3d.com/jp/540/ScriptReference/Physics.Raycast.html
こちらを使って、確認したい方向にRay(見えない光線)を飛ばして、その方向に障害物があるかどうかを確認するのが割とよくある方法かなと思います。

C#

1bool MoveCheck(Vector3 dircetion) 2{ 3 //自身から特定の方向へ10mの間に障害物があるかどうか 4 if (Physics.Raycast(transform.position, direction, 10)) 5 { 6 return true; 7 } 8 else 9 { 10 retrun false; 11 } 12} 13

投稿2017/10/02 02:14

ShiroKuroShiro

総合スコア134

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

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

退会済みユーザー

退会済みユーザー

2017/10/02 21:35

回答ありがとうございます。 RayCastはUpdateで呼び出すのだと重いかなーと思っていたのですが、考えてみれば移動入力の時に一度呼び出せばすむ話ですね。 おかげで思い通りの実装ができました、ありがとうございました。
ShiroKuroShiro

2017/10/03 05:39

Raycastは、レイヤー設定やDistance等を適切に設定すればそこまで重くないので、やりすぎなければ使って言って全然大丈夫です。 上記ではめんどくさいので省略しましたが、レイヤーは最低限設定するようにしときましょう(計算量が全然違う)
guest

0

アナログな移動ではなく、マス目という整数で表せる範囲のみで移動可能なのであれば、3D上にオブジェクトを置くのではなく、「移動できるかどうか」という情報を二次元情報として保持し、3Dシーン上でそれを参照して移動可能かの判断をしてみるのはどうでしょうか?

無理に3Dベースで考えるよりも管理がしやすくなると思います。

投稿2017/10/02 01:24

edo_m18

総合スコア2283

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

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

退会済みユーザー

退会済みユーザー

2017/10/02 21:37

回答ありがとうございます。 配列でも実装できそうだとは思ったのですが、ほかのゲームシステムを鑑みて上記のRayCastの方法に決めました。 回答ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問