250x250
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 | 29 | 30 | 31 |
Tags
- Object Poling
- Hp바
- Transform
- 패럴렉스
- LayerMark
- raycasting
- CSharp #자료구조
- 플레이어 방향전환
- Scrooling
- rotation
- joystick
- 플레이어 이동
- 스크롤링
- Blend Type
- Object Pooling
- Prefabs
- Hpbar
- Vector3
- 일시정지
- Ainimation Blending
- 유니티
- raycast
- 오브젝트 풀링
- rigidbody
- Parallax
- apk
- 2D슈팅게임
- Animation State Machine
- 프리팹
- Unity
Archives
- Today
- Total
주녘공부일지
[Unity3D] Camera 본문
728x90
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
[Unity] Monobehaviour Life Cycle 파헤치기
유니티에서 하나의 스크립트는 그 자체로 하나의 클래스(Class)를 뜻하며, 그 중 Behaviour는 활성화(Enable), 비활성화(Disable) 할 수 있는 Component를 의미합니다. 유니티에서 흔히 볼 수 있는 MonoBehaviour.
psh50zmfhtm.tistory.com
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를 누르면 씬에서 보고있는 화면을 메인 카메라가 비추게 만듬
728x90
'GameEngine > UnityEngine - Class' 카테고리의 다른 글
[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 |