WinAPI 70 RigidBody (6)

CJB_ny·2022년 10월 12일
0

WinAPI

목록 보기
72/79
post-thumbnail

오늘 배운거 👍👍👍

  • 컴포넌트 클래스들 사이의 다형성 ❗

    컴포넌트들이 많아 질 경우 유용하다.

  • Gravity를 컴포넌트 방식으로 구현을 하는게 더 편하고 유연하다. ❗❗

    나는 매니져에서 관리를 할려고했는데 여간 복잡한게 아니였다.

  • Scene의 초기화 함수 Init 을 구현하여 오브젝트들이 씬에 설정한 초기값을 update전에 셋팅을 받을 수 있는 시간 구현 ❗❗❗


오늘 점프 구현할 것이다.

먼저 언제 점프 상태로 진입할지 생각을 한다면은

일단 먼저 땅에 있는지 확인 부터 해야한다.

땅 밟은 유무를 T/F로 할 것인데

이것을 컴포넌트 방식으로 일단 해볼 것이다.

상속으로 해도 상관은 없는데 상속기반으로 구현을 한다면은

골치아파짐 -> 상속을 받는 애들을 모아 주어야한다.

중력을 받는 오브젝트 안받는 오브젝트 이런식으로.

Component 다형성 ❗

이런식으로 컴포넌트가 늘어나는데

이렇게 많으면은 차라리 다형성을 활용하여 컴포넌트 부모를 만드는게 좋다.

왜냐하면 컴포넌트끼리 비슷한 패턴이 거의 똑같이 있기 때문이다.

p_owner -> 가 가르키는 부분이라던지.

이렇게하면 오브젝트에서 부모 포인터 하나만 가지고 있어도 되니까.

구현 ❗

Gravity 클래스 컴포넌트로 만들어놓고

CObject에서 finalUpdate 부분에서 RigidBody보다 먼저 계산이 되도록 해주어야

RigidBody에서 중력값을 기준으로 계산을 할 것이기 때문이다.

기본적인 컴포넌트 설계 끝내고 본격적으로 Gravity 구현을 하러 갈 것이다.

Gravity를 보유한 오브젝트는 매번 Gravity의 finalUpdate에 들어올 것이다.

그러면 Gravity의 finalUpdate에서 이것을 확인을 해야한다.

OnCollisionEnter

나와 땅이 충돌했을 때

나한테 충돌했다는 것을 관리해도되고 땅에서 해도 상관 없는데

효율적인 방법은 땅에서 다 관리를 하는 것이다.

한번만 알려줘도 되니까

구현

일단 StartScene에서 처음 기초 작업들을 끝내 주도록 하자.

크기, 위치 설정 등등.

이제 Ground 클래스에서 Collider의 사이즈를 정해야한다.

초기화 작업 -> 시간 ❗❗

생성자는 객체가 생성될 때 바로 호출 되는 것이고

그게 아니라 씬에서 작업을 다 끝내고 리얼 막작업으로 초기값을 셋팅해줄

그 시간이 필요하다.

왜냐하면 지금 StartSCene에서 설정해준 Scale을 Ground객체가 그대로 이어 받고싶은데

그 막작업 시간이 없으니까 Ground 생성자에서 GetScale한다고해서 값을 못 얻어 오기 때문이다.

구현

우리가 그 잠깐의 시간을 벌 공간을

Init함수를 통해서 구현을 할 것이다.

그리고 이 Init함수에서

이렇게 update전에 먼저 초기화 함수를 호출 할 것이다.

충돌도 잘 일어난다.

땅 구현

일단

이런식으로 ground클래스 작업을 해주도록 하자.

그런데 DT가 클 경우 땅을 파고 들어갈 수 있는 경우가 있다.

곂친 만큼의 크기만큼 위로 밀어 올려주어야한다.

profile
https://cjbworld.tistory.com/ <- 이사중

0개의 댓글