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

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

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

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

Unity

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

Q&A

2回答

3129閲覧

Unity5 Collision判定とイベントについて

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity

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

0グッド

1クリップ

投稿2015/04/23 13:09

現在、操作しているキャラクターがPlane(ドア)と当った時に違うsceneへと移動するようにしたいと思っています。(いる部屋から違う部屋への移動)

PlaneとキャラクターオブジェクトにはWorld Particle Collider、そしてRigid Bodyをつけています。
また最初はPlaneのほうにつけていたスクリプトですが、こちらのスクリプトを操作しているキャラクターオブジェクトにつっくけてみました。

lang

1using UnityEngine; 2using System.Collections; 3 4public class enterRoom : MonoBehaviour { 5 6 void OnCollisionEnter(Collision col) 7 { 8 if (col.gameObject.CompareTag("Door1")) { 9 Debug.Log ("testtest"); 10 Application.LoadLevel("room1"); 11 12 } 13 } 14}

ですが、ゲームプレビューでキャラクターをドアまで行き、当っているのですが何もイベントが置きません。部屋から部屋へと移動できないままです。

このCollision系に関して、もしなにか間違いがありましたら教えていただけませんでしょうか?

どうぞよろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

何もイベントが起きないというのは、
「testtest」というログも出力されないのでしょうか?
パッと見ではあってそうですが。。。

①Planeにはちゃんと"Door1"というTagが設定されているか
②"room1"というシーンをBuild Settingsで登録したか
③Rigid Bodyがアクティブ(有効)になってるか
このあたりは確認されましたか?

あと、if分の直前にもlogを出して、
OnCollisionEnter()に入っているかどうかも確認してみてください。

解決案を提示できずすみません。。

投稿2015/04/23 14:02

runun

総合スコア305

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

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

退会済みユーザー

退会済みユーザー

2015/04/23 15:12

アドバイスありがとうございます! そうですか、スクリプトに問題はなさそう・・・ リストアップしてくださったのを確認したところ、①は大丈夫でしたが②番目がなかったので、build settingsに追加しました。3番目も一応無効にはなっていないと思われる為大丈夫だと思います(add componentのところで、ちゃんとrigidbodyの所にチェックが入っています)。 if文の中にエラーログを書いてみましたが、プレビューで確認したところコンソールにエラーメッセージが表示されませんでした。なのでスクリプト自体が反映されていないみたいです。 コントロールしているキャラクターはphoton cloudを使い、prefabです。一応スクリプトでも character.GetComponent<Rigidbody>().detectCollisions = true; も追加しておきました。 気づいたところ、Planeに当る際にキャラクターが若干通り抜けているので、Colliderがアクティブになっていない・・・と思われます。もしかしたらそこが鍵かもしれません。 ちゃんとcolliderが有効になるように設定を確認してみます。
runun

2015/04/24 02:13

②が登録されていなかったらシーンとして呼び出せないですね。 でも問題はそれ以前にスクリプト自体が反映されていないと。。。 スクリプトが有効になってるか、 Start()とかUpdate()とかでログに出して確認してみてもいいかもしれませんね。 それでログが出力されていれば、 「スクリプトは有効だけど、やっぱりCollisionが検知されていない」 という事がわかります。 まずは原因を探るためにログとかで処理の流れを把握するのは大切です。 何が出来てて、何が出来ていないかがわかりますよ^^
guest

0

・Planeに当る際にキャラクターが若干通り抜けている
・OnCollisionEnterが呼び出されていない可能性がある
この二つの問題から考えるとWorld Particle Colliderが原因かなーと思います。
MeshCollider等の別Colliderを使うと解決するかもしれないです。
曖昧な回答ですみません。

投稿2015/04/24 06:36

TasogarePanda

総合スコア7

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問