반응형

전체 글 282

[Unreal] ESlateVisibility

개요 ESlateVisibility Visible 화면에 보이고 마우스와의 인터랙션이 발생한다. 레이어 밖에서의 인터랙션은 통하지 않는다. Collapsed 화면에 보이지 않게 한다. 레이아웃에 속해 있다면 공간도 차지하지 않는다. Hidden 화면에 보이지 않게 한다. Collaspsed와는 다르게, 레이아웃 안에서 공간은 차지한다. HitTestInvisible 화면에 보이지만 마우스와 인터랙션은 발생하지 않는다. 하위 위젯 또한 마우스와 인터랙션이 발생하지 않도록 한다. SelfHitTestInvisible HitTestInvisible와 동일하지만, 하위 위젯에는 적용되지 않는다. 기타 Visible은 오버헤드가 크다. 인터랙션이 필요 없는 UI라면 HitTestInvisible이나 SelfHit..

[Unreal] 캐릭터와 입력 시스템

앞서 이 포스팅은 이득우의 언리얼 프로그래밍 Part1을 수강하고 작성한 내용입니다. 액터 액터는 월드에 속한 컨텐츠의 기본 단위이다. 액터는 트랜스폼을 가지고, 월드로부터 틱과 시간 서비스를 받는다. 액터는 논리적 개념이 아니다. 컴포넌트를 감싸는 포장 박스이다. 액터는 다수의 컴포넌트를 소유하고 있고 실질적인 구현은 컴포넌트에서 담당한다. 다수의 컴포넌트 중 컴포넌트를 대표하는 것을 루트 컴포넌트라고 한다. 액터는 반드시 루트 컴포넌트를 가져야하고, 루트 컴포넌트의 트랜스폼이 액터의 트랜스폼이 된다. 액터에서 컴포넌트 생성하기 컴포넌트는 언리얼 오브젝트(UObject) 이므로 UPROPERTY() 매크로를 설정해야 하고, TObjectPtr로 포인터 선언한다. CDO에서 생성한 오브젝트는 자동으로 월..

[Unreal] 메모리 관리

앞서 이 포스팅은 이득우의 언리얼 프로그래밍 Part1을 수강하고 작성한 내용입니다. C++ 언어 메모리 관리의 문제점 C++은 메모리 주소에 직접 접근하는 포인터를 사용해 오브젝트를 관리한다. 메모리 누수 : new와 delete의 짝을 맞추지 않아 힙에 메모리가 남아 있는 경우 댕글링 포인터 : 이미 해제해서 무효화가 된 오브젝트의 주소를 포인터가 가리키는 경우 와일드 포인터 : 포인터의 값이 초기화되지 않은 경우 따라서 C++ 이후의 Java나 C#과 같은 언어에서는 포인터 대신 가비지 컬렉션 시스템을 도입했다. 가비지 컬렉션 프로그램에서 더 이상 사용하지 않는 오브젝트를 자동으로 감지해 메모리를 회수한다. 동적으로 생성된 모든 오브젝트 정보를 모아두고, 사용되지 않는 메모리를 추적한다. Mark ..

[Unreal] 델리게이트

앞서 이 포스팅은 이득우의 언리얼 프로그래밍 Part1을 수강하고 작성한 내용입니다. 개요 언리얼 엔진에서 델리게이트를 사용하는 방법에 대해 서술한다. 델리게이트를 사용하면 느슨한 결합을 구현할 수 있다. 강한 결합 vs 느슨한 결합 강한 결합은 클래스들이 서로 의존성을 가지는 경우를 말한다. 앞선 예제에서는 Person이 Card 클래스를 가지고 있었다. 느슨한 결합은 추상적 설계에 의존한다. Card 클래스의 쓰임이 출입 체크라면 Person에서 Card를 직접 가지는 것이 아니라 ICheck라는 인터페이스를 가지고, Card가 ICheck 인터페이스를 상속받게 만들도록 구현한다. 이렇게 구현하면 Card 말고 다른 클래스로 출입 체크 기능을 구현해야 할 때, 그 클래스가 ICheck를 상속받게 구현..

[Unreal] 언리얼 컴포지션과 UENUM

앞서 이 포스팅은 이득우의 언리얼 프로그래밍 Part1을 수강하고 작성한 내용입니다. 개요 Is - a 관계인 상속관계만으로 설계나 유지보수하기는 어렵다. Has - a 관계인 컴포지션을 활용해 성질이 다른 두 객체에서 한 객체가 다른 객체를 소유하는 설계를 구현할 수 있다. 컴포지션 관계를 언리얼에서 구현하는 방법은 크게 2가지이다. 1. CDO에 미리 언리얼 오브젝트를 생성해 조합한다. (무조건 포함할 때) : CreateDefaultSubobject() 사용 2. CDO에 빈 포인터만 넣고 런타임에 언리얼 오브젝트를 생성해 조합한다. (선택적으로 포함할 때) : NewObject 사용 이번 강의에서는 1.을 사용해 컴포지션을 구현한다. 내가 소유한 오브젝트를 SubObject라고 하고, 나를 소유한..

