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}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/04/15 13:04 編集
2020/04/15 13:09
2020/04/15 13:14
2020/04/15 13:22 編集
2020/04/15 13:18
2020/04/15 13:19
2020/04/15 13:25
2020/04/15 15:01
2020/04/15 15:11
2020/04/15 15:18 編集
2020/04/15 15:21
2020/04/15 15:23
2020/04/15 15:31
2020/04/15 16:04
2020/04/15 16:07
2020/04/15 16:14
2020/04/15 16:25
2020/04/15 16:28
2020/04/16 02:02
2020/04/16 02:51
2020/04/18 11:05 編集
2020/04/16 07:11