Unity2Dでプレイヤーが何かに触れるつつ次のシーンへシーンチェンジする
現在の状態はドアにプレイヤーが触れるとテキストは表示されるが、スペースキーを押すとシーンチェンジするように設計したが、シーンチェンジしない
A,原因は OnTriggerEnter2D
の中で Input.GetKey("space")
を判定していること です。
OnTriggerEnter2D
はプレイヤーがトリガーに「入った瞬間」に 一度だけ呼ばれる メソッドなので、
その瞬間にスペースキーを押していなければ SceneManager.LoadScene("StageFinal")
が実行されません。
サンプル動画↓
実際のコードを見てみよう
GameObject showObject;
public string showObjectName;
void Start()
{ // 最初に行う
// 消す前に表示オブジェクトを覚えておいて
showObject = GameObject.Find(showObjectName);
showObject.SetActive(false); // 消す
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag(“Player”))
{
Debug.Log(“プレイヤーと重なりました!”);
showObject.SetActive(true);
if (Input.GetKey(“space”))
{
SceneManager.LoadScene(“StageFinal”);
}
}
}
void OnTriggerExit2D(Collider2D other)
{
if (other.CompareTag(“Player”))
{
Debug.Log(“プレイヤーが離れました!”);
showObject.SetActive(false);
}
↑このコードだとうまく作動しない
以下のように変更する
using UnityEngine;
using UnityEngine.SceneManagement;
public class DoorTrigger : MonoBehaviour
{
GameObject showObject;
public string showObjectName;
bool isPlayerInside = false; // プレイヤーが範囲内かどうか
void Start()
{
showObject = GameObject.Find(showObjectName);
showObject.SetActive(false);
}
void Update()
{
// プレイヤーが範囲内にいて、スペースキーが押されたらシーン遷移
if (isPlayerInside && Input.GetKeyDown(KeyCode.Space))
{
SceneManager.LoadScene(“StageFinal”);
}
}
void OnTriggerEnter2D(Collider2D other)
{
if (other.CompareTag(“Player”))
{
Debug.Log(“プレイヤーと重なりました!”);
showObject.SetActive(true);
isPlayerInside = true;
}
}
void OnTriggerExit2D(Collider2D other)
{
if (other.CompareTag(“Player”))
{
Debug.Log(“プレイヤーが離れました!”);
showObject.SetActive(false);
isPlayerInside = false;
}
}
}