개발일기

QuaterView Camera 본문

Unity ToyProject/RPG

QuaterView Camera

김조성준 2023. 7. 26. 23:49

1. QuaterView Camera


QuaterView로 바라볼 수 있게 구현한 CamerController Script입니다.

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

public class CameraController : MonoBehaviour
{
    [SerializeField] CameraMode cameraMode = CameraMode.QuarterView;
    [SerializeField] Vector3 delta = new Vector3(0,6,-5); // 카메라와 플레이어의 위치 차이
    [SerializeField] GameObject player;

    public void SetPlayer(GameObject player) { this.player = player; }

    void LateUpdate()
    {
        if (cameraMode == CameraMode.QuarterView)
        { if (player == null || !player.activeSelf)
                return;
            if(Physics.Raycast(player.transform.position,delta,out RaycastHit rayHit, delta.magnitude, LayerMask.GetMask("Block")))
            {
                float dist = (rayHit.point - player.transform.position).magnitude * 0.8f;
                transform.position = player.transform.position + delta.normalized * dist;
            }
            else
            {
                transform.position = player.transform.position + delta;
                transform.LookAt(player.transform); // 대상을 바라보도록 강제로 rotation 시키는 함수
            }
        }
    }

    public void SetQuaterView()
    {
        cameraMode = CameraMode.QuarterView;
        delta = new Vector3(0, 6, -5);
    }
}
  •  카메라를 플레이어가 쿼터뷰로 보이는 각도로 설정한 후, ctrl + shift + f 를 누르면 해당 각도로 보이도록 카메라가     이동하게 됩니다. 
  • 그 상태의 카메라 위치를 Vector3 변수로 저장하여 쿼터뷰로 전환 시 변수 값만큼 카메라를 이동시키고 플레이어를  바라보도록 하면 됩니다.
  • 만약 플레이어가 전투불능이 되어 화면에서 사라지는 경우를 고려하여 플레이어가 없을 땐 더이상 카메라가 움직이지 않도록 조건을 추가해줬습니다.
  • 플레이어와 카메라 사이의 건물이 있다면 플레이어가 보이지 않는 불편함이 생기기에 그런 경우에는 플레이어와 벽 사이에 카메라를 이동시켜 불편함을 해소했습니다. 

2. 실행


1. 플레이어와 카메라 사이의 Block Layer를 가진 물체가 없는 경우

2. 플레이어와 카메라 사이의  Block Layer를 가진 물체가 존재하는 경우

'Unity ToyProject > RPG' 카테고리의 다른 글

PoolManager와 ResourceManager  (0) 2023.07.28
SoundManager  (0) 2023.07.27
Player 이동  (0) 2023.07.24
ResourceManager  (0) 2023.07.16
Managers와 InputManager  (0) 2023.07.15