ダンジョンゲーム開発①

プレイヤーのスクリプトです。

ファイル名とクラス名を同じにしてください。

この場合はPlayerMovement

PlayerMovement.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float rotateSpeed = 180f; // 1秒間に回転する角度
    public float gridSize = 1f;
    private bool isActing = false;


    void Update()
    {
        if (isActing) return;

        // --- 移動 (W/Sキー) ---a
        float vertical = Input.GetAxisRaw("Vertical");
        if (vertical != 0)
        {
            Vector3 direction = transform.forward * vertical;
            if (!Physics.Raycast(transform.position + Vector3.up * 0.5f, direction, gridSize))
            {
                StartCoroutine(MovePlayer(transform.position + direction * gridSize));
            }
        }

        // --- 左右回転 (A/Dキー) ---
        float horizontal = Input.GetAxisRaw("Horizontal");
        if (horizontal != 0)
        {
            // Aキーなら-90度、Dキーなら+90度
            float angle = horizontal > 0 ? 90f : -90f;
            StartCoroutine(RotatePlayer(angle));
        }

    }


    IEnumerator MovePlayer(Vector3 targetPos)
    {
        isActing = true;
        while (Vector3.Distance(transform.position, targetPos) > 0.01f)
        {
            transform.position = Vector3.MoveTowards(transform.position, targetPos, moveSpeed * Time.deltaTime);
            yield return null;
        }
        transform.position = targetPos;
        isActing = false;
    }

    IEnumerator RotatePlayer(float angle)
    {
        isActing = true;
        Quaternion startRotation = transform.rotation;
        Quaternion targetRotation = transform.rotation * Quaternion.Euler(0, angle, 0);

        float t = 0;
        while (t < 1f)
        {
            t += Time.deltaTime * (rotateSpeed / 90f); // 90度回転の速度に合わせる
            transform.rotation = Quaternion.Slerp(startRotation, targetRotation, t);
            yield return null;
        }
        transform.rotation = targetRotation;
        isActing = false;
    }
}