using UnityEngine; using UnityEngine.InputSystem.EnhancedTouch; using Touch = UnityEngine.InputSystem.EnhancedTouch.Touch; // 扉を移動(スライド)する public class DoorSlider : MonoBehaviour { // スライドの速度 [SerializeField] private float speed; // 水平の扉のグループ(親オブジェクト) [SerializeField] private Transform horizontalDoors; // 最低 X 位置 [SerializeField] private float xMin; // 最大 X 位置 [SerializeField] private float xMax; // 垂直の扉のグループ(親オブジェクト) [SerializeField] private Transform verticalDoors; // 最低 Z 位置 [SerializeField] private float zMin; // 最大 Z 位置 [SerializeField] private float zMax; // 使った指 private Finger useFinger = null; // 指の初期位置 private Vector2 fingerStart; // 水平扉の初期位置(X軸のみ) private float doorStartX; // 垂直扉の初期位置(Z軸のみ) private float doorStartZ; private void Start() { // タッチ機能有効化 EnhancedTouchSupport.Enable(); // 各種のタッチイベント登録 Touch.onFingerDown += OnFingerDown; Touch.onFingerMove += OnFingerMove; Touch.onFingerUp += OnFingerUp; } private void OnDestroy() { // 各種のタッチイベント登録解除 Touch.onFingerDown -= OnFingerDown; Touch.onFingerMove -= OnFingerMove; Touch.onFingerUp -= OnFingerUp; // タッチ機能無効化 EnhancedTouchSupport.Disable(); } private void OnFingerDown(Finger finger) { // マルチタッチできるため、すでに指一本を使っていたら、 // 2本目から無視する if (useFinger != null) return; // 指を保管 useFinger = finger; // 初期位置も取っておく fingerStart = finger.screenPosition; doorStartX = horizontalDoors.position.x; doorStartZ = verticalDoors.position.z; } private void OnFingerMove(Finger finger) { // マルチタッチできるので、同じ指かどうかを確認 if (useFinger != finger) return; // 指の移動量を計算(画面のピクセル単位) Vector2 delta = useFinger.screenPosition - fingerStart; // 様々な画面サイズがあるので、移動量正規化しましょう(最大値:1) delta.x /= Screen.width; delta.y /= Screen.height; // 現在の位置からを取得し、X軸だけを更新 Vector3 hPos = horizontalDoors.position; hPos.x = doorStartX + delta.x * speed; // 速度を適用 hPos.x = Mathf.Clamp(hPos.x, xMin, xMax); // 移動制限を適用 horizontalDoors.position = hPos; // 現在の位置からを取得し、Z軸だけを更新 Vector3 vPos = verticalDoors.position; vPos.z = doorStartZ + delta.y * speed; // 速度を適用 vPos.z = Mathf.Clamp(vPos.z, zMin, zMax); // 移動制限を適用 verticalDoors.position = vPos; } private void OnFingerUp(Finger finger) { // 指を解放する if (useFinger == finger) useFinger = null; } }