前提・実現したいこと
2Dと3Dのふたつのステージをボタン一つで行き来するゲームを作っています。
2Dのステージにて特定のエリアにいる時ボタンを押した場合に、もう3Dの該当するブロックの上にプレイヤーを移動させたいです。
(2Dというのは見かけの問題であって、どちらも3Dで制作しています。)
発生している問題・エラーメッセージ
1つ目のエリアはうまくいきますが、2つ目のエリアでボタンを押しても、該当するブロックのx座標を取得してくれません。(y座標z座標は問題ありません)。
該当のソースコード
C#
12Dの特定エリアに入った時の、該当する3Dシーンのブロックのx座標を取得するスクリプト 2 3public class Areatrigger : MonoBehaviour 4{ 5 public static float anotherTransformZ; 6 7 public void OnTriggerStay(Collision other) 8 { 9 if (other.gameObject.name == "Area2D_A") 10 { 11 anotherTransformZ = GameObject.Find("3DCubeA").transform.position.x; 12 13 } 14 15 else if (other.gameObject.name == "Area2D_B") 16 { 17 anotherTransformZ = GameObject.Find("3DCubeB").transform.position.x; 18 } 19 else 20 { 21 anotherTransformZ = switchto2da.anotherTransformA; 22 } 23 24
C#
12Dから3Dへシーン遷移するスクリプト 2public class switchto3da : MonoBehaviour 3{ 4 public static float anotherTransformD; 5 public static float anotherTransformE; 6 public static float anotherTransformF; 7 8 // Start is called before the first frame update 9 void Start() 10 { 11 12 } 13 14 // Update is called once per frame 15 void Update() 16 { 17 if (Input.GetKey(KeyCode.M)) 18 { 19 anotherTransformE = GameObject.Find("unitychan_dynamic").transform.position.y; 20 anotherTransformF = GameObject.Find("unitychan_dynamic").transform.position.z; 21 22 SceneManager.LoadScene("3DstageA"); 23 } 24 } 25} 26 27
C#
1遷移直後のスクリプト 2public class changedto3da : MonoBehaviour 3{ 4 // Start is called before the first frame update 5 void Start() 6 { 7 transform.Translate(Areatrigger.anotherTransformZ, switchto3da.anotherTransformE, switchto3da.anotherTransformF); 8 } 9 10 // Update is called once per frame 11 void Update() 12 { 13 14 } 15} 16
C#
13Dから2Dへシーン遷移するスクリプト 2public class switchto2da : MonoBehaviour 3 4 5{ 6 public static float anotherTransformA; 7 public static float anotherTransformB; 8 public static float anotherTransformC; 9 10 // Start is called before the first frame update 11 void Start() 12 { 13 14 } 15 16 // Update is called once per frame 17 void Update() 18 { 19 20 21 if (Input.GetKey(KeyCode.M)) 22 { 23 anotherTransformA = GameObject.Find("unitychan_dynamic").transform.position.x; 24 anotherTransformB = GameObject.Find("unitychan_dynamic").transform.position.y; 25 anotherTransformC = GameObject.Find("unitychan_dynamic").transform.position.z; 26 SceneManager.LoadScene("2DstageA"); 27 } 28 } 29} 30
C#
1遷移直後のスクリプト 2public class changedto2da : MonoBehaviour 3{ 4 5 // Start is called before the first frame update 6 void Start() 7 { 8 9 transform.Translate(0, switchto2da.anotherTransformB, switchto2da.anotherTransformC); 10 } 11 12 // Update is called once per frame 13 void Update() 14 { 15 16 } 17}
試したこと
AreatriggerのOnTriggerStayに問題があると思い、OnTriggerExitで座標情報をリセットさせたりしましたが上手くいきませんでした。ステージの構成上必ずArea2D_Aを通った後Area2D_Bを通るのですが、staticで定義したanotherTransformZが、Area2D_Aを通過後も該当ブロックの座標情報を取得し続けているのでしょうか?
補足情報(FW/ツールのバージョンなど)
Unityバージョン 2019.2.4f1
長文な上にごちゃごちゃしたコードですいません。OntriggerStayを初めて使うような初心者なもので、根本的な仕組みすら分かっていないかもしれませんが、どうかよろしくお願い致します。
*追記*
2Dの時に座標を0にしているのはz座標ではなくx座標です。
これは単純に私がz軸方向にステージを作ってしまったためです。紛らわしくてすいません。
回答1件
あなたの回答
tips
プレビュー