全体的な流れと原因
プレイヤーがColliderに侵入したら、別の場所へテレポートするというプログラムを作ろうと思いましたが、上手くいきませんでした。原因は一応わかっているのですが、解決方法がわかりませんでした。
原因はSAColliderBuilderというAssetのせいでした。
まず、頭、首、体、右腕、左腕、右足、左足のように体を7つに分割しました(ゲームの性質上、7つに分割しなければいけません)
Prim.00000000は、MeshColliderをつけるためのオブジェクト(MeshColliderがアタッチされていました)で、Default-Materialはそれをまとめるためのオブジェクト?だと思われます。
この二つのオブジェクトはSAColliderBuilderによって、自動生成されます。
そして、そのオブジェクトをPlayerというオブジェクトでまとめ、Playerには以下のようなComponentをアタッチしています。
Controllはプレイヤーを動かすためのスクリプトです。
そして別に、Is Triggerをオンにしたオブジェクトを作りそこのColliderへPlayerが侵入すると、別の場所へテレポートするという仕組みです。
また、Playerオブジェクト自体に別に適当なBoxColliderをアタッチしたところ、正常に動き、テレポートしました。
結論としては、RigidBodyとColliderが別々のオブジェクトにアタッチされていたのが原因でした。
※PlayerにRigidBodyが付いていて、Prim.00000000にMeshColliderが付いていてしまっているということです。
RigidBodyとColliderを同じオブジェクトにアタッチしたいのですが、自分の力ではどうしてもすることが出来ませんでした。
何か解決策を教えていただけるとありがたいです。
プレイヤーをテレポートさせる際に、プレイヤーの侵入を検知し、座標を変えるスクリプト
このスクリプトは、Is Triggerをオンにした球形のコライダーを作り、そこにアタッチしたものです。
また、テレポート先にTptoという名のオブジェクトがあり、プレイヤーの侵入を検知した際に、そのオブジェクトにプレイヤーの座標を設定するという仕組みになっています。
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class into1 : MonoBehaviour { 6 public GameObject Player; 7 public GameObject Tpto; 8 // Start is called before the first frame update 9 void Start () { 10 11 } 12 13 // Update is called once per frame 14 void Update () { 15 16 } 17 void OnTriggerEnter (Collider col1) { 18 if (col1.CompareTag ("Player")) { 19 Player.transform.position = Tpto.transform.position; 20 Debug.Log ("true"); 21 } 22 } 23}
試したこと
・Playerの中のBodyなどの一部のオブジェクトにRigidbodyとスクリプトを移動させたがそもそも移動できなくなった。
・MeshColliderを一つにまとめて、Playerに付けちゃおうと思ったが、そもそも一つにまとめてしまうと、オブジェクトごとに当たり判定を消すことができなくなってしまうので断念。
回答1件
あなたの回答
tips
プレビュー