[Unreal] 인터페이스

앞서 이 포스팅은 이득우의 언리얼 프로그래밍 Part1을 수강하고 작성한 내용입니다. 개요 인터페이스는 객체가 반드시 구현해야 하는 행동을 지정하는데 활용된다. 다형성을 구현하거나 디커플링을 하는데 유용하게 활용할 수 있다. 언리얼 C++ 인터페이스의 특징 인터페이스를 생성하면 두 개의 클래스가 생성된다. U로 시작하는 타입 클래스와 I로 시작하는 인터페이스 클래스가 있다. UInterface는 클래스 타입정보를 제공하고, IInterface는 실질적인 설계 및 구현을 담당한다. Java나 C#에서 인터페이스는 추상 타입으로만 선언할 수 있지만, 언리얼에서는 인터페이스도 구현이 가능하다. 언리얼 C++ 인터페이스 인터페이스 C++ 클래스를 만들면 다음과 같은 2개의 클래스가 만들어져 있다. 1. UINT..

[Unreal] 언리얼 리플렉션

앞서 이 포스팅은 이득우의 언리얼 프로그래밍 Part1을 수강하고 작성한 내용입니다. 개요 리플렉션은 프로램이 실행시간에 자기 자신을 조사하는 것이다. 시리얼라이제이션, 가비지 컬렉션, 네트워크 리플리케이션 등이 리플렉션을 토대로 만들어졌다. 리플렉션 시스템에 보이도록 했으면 하는 유형이나 프로퍼티에 주석을 달아주면, Unreal Header Tool이 프로젝트 컴파일 시에 해당 정보를 수집해 소스 코드를 생성해준다. 예시로, 멤버 변수에는 UPROPERTY(), 멤버 함수에는 UFUNCTION()라는 매크로를 사용하면 UHT가 이것들을 확인한 뒤 Intermediate 폴더 내부에 필요한 코드를 생성해준다. UPROPERTY를 선언해주면 다음과 같은 기능을 갖는다. 1. 특정 속성들의 기본값을 설정해주..

[백준 2108] 통계학 C++

문제 백준 2108 통계학 C++ 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 풀이 예전에 재채점으로 틀렸었는데 여유될 때 다시 풀어보았다. 먼저 수를 입력받은 뒤 오름차순 정렬한다. 1. 산술평균 : 루프를 돌면서 계산하면 된다. 반올림 주의 2. 중앙값 : 원소 개수가 홀수일 때와 짝수일 때를 나눠서 계산한다. 3. 최빈값 : 이게 제일 귀찮았는데, 다음과 같은 과정을 거친다. 3-1. 먼저 가장 자주 등장한 횟수를 0으로 초기화해 준다. 3-2. 루프를 돌면서 현재값의 등장 횟수를 1 증가시킨다. 3-3-1. 현재..

알고리즘/백준 2023.12.23

[Unreal] 언리얼 오브젝트

앞서 이 포스팅은 이득우의 언리얼 프로그래밍 Part1을 수강하고 작성한 내용입니다. 개요 C++과 C#이나 JAVA와 같은 하이레벨 언어를 비교하면 다음과 같다. C++의 특징 메모리를 직접 제어 캐시 활용 극대화 저수준 API 호출 복사 작업 최소화 하이레벨 언어의 특징 유지보수성 향상 크래시로부터 보호 자동 메모리 관리 고질적 실수 예방 언리얼 오브젝트 언리얼 C++은 C++의 특징을 가지면서도 하이레벨 언어의 장점을 흡수하고자 했다. 이런 내부적인 기능을 자동으로 만들어질 수 있도록 UClASS() 매크로를 사용해줘야 한다. UCLASS()에는 클래스를 정의하는 프로퍼티와 함수 세트가 들어있다. 언리얼에서는 일반 C++ 오브젝트와 언리얼 오브젝트 모두 사용 가능하다. 일반 C++ 오브로젝트에는 접..

[홍정모의 그래픽스 새싹코스 Part2] 삼각형 레스터화

앞서 이 포스팅은 홍정모의 그래픽스 Part2를 수강하고 작성한 내용입니다. 강의의 세부 코드는 첨부하지 않고, 결과와 이론 위주로 포스팅했습니다. 개요 까맣게 칠해져있는 화면이 있다. 이전에 레이트레이싱을 응용해서 그렸던 (https://gamedoridori.tistory.com/293) 삼각형을 이번엔 레스터화를 응용해 그려볼 것이다. 이전에는 시점에서 모든 픽셀 방향으로 Ray를 쏴 충돌한 오브젝트를 그려줬다. 하지만 이런 방법은 모든 픽셀을 순회해야 하고, 충돌한 오브젝트마다 거리를 비교해줘야 한다는 점에서 느리다. 따라서 이번엔 레스터화를 사용한다. 레스터화는 반대로 물체의 vertex에서 시점방향으로 Ray를 쏴준다. 그리고 스크린에 충돌한 지점을 기준으로 삼각형을 그리고, 각 픽셀이 삼각형..

CS/그래픽스 2023.12.21
반응형