> Study

플러그인을 사용해서 메시를 저장하고 불러오는 것을 구현해보자 먼저 Static Mesh를 클릭했을 때 등장하는 디테일창에Mesh에 관련된 버튼을 만들어본다       월드에 카메라가 있다C++클래스로 Actor 하나를 생성해주고 블루프린트를 생성하여 카메라 메시를 입혀주었다   액터를 클릭하면 디테일창이 뜬다이 디테일창에 나만의 카테고리를 추가하고필요한 기능들을 프로퍼티에 추가해보는 작업을 할 예정이다            먼저 플러그인 모듈 쪽에 Property Editor를 등록해준다 IDetailCustomization을 상속받는 클래스 FStaticMesh_Detail에IDetailCategoryBuilder& mesh = DetailBuilder.EditCategory("Mesh");  Mesh라..
언리얼에는 3가지 코멘드창 있다에디터에서 작동하는 명령창, 런타임에 작동하는 명령창, 두가지 모두 사용 가능한 명령창이 있다 기본적으로 써왔던 코멘드는  런타임 중에 라이팅을 다시 빌드해야합니다 글자를 안보이게 만드는DisableAllScreenMessages가 있다 이처럼 내가 필요한 기능을 명령으로 만들 수 있다  맵에서 이곳저곳 돌아다니며 테스트할 때 플레이어를 일일이 옮기기 귀찮으니좌표 입력 시 그 곳으로 자동으로 이동하도록 명령을 만들었다 콘솔창을 등록하는 함수들은 IConsoleManager안에 있다(저번에 디버깅 메뉴에 등록하는거는 IGameplayDebugger에 있었다)IConsoleManager는 싱글톤으로 만들어져 있어서 Get()으로 함수를 불러온다 저번과 동일하게 파라미터에 델리게..
언리얼을 사용하면서 내가 원하는 기능이 없을 때 플러그인을 제작하여 편리하게 사용할 수 있다 언리얼에서 모듈의 개념은 라이브러리와 같다 플러그인은 모듈을 제작하는 것이다 라이브러리에는 dll파일과 lib파일이 있다 dll (dynamic linked library) 프로그램과 다른 메모리 공간을 사용한다 -> 필요할 때 부르고 필요없을 때 해제할 수 있다 lib (static library) 프로그램과 같은 메모리 공간을 사용한다 -> 해당 프로그램이 로드될 때 함께 로드된다 -> 퍼포먼스를 위해서 또는 프로그램이 완전히 붙어있어야 하는 경우에 사용한다 플러그인은 언리얼 상단 탭에 편집 -> 플러그인에서 볼 수 있다 새 플러그인을 누르면 다양한 플러그인을 제작할 수 있다 시작점이 있는 클래스의 경우 IM..
EQS 란? 언리얼 엔진의 EQS는 Environment Query System의 약자로 Behavior Tree내에서 다양한 테스트를 통해 환경을 조사하고 테스트 결과를 바탕으로 어떻게 진행할 것인지 결정하는 시스템을 말한다 Querier는 질의자로, 해당 EQS를 실행하게 될 객체를 의미한다 주로 적 AI에게 Behavior Tree를 주고 그 안에서 Run EQS 를 하게 되니 Querier는 적AI가 되게 된다 Debug EQS가 잘 돌아가고 있는지 디버깅 하려면 실행 후 플레이어에 빙의한 뒤 ' (단따옴표) 키를 눌러 디버깅 모드로 들어가고 키패드에 3번을 누르면 EQS디버깅 모드가 된다 디버깅 모드 우측 상단에 Debug Actor가 뜨는데 내가 확인하고 싶은 AI가 Deubg Actor로 잘..
디자인 패턴이란, 개발자들이 어떠한 상황에서 어떠한 방식으로 설계를 하면 좋은지를 정리해놓은 것이다 디자인패턴은 크게 생성 / 구조 / 행위 로 나누어진다 Coupling 양쪽 코드 중에서 한 쪽이 없으면 코드를 이해할 수 없을 때 둘이 커플링되어있다고 본다 양쪽 코드 중에서 한쪽을 삭제했을 때 다른 한쪽에 문제가 발생한다면 둘이 커플링 되어있다고 본다 DeCoupling 커플링을 해제하는 것 커플링이 적은 코드일수록 변경이 나머지 게임 코드에 미치는 영향이 적다 생성 Builder Prototype Factory Method Abstract Factory Singleton 구조 Bridge Decorator Facade Flyweight Proxy Composite Adapter 행위 Mediator ..
파일에서 Texture를 불러올 수 있다면 이제 HeightMap을 불러와서 지형의 높낮이를 만들고, 지형에 음영을 넣어보자 먼저 HeightMap의 기본적인 원리는 이러하다 HeightMap은 단색으로 이루어져있고 이런 느낌으로 밝은 부분과 어두운 부분이 섞여있는 이미지 형태로 되어있다 이 이미지에서 밝은 부분은 지형에서 높은 곳, 어두운 부분은 지형에서 낮은 곳을 의미한다 결과적으로 이 HeightMap의 색을 가져와서 높이로 사용하는 것이다 vector heights; heightMap->ReadPixel(DXGI_FORMAT_R8G8B8A8_UNORM, &heights); width = heightMap->GetWidth(); height = heightMap->GetHeight(); vertex..
Texture 파일을 불러와서 Vertex로 만든 사각형에 채워넣어보자 먼저 UV좌표계를 알아야한다 UV좌표계는 2D로, 0~1까지 정규화된 값으로 uv 비율을 표현한다 좌상단이 (0, 0)인것이 특징이며 Vector2로 나타낸다 Texture 파일을 불러오는 첫 번째 방법 ID3D11ShaderResourceView 사용하기 ID3D11ShaderResourceView* srv; ID3D11ShaderResourceView는 셰이더에 Texture을 넘겨주는 역할을 한다 D3DX11CreateShaderResourceViewFromFile ( D3D::GetDevice(), L"../../_Textures/Box.png", NULL, NULL, &srv, NULL ); 셰이더 Texture2D Map;..
지금까지는 공간의 x, y좌표만 활용하여 2D공간처럼 만든 뒤 다양한 도형들을 띄워보는 작업을 했다 이제는 그 도형을 아주 많이 만들어서 Grid를 만들고, z좌표까지 활용하여 기본이 되는 바닥을 Grid 모양으로 짜고 카메라를 만들어 움직여보자 Gird - Wireframe 먼저 이전에도 했던 Wireframe Mode로 한 칸을 만들어보자 Vertex 4개를 잡아주고, Index는 6개를 잡아준 뒤 삼각형 두개를 그리기 순서에 맞춰 그려주면 된다 indices[0] = 0; indices[1] = 1; indices[2] = 2; indices[3] = 2; indices[4] = 1; indices[5] = 3; 그럼 다음으로 이 한 칸을 3 * 3으로 만들어보자 총 9개의 작은 사각형, 18개의 ..
렌더링 파이프라인의 VS 단계에서는 World, View, Projection이 이루어진다 4x4 행렬로 이루어져있으며 D3DXMatrixIdentity(&world); Identity를 통해 정방행렬로 초기화된다 World 이전에 정점을 옮기는 방법으로 GetDC() -> UpdateSubresource() 함수를 사용했다 이 함수는 사실 빠르지 않은 함수라 사용하지 않고 World를 옮기는 방법을 사용한다 World를 옮기는 것이 정점을 하나하나 움직이는 것보다 훨씬 빠르고 관리도 편하다 여기서 사각형이 Local, 사각형을 담고있는 통이 World를 나타낸다 World를 Transform(이동), Scale(크기), Rotation(회전) 하면 World안의 Local이 전부 동시에 움직인다 //x..
연Gennie
'> Study' 카테고리의 글 목록