SeraializeFeild, Time.deltaTime, 옵저버패턴

김치헌·2024년 1월 18일
0

TIL

목록 보기
18/38

유니티에서 인스팩터에서 변수 수치 조정
유니티에서 Public 으로 선언한 변수는 인스팩터에서 값을 변경할 수 있다!
public 으로 선언할 수 없는 변수는 [serializeField] private 로 작성하면
인스팩터에서 값을 변경 할 수 있다!

Time.deltaTime을 곱한다!의 의미
컴퓨터마다 성능이 다르기 때문에 게임 플레이하는 사람마다 다른 fps를 가지고 있음
쉽게 생각하면 deltaTime은 1/fps이다 (1프레임당 걸린 시간)

transform.position += new Vector3(x, y);

이렇게 작성하게 되면 fps가 300인 컴퓨터는 초당 300번을 이동하게되고
fps가 150인 컴퓨터는 초당 150번을 이동하게 된다! 따라서 델타타임을 곱해주게 되면

transform.position += new Vector3(x, y)*Time.deltaTime;

fps가 300인 컴퓨터도 300*(1/300)=1 fps가 150인 컴퓨터도 150(1/150)=1이 되게된다!

옵저버 패턴
처음보고 이해가 가지 않아 정리를 하다보니 Action이 델리게이트 였구나!!

PlayerInputController.cs에서 Vector2 형식의 인풋을 받는다. 노말라이즈하고!
상위에 있는 CharacterController.cs. 로 넘어간다.
구독이 들어와 있는 애들한테 뿌려준다?라는 건 델리게이트에서 추가된 함수들을 실행한다라는 뜻
그럼 현재 등록되어 있는 Move 함수가 실행되는데 _movementDirection이 입력값으로 바뀌게 되고 FixedUpdate에서 실행되고 있던 ApplyMovement의 매개변수가 변화하게 된다.
현재 스피드를 5로 고정하였고 rigidbody.velocity로 객체가 이동하게 된다.

요약
PlayerInputController.cs>CharacterController.cs>델리게이트에서 추가된 함수들을 실행한다>Move 함수가 실행>ApplyMovement의 매개변수가 변화>rigidbody.velocity로 객체가 이동

결국 옵저버 패턴이라는 것은
1. 이벤트가 발생하였다 (키보드 입력 W가 발생하였다)
2. 이벤트를 호출한다.
3. 이벤트 관리자는 등록되어 있는 함수들을 실행한다.

일상생활에서 밥먹는 것을 옵저버 패턴에 대입하면
1. 식사시간 알람이 울린다.
2. 어머니(이벤트 매니저)가 알람을 듣는다. 식사준비하라고 말한다.
3. 아버지는 수저 젖가락을 세팅하고(함수1), 형은 밥을 담고(함수2), 나는 반찬을 꺼낸다(함수3)

뭐 이런거 비슷하지 않을까 싶다.

profile
초보개발자

0개의 댓글