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

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

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

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

886閲覧

プレイヤー同士の当たり判定について

hikaaaaaaaa

総合スコア19

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2020/04/15 11:39

編集2020/04/15 16:30

unity3Dで鬼ごっこのゲームを作成しています。

プレイヤー同士がぶつかった際の当たり判定を試みるとトリガーをtrueにした方のプレイヤーが落下してしまいます。
様々な記事を読んで見ましたが自力での解決ができなかったため質問させていただきました。

Standerd Aseetesを用いてプレイヤーを複製し、スクリプトを書き換えることで鬼を作成しoniを作成しました。Playerはそのまま逃げる側で使用をしております。

その際に鬼に捕まった際にはプレイヤーが所定の場所に移動するというスクリプトを書きました。
RigidBodyがアタッチされているプレイヤーのコライダーのトリガーをtrueにしておくと落下するので、Playerの子要素(Playerとobject名を統一させました。)にもコライダーを加え、トリガーをtrueにし、タグをPlayerとすることで実装を行いました。

その場合移動はされるのですが、やはりキャラクターが落下してしまう問題が発生しました。

プレーヤー側にスクリプトを組みiskinematicをtureにすることで落下を防ぐことも考えましたが
鬼がPlayerに追いついて、ボタンを押した際にPlayerを所定の場所に送るように書き変える予定であることと、
あるタイミングでもう一度復活をするようなゲームにしたいと考えているので、その方法では実装できませんでした。

この落下の解決方法につきましてアドバイスをいただけますと幸いです。
よろしくお願いいたします。

Oni側のスクリプト

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6GameObject Player; 7 8public class OniController : MonoBehaviour 9{ 10 11 GameObject Player; 12 13 void Start() 14 { 15 this.Player = GameObject.Find("Player"); 16 17 18 19 } 20 21 22 public void OnTriggerEnter(Collider hit) 23 { 24 if (hit.CompareTag("Player")) 25 { 26 27 28 int z = Random.Range(63, 64); 29 30 this.Player.transform.position = new Vector3(4, 0, z); 31 32 33 } 34 } 35 36 37 38} 39

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6GameObject Player; 7 8public class OniController : MonoBehaviour 9{ 10 11 GameObject Player; 12 13 void Start() 14 { 15 this.Player = GameObject.Find("Player"); 16 17 18 19 } 20 21 22 public void OnCollisionEnter(Collider hit) 23 { 24 if (hit.CompareTag("Player")) 25 { 26 27 28 int z = Random.Range(63, 64); 29 30 this.Player.transform.position = new Vector3(4, 0, z); 31 32 33 } 34 } 35 36 37 38}

訂正したスクリプト

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6GameObject Player; 7 8public class OniController : MonoBehaviour 9{ 10 11 GameObject Player; 12 13 void Start() 14 { 15 this.Player = GameObject.Find("Player"); 16 17 18 19 } 20 21 22 public void OnCollisionEnter(Collision hit) 23 { 24 if (hit.gameObject.tag == "Player")) 25 { 26 27 28 int z = Random.Range(63, 64); 29 30 this.Player.transform.position = new Vector3(4, 0, z); 31 32 33 } 34 } 35 36 37 38}

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

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

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

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

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

guest

回答1

0

ベストアンサー

プレイヤーのコライダーをtrueにしておくと落下する

これはコライダーではなくRigidbodyのUse Gravityをtrueにしているのではないでしょうか?
コライダーは単体で落下させることはありません。

Rigidbodyがあればそれを削除してください。

投稿2020/04/15 12:53

Yukirr4_

総合スコア728

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

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

hikaaaaaaaa

2020/04/15 13:04 編集

>username_様 ご回答ありがとうございます。 説明が不足しており申し訳ございません。 Standerd Aseetes内のThirdPersonCharacterのPrefabを使っており、Rigidbodyがついております。 RigidbodyのUse Gravityをfalseにしてあげた場合もやはり移動をした後にステージから落下をしてしまいます.. また、Rigidbodyの削除を試みましたが、キャラクターの移動の際に用いるThirdPersonCharacterをアタッチするとRigidbodyの削除ができないのが現状となっております。。
Yukirr4_

2020/04/15 13:09

ThirdPersonCharacterについてはよくわかりませんが、そのアセットのコードに落下用の処理がかかれていたりはしないんでしょうか。 >> プレイヤー同士がぶつかった際の当たり判定を試みるとトリガーをtrueにした方のプレイヤーが落下 当たった時に落下するのですか?それともtrueにしたら無条件で落ちるのでしょうか。
hikaaaaaaaa

2020/04/15 13:14

そのスクリプトの処理を確認してみます。ありがとうございます。 キャラクターが、鬼と当たった際にコードの所定の場所に移動後に落下をします。 >当たった時に落下するのですか?それともtrueにしたら無条件で落ちるのでしょうか。
Yukirr4_

