前提
Unityでワープ機能、A地点からB地点、B地点からA地点を作りたくてコードを書きました。
しかし挙動がおかしくA地点からB地点までは正常に動作するのですが、B地点からA地点へ行こうとすると何故かB地点からB地点にワープとなってしまい理由もわからず困っています。
https://youtu.be/WwO_63G4hx0
実現したいこと
A地点からB地点、B地点からA地点へのワープ、またそのオブジェクトのプレハブ化
発生している問題・エラーメッセージ
該当のソースコード
C#
1public class Warp : MonoBehaviour 2{ 3 4 public GameObject player; //自分自身です、Unity自機を入れています 5 6 public GameObject nextWarpObject;//次にワープしたいオブジェクトを入れるやつです 7 8 private Vector3 trans; //いろんなサイトを見て回った結果にできたnextWarpObjectのpositionの格納先です 9 10 PlayerController script; //プレイヤーを動かすためのスクリプトを外部から引っ張ってきています 11 12 PlayerInput playerInput; //Fキーを押したら移動するよという動作を作りたかったのでInputActioinを使用しています 13 14 15 16 // Update is called once per frame 17 18 private void Awake() 19 { 20 21 script = player.GetComponent<PlayerController>(); //代入しています 22 23 playerInput = new PlayerInput(); //InputActionです 24 25 26 27 playerInput.Player.CoverAction.started += CoverAction;//同 28 29 playerInput.Enable();//同 30 } 31 32 private void Start() 33 { 34 trans = nextWarpObject.transform.position; //ここでtransの中に”移動先”のオブジェクトの座標を代入しています。 35 Debug.Log(trans); //移動先の座標の確認です、しっかりと別々の座標になってました。 36 } 37 private void CoverAction(InputAction.CallbackContext obj) 38 { 39 if (script.onWarpPoint) 40 { 41 Debug.Log("Warp"); 42 43 player.transform.position = trans; //押された時にplayerの座標を書き換えます 44 } 45 } 46 47 48 private void Update() 49 { 50 51 } 52 53 void OnTriggerStay(Collider other) //これはBoxコライダーの中にいるときに自分の頭上に目印を出すスクリプトです 54 { 55 56 if (other.gameObject.tag == "Player") 57 { 58 Debug.Log("CanWarp"); 59 script.onWarpPoint = true; 60 61 62 63 } 64 } 65 66 private void OnTriggerExit(Collider other) 67 { 68 script.onWarpPoint = false; 69 } 70}
試したこと
上記のように一行一行丁寧に見ました、またDebug.Logでお互いの座標が違うことを確認しました。
A地点とB地点をつなげるのではなく、移動先の指定を空のオブジェクトに指定しても同じ状況になります。
補足情報(FW/ツールのバージョンなど)
Unity2021.3.15f1
回答2件
あなたの回答
tips
プレビュー