Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 백준 c++ 2468번
- 수학숙제
- 유니티
- 백준 17070번 c++
- c++
- 플레이어 이동
- Lv.3
- 17070번
- 백준 c++ 2870번
- 백준 1103번 게임
- 백준 1103번
- 2870번 수학숙제 c++
- 프로그래머스
- 2870번
- 2870번 수학숙제
- 오브젝트 풀링
- C#
- 백준
- 2468 c++
- 코테
- Lv2
- 백준 1103번 c++
- 코딩테스트
- 2870번 c++
- dfs
- Unity
- 백준 2870번
- Algorithm
- Beakjoon
- 백준 17070번
Archives
- Today
- Total
주녘공부일지
[Unity3D] Camera 본문
Camera
엔진 상의 Main Camera 오브젝트의 컴포넌트로 존재하는 class CameraController
에디터에서 설정한 _player 오브젝트를 카메라가 따라가게 만드는 로직
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
[SerializeField] Define.CameraMode _mode = Define.CameraMode.QuaterView;
[SerializeField] Vector3 _delta = new Vector3(0f, 6f, -5f); // 초기값
[SerializeField] GameObject _player = null;
void LateUpdate()
{
if (_mode == Define.CameraMode.QuaterView)
{
transform.position = _player.transform.position + _delta; // 위치 셋팅
transform.LookAt(_player.transform); // 회전 셋팅 (플레이어 좌표 주시)
}
}
}
카메라를 이동시키는 로직이 Update()에 들어가면 Input값에 따른 플레이어 이동도 Update()에서 실행되기 때문에 호출되는 순서가 랜덤으로 실행되어 매 프레임마다 플레이어가 이동하면 카메라가 따라가야 하는데, 플레이어가 이동하기 전에 카메라가 이동하고 플레이어를 이동시키는 경우 (호출 순서) 덜덜 떨리는 현상이 발생 -> 이를 해결하기 위해서 LateUpdate()문으로 선언
즉, LateUpdate()문은 Update()문 실행 이후에 실행되는 Update()문임
https://psh50zmfhtm.tistory.com/13
CameraController 확장
플레이어가 다른 물체(ex.벽)에 의해 안 보이면 보이는 위치까지 카메라가 플레이어에게 가까워짐
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class CameraController : MonoBehaviour
{
[SerializeField] Define.CameraMode _mode = Define.CameraMode.QuaterView;
[SerializeField] Vector3 _delta = new Vector3(0f, 6f, -5f); // 초기값
[SerializeField] GameObject _player = null;
void LateUpdate()
{
if (_mode == Define.CameraMode.QuaterView)
{
RaycastHit hit;
if (Physics.Raycast(_player.transform.position, _delta, out hit, _delta.magnitude, LayerMask.GetMask("Wall")))
{
float dist = (hit.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); // 회전 셋팅 (플레이어 좌표 주시)
}
}
}
}
Tip) 메인 카메라 오브젝트를 선택하고 단축키 Ctrl+Shift+F를 누르면 씬에서 보고있는 화면을 메인 카메라가 비추게 만듬
'GameDevelopment > [Unity] Class, Pattern' 카테고리의 다른 글
[Unity] Animation Blending (0) | 2022.03.23 |
---|---|
[Unity] StateMachineBehaviour (0) | 2022.03.23 |
[Unity3D] Physics.Raycast (+LayerMask) (0) | 2022.02.24 |
[Unity3D] Collision (충돌) (0) | 2022.02.23 |
[Unity3D] Rotation (회전) (0) | 2022.02.21 |