2020/04/15 13:22 編集

そのスクリプトをこちらに張り付けることは可能でしょうか? ちなみに、 int z = Random.Range(63, 64); は z = 63にしかなりません。 64を含めるには (63, 65)にします。
hikaaaaaaaa

2020/04/15 13:18

ジャンプの機能があり、それが影響しているのかと思います。 しかし、できればジャンプの機能は残しておきたいと考えております。。
hikaaaaaaaa

2020/04/15 13:19

すぐに貼ります。ありがとうございます。
hikaaaaaaaa

2020/04/15 13:25

追加いたしました。 お手数をおかけしますがよろしくお願いいたします。
Yukirr4_

2020/04/15 15:01

今まで気が付かなかったのですが、なぜIsTriggerをONにしようとしているのでしょうか。 鬼とプレイヤーとの衝突を検出したいならisTriggerはわざわざONにする必要はないと思うのですが
hikaaaaaaaa

2020/04/15 15:11

知識不足で申し訳ないのですが Playerと鬼がぶつかった判定をするためにはどちらかのコライダーをトリガーにしないと当たりの判定はつかないのではないのですか、、?
Yukirr4_

2020/04/15 15:18 編集

そんなことはないです。 OnTriggerEnterというのは本来「ある範囲の領域」と「物体」の衝突の検出に向いています。例えば「プレイヤーが毒の範囲に入っている」場合などに使えます。 OnTriggerEnterの他にOnCollisonEnterというのがあります。 これは「物体」と「物体」の衝突判定に使えます。 OnTriggerEnterは両方ともRigidbodyがついていて、isTriggerがfalaeのときに使います。 2つ目のコードでやはり重力が計算されていますね。 isTriggerがonなので床をすり抜けちゃいます
hikaaaaaaaa

2020/04/15 15:21

ご丁寧にありがとうございます。 そうしましたらどちらにもisTriggerはOFFにしてOnCollisonEnterでの実装を行えば解決できますでしょうか。。?
Yukirr4_

2020/04/15 15:23

はい。 isTriggerはoff、Rigidbodyをアタッチします。 OnCollisionとOnTriggerの違いについてはこちら https://www.sejuku.net/blog/83742 わからないことがあれば返信ください。
hikaaaaaaaa

2020/04/15 15:31

本当にありがとうございます。 実装してみます。
hikaaaaaaaa

2020/04/15 16:04

ちなみに、質問内に加えたスクリプトで反応しますでしょうか。。 debug.logでも確認をしたのですが出力ができませんでした、、
Yukirr4_

2020/04/15 16:07

鬼とプレイヤーの状態を教えて下さい。 ColliderのisTriggerはoff、 Rigidbodyは存在していますか?
hikaaaaaaaa

2020/04/15 16:14

お手数をおかけして申し訳ございません。 双方ともRigidbodyは存在しており、ColliderのisTriggerはoffとなっております。。
hikaaaaaaaa

2020/04/15 16:28

そちらもfalseになっております。。 OnCollisionEnterの際はCollisionを引数で使う必要があったのでそこのエラーだと思い質問欄に追加したコードにしたのですがそれでも反応がしないのが現状です。。
Yukirr4_

2020/04/16 02:02

返信遅れてすみません。 インスペクターがどういう状態か画像で送っていただけますか? Windowsなら「切り取り & スケッチ」もしくは「Snipping Tool」が無料搭載されているので そちらを利用して質問を更新できますか?
hikaaaaaaaa

2020/04/16 02:51

ご丁寧にありがとうございます。 お恥ずかしいお話ですが、OnCollisionEnterのスペルミスが問題でした。。 無事解決してキャラクターの転送ができるようになりました。 この度はご丁寧に何回も解決策を提示していただきありがとうございました。
Yukirr4_

2020/04/18 11:05 編集

解決してよかったです。 少し気になることがあるので質問しますが、 >>OnCollisionEnterのスペルミスが原因 とおっしゃいましたが、コンパイラがエラーを吐くことはなかったのでしょうか? Visual Studioを使用しているのならUnity用の拡張を導入することをおすすめします。 https://docs.microsoft.com/ja-jp/visualstudio/cross-platform/getting-started-with-visual-studio-tools-for-unity?view=vs-2019 Visual Studioを使っていなくても、コードの入力などはVisual Studioで進めるのがおすすめです。
hikaaaaaaaa

2020/04/16 07:11

ありがとうございます。。 コンパイラのエラーは吐かれませんでした。 こちら導入してみます! >Visual Studioを使用しているのならUnity用の拡張を導入することをおすすめします。 https://docs.microsoft.com/ja-jp/visualstudio/cross-platform/getting-started-with-visual-studio-tools-for-unity?view=vs-2019 この度は本当にありがとうございました。 フォローさせていただいたのでまたご質問をさせていただけますと幸いです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問