C#

[유니티]방향키로 움직이고 마우스로 화면 회전하기

아스키의 공부방 2023. 8. 29. 20:41
728x90
반응형

 

빈 게임 오브젝트(Player)를 생성하고 컴포넌트 추가

 

메인카메라를 Player 자식으로 이동

 

스크립트 (카메라에 추가)

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

public class CameraControl : MonoBehaviour
{
    public float rotationSpeed = 200f;
    public float minXRotation = -45f;
    public float maxXRotation = 45f;

    private float currentXRotation = 0f;

    void Update()
    {
        // 회전 처리
        float mouseX = Input.GetAxis("Mouse X");
        float mouseY = Input.GetAxis("Mouse Y");

        float rotationX = -mouseY * rotationSpeed * Time.deltaTime;
        float rotationY = mouseX * rotationSpeed * Time.deltaTime;

        // x축 회전 제한
        currentXRotation += rotationX;
        currentXRotation = Mathf.Clamp(currentXRotation, minXRotation, maxXRotation);

        // 회전 적용
        transform.localRotation = Quaternion.Euler(currentXRotation, transform.localEulerAngles.y + rotationY, 0f);
    }
}

 

스크립트 (Player에 추가)

 

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

public class PlayerControl : MonoBehaviour
{
    public float movementSpeed = 5f;
    private Transform cameraTransform;

    private void Start()
    {
        cameraTransform = Camera.main.transform; // 카메라의 Transform을 가져옴
    }

    private void Update()
    {
        // 이동 처리
        float horizontalInput = Input.GetAxis("Horizontal");
        float verticalInput = Input.GetAxis("Vertical");

        Vector3 cameraForward = cameraTransform.forward;
        Vector3 cameraRight = cameraTransform.right;

        cameraForward.y = 0; // y 축 회전은 고려하지 않음
        cameraRight.y = 0;

        Vector3 movement = (cameraForward.normalized * verticalInput + cameraRight.normalized * horizontalInput) * movementSpeed * Time.deltaTime;
        transform.Translate(movement);
    }
}
728x90
반응형