<“DoorOpenScript”>
using UnityEngine;
public class DoorOpenScript : MonoBehaviour {
public float slideDistance = 2.0f; // ドアがスライドする距離
public float slideSpeed = 2.0f; // ドアのスライド速度
private bool isNear = false; // プレイヤーが近くにいるかどうか
private bool isOpen = false; // ドアが開いているかどうか
private Vector3 closedPosition; // ドアの初期位置
private Vector3 openPosition; // ドアの開いた位置
void Start() {
closedPosition = transform.position;
Debug.Log("オブジェクトの位置: " + closedPosition);
openPosition = closedPosition + transform.forward * slideDistance; // スライド方向を調整(右方向)
}
void Update() {
if (isNear && Input.GetKeyDown(KeyCode.Space)) {
isOpen = !isOpen; // スペースキーで開閉を切り替え
Debug.Log("ドアの状態が切り替わりました: " + (isOpen ? "Open" : "Closed"));
}
// ドアを開く・閉じる位置に線形補間で移動
transform.position = Vector3.Lerp(transform.position, isOpen ? openPosition : closedPosition, Time.deltaTime * slideSpeed);
Debug.Log("ドアの現在位置: " + transform.position);
}
public void PlayerEnteredArea() {
isNear = true; // プレイヤーが近くにいると設定
}
public void PlayerExitedArea() {
isNear = false; // プレイヤーが近くにいないと設定
Debug.Log("プレイヤーがトリガーエリアから出ました。ドアは閉じます。");
}
}
<“Search Area Trigger” Script>
using UnityEngine;
public class SearchAreaTrigger : MonoBehaviour {
// ドアオブジェクトの参照
private DoorOpenScript doorOpenScript;
void Start() {
// 親オブジェクトからDoorOpenスクリプトを取得
doorOpenScript = transform.parent.GetComponent<DoorOpenScript>();
if (doorOpenScript == null) {
Debug.LogError("DoorOpenスクリプトが親オブジェクトに見つかりません!");
}
}
void OnTriggerEnter(Collider col) {
if (col.CompareTag("Player")) {
// プレイヤーがトリガーエリアに入ったとき
doorOpenScript.PlayerEnteredArea(); // ドアのスクリプトにプレイヤーが入ったことを通知
Debug.Log("プレイヤーがトリガーエリアに入りました。");
}
}
void OnTriggerExit(Collider col) {
if (col.CompareTag("Player")) {
// プレイヤーがトリガーエリアから出たとき
doorOpenScript.PlayerExitedArea(); // ドアのスクリプトにプレイヤーが出たことを通知
Debug.Log("プレイヤーがトリガーエリアから出ました。");
}
}
}
