728x90 반응형 게임엔진/윈도우API14 윈도우API)18.충돌-1 충돌 충돌은 게임에서 많은 역할을 수행한다. 예를 들자면 물리적인 충돌을 막을 수도 있고 충돌을 판단하여 이벤트를 수행할수도 있다. 이러한 충돌은 상속구조보다는 컴포넌트를 이용하는것이 게임제작에 편리하다. 본 포스팅에서는 이러한 충돌을 컴포넌트를 이용하여 구현해보고자 한다. 콜리전 생성 먼저 생성할 콜리전의 타입을 정의해준다. 일반적으로 2D게임에서는 박스와 스피어 두종류의 콜리전을 사용한다. enum class CollisionType { Box, Sphere, }; 타입을 정의하였으면 콜리전의 베이스들이 될 콜리전 클래스를 정의해준다. class Collision: public Component { public: Collision(CollisionType CType); virtual ~Collisio.. 게임엔진/윈도우API 2023. 1. 25. 윈도우API)17.타일맵 타일맵 2D맵에는 하나의 커다란 이미지를 사용하는 속칭 "통맵"과 작은 단위의 이미지를 이어붙여 만드는 "타일맵"이 존재한다. 여기서 타일맵은 다양한 형태로 활용이된다. 이미지를 불러들여 맵으로써 활용하기도 하지만 특정 범위를 지정하여 콜리전 범위를 지정할수도 있다. 이번포스팅에서는 이러한 콜리전 범위를 표시하는것을 다루고자 한다. 타일맵 계층구조 ResourceBase(Load/Save) Tilemap(vector _tiles) Actor TilemapActor(Tilemap* _tile/bool _showDebug) 타일맵 생성 타일맵은 리소스로써 활용될 예정이다. 그렇기에 ResourceBase를 상속받고 ResourceManager에서 관리되어야 한다. //tilemap.h class tilema.. 게임엔진/윈도우API 2023. 1. 24. 윈도우API)14.카메라 카메라 2D게임에서의 카메라는 3D환경에서의 카메라와 달리 불러온 이미지에서의 영역을 이동하는것에 불과하다. 예를 들자면 800x600의 게임 화면에서 100만큼 이동시키는것은 (100,100)의 좌표에 있는 것들을 우리 화면(0,0)으로 옮기는것에 불과하다는 뜻이다. 상용엔진에서 카메라는 Component를 만들어 카메라를 관리한다. 카메라 Component 생성 카메라는 게임의 장르에 따라 달라진다. 이 포스트에서는 플레이어를 따라가는 카메라를 구현하고자 한다. Component에 자신을 붙일 엑터를 가르키는 owner를 만든다. class Component { public: Actor* GetOwner() { return _owner; } void SetOwner(Actor* owner) { _ow.. 게임엔진/윈도우API 2022. 12. 30. 윈도우API)13.플립북 애니메이션 플립북 애니메이션 플립북 애니메이션은 2D전용 애니메이션이다. 상용엔진에서는 특정 툴을 이용하여 범위를 지정하고 그것을 통해 얻은 스프라이트를 합쳐서 애니메이션을 만드는것을 플립북이라고 한다. WindowApi에서는 bmp만을 지원하며 알파 채널이 없어 특정 색상을 무시하는 것을 통해 본래의 이미지를 추출하는 방식을 채택한다. TransparentBlt 함수(wingdi.h) - Win32 apps TransparentBlt 함수는 지정된 원본 디바이스 컨텍스트에서 대상 디바이스 컨텍스트로 픽셀 사각형에 해당하는 색 데이터의 비트 블록 전송을 수행합니다. learn.microsoft.com TransparentBlt를 이용하여 특정 색을 무시하는것이 가능하다. TransparentBlt을 사용하기 위해서.. 게임엔진/윈도우API 2022. 12. 24. 윈도우API)12. 모작 가속도 구현 float deltaTime = GET_SINGLE(TimeManager)->GetDeltaTime(); float wind = GET_SINGLE(UIManager)->GetWindPercent();//바람 가속도 Vector gravity = { 0,1000 };//중력 가속도 _speed += gravity*deltaTime; _speed.x += wind*deltaTime*3; _pos += _speed*deltaTime; 충돌 처리 게임엔진/윈도우API 2022. 12. 23. 윈도우API)11. 역삼각함수 역삼각함수 역삼각함수는 삼각함수의 역함수를 의미한다. 역삼각함수를 사용하는 이유는 바로 주어진 값에 따른 각도를 얻을수 있기 때문이다. 게임수학) Chapter1. 삼각함수 삼각형은 꽤나 오래전부터 연구되어온것중 하나이다. 게임에서도 이러한 삼각형의 성질을 이용해서 콘텐츠를 제작하는데, 그중에서 삼각함수에 대해 알아보려고 한다. 삼각함수 모든 삼각함수 pjnull.tistory.com 역삼각함수와 내적/외적 역삼각함수에서 각도를 구할때 내적을 이용한다면 손쉽게 cos값을 얻을수 있다. 또한 외적을 이용한다면 역삼각함수가 닿지 않는 범위까지 보정이 가능하다. 게임에서 활용 그렇다면 게임에서는 역삼각함수를 어떻게 활용할수 있을까? 이러한 식으로 x축을 기준으로 cos은 수직적인 범위를 가지고 있으며, sin.. 게임엔진/윈도우API 2022. 12. 23. 윈도우API)10. 벡터의 외적 벡터의 외적 벡터의 내적과 외적의 가장 큰 차이는 내적은 결과값이 스칼라값이라는 점이고 외적은 벡터값이라는 것이다. 2차원에서 외적을 활용하기가 다소 어렵다. 그럼에도 벡터의 외적을 활용할수 있는 방법에 대해 알아보고자 한다. 게임수학) Chapter2. 벡터 스칼라 (Scalar) ㆍ흔히 생각할 수 있는 수치. ㆍ거리의 값이 있을 때 이 값은 방향정보는 가지고 있지 않고 오로지 수치만을 나타내는것이 스칼라 값. 벡터(Vector) ㆍ벡터를 사용하면 정적인 위치 pjnull.tistory.com 2D에서의 외적 활용 외적은 2D에서 시계/반시계방향을 체크하는데 매우 유용하게 쓰인다. 이러한 방향 체크는 다소 불필요해 보이지만 범위를 체크하는데 매우 유용하다. 위의 세가지 벡터가 있다. 각각 v1과vp v.. 게임엔진/윈도우API 2022. 12. 22. 윈도우API)9. 벡터의 내적 벡터의 내적 벡터에서 내적은 공식하나로 간단하게 구해질수 있다. 하지만 내적에서 중요한것은 게임엔진에서 어떤 식으로 응용이되는지가 중요하다. 이번 포스팅에서는 그것을 중점적으로 알아보고자 한다. 게임수학) Chapter2. 벡터 스칼라 (Scalar) ㆍ흔히 생각할 수 있는 수치. ㆍ거리의 값이 있을 때 이 값은 방향정보는 가지고 있지 않고 오로지 수치만을 나타내는것이 스칼라 값. 벡터(Vector) ㆍ벡터를 사용하면 정적인 위치 pjnull.tistory.com 내적의 활용 내적은 어떤 상황에서 유용하게 응용될수 있을까? 5가지의 예시를 통해 알아보자 1.내적의 값==0일경우 내적의 값이 0일경우 cos의 각도가 90º라는것을 의미한다. 2.내적의 값>0일 경우 내적의 값이 0보다 클 경우 cos의 각.. 게임엔진/윈도우API 2022. 12. 22. 윈도우API)8. 벡터 벡터 벡터또한 예전에 포스팅한것을 참고하면 도움이 될것이다. 이번 포스팅에서도 프로젝트에서 벡터를 어떻게 이용하는지를 중점적으로 다룰 예정이다. 게임수학) Chapter2. 벡터 스칼라 (Scalar) ㆍ흔히 생각할 수 있는 수치. ㆍ거리의 값이 있을 때 이 값은 방향정보는 가지고 있지 않고 오로지 수치만을 나타내는것이 스칼라 값. 벡터(Vector) ㆍ벡터를 사용하면 정적인 위치 pjnull.tistory.com 벡터 추가하기 //Types.h struct Vector { public: Vector() {}; Vector(float _x, float _y):x(_x),y(_y) {}; Vector operator+(const Vector& other) { Vector ret; ret.x = x + ot.. 게임엔진/윈도우API 2022. 12. 18. 윈도우API)7. 삼각함수 삼각함수 삼각함수는 게임에서 굉장히 중요한 이론이다. 삼각함수에 대해서는 예전에 포스팅한것이 있으니 그것을 참고하면 도움이 될것이라 생각된다. 게임수학) Chapter1. 삼각함수 삼각형은 꽤나 오래전부터 연구되어온것중 하나이다. 게임에서도 이러한 삼각형의 성질을 이용해서 콘텐츠를 제작하는데, 그중에서 삼각함수에 대해 알아보려고 한다. 삼각함수 모든 삼각함수 pjnull.tistory.com 그렇다면 이러한 이론을 바탕으로 현재 진행하고있는 윈도우API에 어떻게 적용할수 있을까? 구현할 목표 Fps와 같은 게임에서는 총이 캐릭터에서 나오는것이 아니라 총구에서 발사된다. 현재 구현해놓은 발사체는 y방향으로만 이동하고 있지만 삼각함수를 이용한다면 원하는 방향으로 이동이 가능하게 된다. 삼각함수를 알면 이런식.. 게임엔진/윈도우API 2022. 12. 18. 윈도우API)5. 오브젝트 설계 오브젝트설계 오브젝트 상속구조의 필요성 현재까지 진행한 내용은 Scene안에서 물체를 그리고 InputManager를 물체를 움직이게 한것이였다. 하지만 게임에서는 한 씬안에 여러가지 오브젝트들이 존재하며 오브젝트가 생성될때마다 일일이 로직을 추가하는 것은 현실적으로 불가능하다. 그렇기에 오브젝트를 관리하는 오브젝트 클래스가 필요로 하게 된다. 언리얼에서는 오브젝트->엑터->폰->캐릭터와 같은 상속구조로 오브젝트를 관리하고있으며, 이와 유사한 형태의 상속구조로 오브젝트를 관리하고자 한다. 오브젝트 생성 먼저 물체들의 최상위 클래스인 오브젝트 클래스가 필요하다. 그 안에는 오브젝트 타입과 위치, 기타 정보들 또한 넣어주는것이 좋다. //Object.h enum class ObjectType { None, .. 게임엔진/윈도우API 2022. 12. 17. 윈도우API)3. Scene과 SceneManager Scene Scene의 필요성 게임은 여러가지 오브젝트가 생성되고 렌더링 된다. 그렇다면 이것들은 어떻게 구분 짓고 관리를 해야될까?일반적으로 게임은 실행과 동시에 플레이가 시작되기 보다는 시작화면이나 로비같은 곳에서 시작하여 플레이가 시작되는 경우가 많다. 이런것으로 미루어 보아 게임안에 모든 오브젝트와 기능들을 넣어두고 관리하는것은 옳지 않다고 볼수 있을것이다. 언리얼엔진의 경우 Level이라는 Scene에서 여러가지 오브젝트와 컴포넌트를 관리한다. Scene생성 Scene의 역활은 화면을 렌더링할때 화면에 있는 오브젝트나 로직을 관리하는 역할을 수행한다. 이번 프로젝트에서는 Scene과 Scene자체를 관리하는 SceneManager을 이용하여 Scene에 대해 알아보려고 한다. SceneManag.. 게임엔진/윈도우API 2022. 12. 16. 이전 1 2 다음 728x90 반응형