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

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

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

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

Q&A

解決済

2回答

2401閲覧

着地判定をisTriggerでやっているが判定されない

aro

総合スコア21

Unity

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

0グッド

0クリップ

投稿2019/04/10 16:58

編集2019/04/11 08:08

画像の解説
イメージ説明

飛べる
イメージ説明
飛べない
イメージ説明

Unity初心者です。1本目のゲームを作り終えるところなのですが、着地判定が上手くいかず、ジャンプがどうしても出来ない時が発生します。

現在、プレイヤーのBoxCollider+CapsuleClliderの底面に、もう一つBoxColliderを床にめり込むように設定して、下はisTriggerで着地判定させています。
地面のコライダーはPolygonColliderで作っています。
しかし、平面をただ走っているだけでもジャンプ出来なくなる時があります。条件はわかりません。
PolygonColliderは線の上だけ判定が出るとかではないですよね?めり込んで判定出来なくなるのか?とも思ったのですが…

Rayを飛ばすという方法でやるしかないのでしょうか?
ご教授お願いしたいです。

コードは以下のようになってます。

c#

1void Update() 2{ 3   if (Input.GetMouseButtonDown(0) && isGround == true) 4   { 5     //上方向の力をかける 6     this.rigid2D.velocity = new Vector2(0, this.jumpVelocity); 7   } 8} 9 10void OnTriggerEnter2D(Collider2D other) 11{ 12 13 //地面に接触した時 14 if (other.gameObject.tag == "groundTag") 15 { 16 isGround = true; 17 } 18} 19 20void OnTriggerExit2D(Collider2D other) 21{ 22 if (other.gameObject.tag == "groundTag") 23 { 24 isGround = false; 25 } 26}

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

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

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

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

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

guest

回答2

0

自己解決

stayで解決しました!

投稿2019/04/11 13:28

aro

総合スコア21

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

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

0

Rayを飛ばすのが一番最適解とは思いますが、ステージの形によってはAABBやOBBでもいいかも知れません。

しかし、平面をただ走っているだけでもジャンプ出来なくなる時があります。条件はわかりません。

それ多分地面に埋まってますね。地面と同じ位置に座標を補正してあげる必要があります。
ただvelocityを0にしただけではその辺の問題は対処できませんので...
それか下記が違うような気がします。

if (other.gameObject.tag == "groundTag"){ }

もう少し情報があれば的確にアドバイスできますが、今のままではこの程度が限界です...

投稿2019/04/11 01:26

stdio

総合スコア3307

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

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

aro

2019/04/11 07:07 編集

ご回答いただきありがとうございます!! 画像を追加しました。飛べる時と飛べない時のコライダーの状態ですが、見た目的には全く変わらないんですよね… >地面に埋まっています というのは、コライダーが全部埋まってしまってるということでしょうか? コライダーは画像のようになっているのですが、画像の状態でも判定されなくなってしまうのですか? >ステージの形 ステージの形はただの平面と、曲面の山形と、曲面の山形の途中に隙間が開いてるステージがループしています。 >下記が違うような気がします。 これはどう変えたら良いでしょうか? 一応基本は着地判定されてはいるんですよね… velocityは以下のようにしてる時でも、発生します。 rigid2D.AddForce(Vector2.up * jumpVelocity * 50); ちなみに移動は transform.Translate(this.speed, 0, 0); rigid2D.AddForce(Vector2.right * this.speed * 3, ForceMode2D.Force); のどっちで試しても同じ事が発生します。 他にはどんな情報を乗せれば回答しやすいでしょうか? 何でもお答えします!
stdio

2019/04/11 07:50 編集

なるほど、100%発生するのではないとお見受け致します。 もしかしたらステージのポリゴンにわずかに隙間があるか、どこかの面の法線が逆になっている可能性があります。 後載せて頂いている画像に関してですが、私の眼には円の中にカプセルと四角形それに手裏剣がピラミッド状に並んでいるようにしか見えないのですが、もう少しゲームらしい画像を載せて下さるとアドバイスしやすいのですか...
aro

2019/04/11 08:03

すみません、2番目の画像の手裏剣はパーティクルなので無視してください…(パーティクルは非表示にできなかったので) コライダーの部分だけ表示しています。 ポリゴンに関してですが、判定はコライダーで行われるので、ポリゴンは関係ないのではないのでしょうか?
aro

2019/04/11 08:10

キャラクターの画像がお載せ出来ないので、解説画像をお載せしました。
stdio

2019/04/11 10:40

2Dでしたか... Rayはあくまで3D用なので、それならRayは使えませんね。 その衝突判定では隅の方が危険です。それにカプセルの衝突判定は重い。 いっそ、キャラの下側の位置と地面の上の位置を判定するだけでもよさそうな感じはします。
aro

2019/04/11 11:04 編集

ご回答ありがとうございます。 Rayは3D用なのですね。 上のBoxColliderとCapsuleColliderはisTriggerにしていません。地面に乗っけるために存在してます。 なので、着地判定は一番下のBoxColliderと地面のコライダーだけで判定しています。 >その衝突判定では隅の方が危険 とはどういう意味でしょうか?
aro

2019/04/11 11:18

調べてみて、着地判定がされないタイミングがわかりました。 2枚目の地面に突入する際に、 OnTriggerExit2Dが判定し、その後OnTriggerEnter2Dが判定されていないようです! 調査不足で大変申し訳ないです… このような場合はどうしたら良いでしょうか? 質問し直した方がよいでしょうかね…
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問