Unity2Dでプレイヤーが何かに触れるつつ次のシーンへシーンチェンジする

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;
}
}
}