컴포넌트 클래스들 사이의 다형성 ❗
컴포넌트들이 많아 질 경우 유용하다.
Gravity를 컴포넌트 방식으로 구현을 하는게 더 편하고 유연하다. ❗❗
나는 매니져에서 관리를 할려고했는데 여간 복잡한게 아니였다.
Scene의 초기화 함수 Init 을 구현하여 오브젝트들이 씬에 설정한 초기값을 update전에 셋팅을 받을 수 있는 시간 구현 ❗❗❗
오늘 점프 구현할 것이다.
먼저 언제 점프 상태로 진입할지 생각을 한다면은
일단 먼저 땅에 있는지 확인 부터 해야한다.
땅 밟은 유무를 T/F로 할 것인데
이것을 컴포넌트 방식으로 일단 해볼 것이다.
상속으로 해도 상관은 없는데 상속기반으로 구현을 한다면은
골치아파짐 -> 상속을 받는 애들을 모아 주어야한다.
중력을 받는 오브젝트 안받는 오브젝트 이런식으로.
이런식으로 컴포넌트가 늘어나는데
이렇게 많으면은 차라리 다형성을 활용하여 컴포넌트 부모를 만드는게 좋다.
왜냐하면 컴포넌트끼리 비슷한 패턴이 거의 똑같이 있기 때문이다.
p_owner -> 가 가르키는 부분이라던지.
이렇게하면 오브젝트에서 부모 포인터 하나만 가지고 있어도 되니까.
Gravity 클래스 컴포넌트로 만들어놓고
CObject에서 finalUpdate 부분에서 RigidBody보다 먼저 계산이 되도록 해주어야
RigidBody에서 중력값을 기준으로 계산을 할 것이기 때문이다.
기본적인 컴포넌트 설계 끝내고 본격적으로 Gravity 구현을 하러 갈 것이다.
Gravity를 보유한 오브젝트는 매번 Gravity의 finalUpdate에 들어올 것이다.
그러면 Gravity의 finalUpdate에서 이것을 확인을 해야한다.
나와 땅이 충돌했을 때
나한테 충돌했다는 것을 관리해도되고 땅에서 해도 상관 없는데
효율적인 방법은 땅에서 다 관리를 하는 것이다.
한번만 알려줘도 되니까
일단 StartScene에서 처음 기초 작업들을 끝내 주도록 하자.
크기, 위치 설정 등등.
이제 Ground 클래스에서 Collider의 사이즈를 정해야한다.
생성자는 객체가 생성될 때 바로 호출 되는 것이고
그게 아니라 씬에서 작업을 다 끝내고 리얼 막작업으로 초기값을 셋팅해줄
그 시간이 필요하다.
왜냐하면 지금 StartSCene에서 설정해준 Scale을 Ground객체가 그대로 이어 받고싶은데
그 막작업 시간이 없으니까 Ground 생성자에서 GetScale한다고해서 값을 못 얻어 오기 때문이다.
우리가 그 잠깐의 시간을 벌 공간을
Init함수를 통해서 구현을 할 것이다.
그리고 이 Init함수에서
이렇게 update전에 먼저 초기화 함수를 호출 할 것이다.
충돌도 잘 일어난다.
일단
이런식으로 ground클래스 작업을 해주도록 하자.
그런데 DT가 클 경우 땅을 파고 들어갈 수 있는 경우가 있다.
곂친 만큼의 크기만큼 위로 밀어 올려주어야한다.