일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- reference
- resource management class
- effective stl
- Smart Pointer
- Effective c++
- 스마트 포인터
- lua
- more effective c++
- operator new
- 영화 리뷰
- 함수 객체
- 상속
- 게임
- 메타테이블
- UE4
- exception
- c++
- 오블완
- 참조자
- 비교 함수 객체
- 티스토리챌린지
- implicit conversion
- 다형성
- 반복자
- 암시적 변환
- 예외
- 루아
- virtual function
- 영화
- 언리얼
- Today
- Total
목록UE4 (33)
스토리텔링 개발자
개요메모리 관리는 C++의 난점 중 하나입니다. 스택에 할당된 메모리는 범위만 잘 지켜주면 대부분은 괜찮지만,힙에 할당한 메모리는 물가에 내놓은 갓난 아이처럼 끝까지 잘 지켜봐 줘야 합니다.자칫 잘못하면 그대로 소중한 메모리의 누수로까지 이어집니다. 좀 더 편하게 메모리 관리를 할 수 있는 방법은 없을까요? 그런 고민에서 생겨난 것이 이름처럼 스마트한 스마트 포인터입니다. 이 스마트 포인터는, 이젠 준 필수 기능이 되었습니다.이전까진 시험적으로 사용해오다가, 모던 C++부터는 정식 라이브러리에 완전히 편입되기까지 했죠. 또한 언리얼 역시 이 C++ 라이브러리가 제공하는 스마트 포인터와 거의 동일한 것을 제공하고 있습니다. 오늘 이야기해 볼 것이 이 언리얼의 스마트 포인터 입니다. 스마트 포인터의 종류..
개요 데이터 혹은 에셋을 로드할 때 동기나 비동기 같은 단어가 튀어나오곤 합니다. 동기와 비동기. 단어만으로는 딱 느낌이 오지 않는데요. 정확하게 어떻게 구분되는지, 또 어떻게 동작하는지 알아보도록 하겠습니다. 동기 / 비동기(synchronous / asynchronous) 우선 각각의 특징을 정리해 보도록 하겠습니다. 동기 메모리가 명령어를 처리하는 흐름, 즉 선형적인 처리를 의미합니다. 선형적이란 것도 조금 설명이 필요하겠는데요. 명령을 일렬로 쭉 줄세워서 차례로 처리해나가는 걸 선형적이라고 합니다. 장점은 순서대로 처리해 나가므로 직관적이라는 점입니다.(버그 수정에는 직관적임이 참 중요합니다.) 단점은 자원 소모가 큰 작업이라면 프리징을 수반할 수 있다는 점입니다. 비동기 메모리의 흐름과 동떨어진..
개요 언리얼에서 에셋을 참조하는 방법은 두 가지가 있습니다. 참조하는 방법이라고 하니까 딱딱한 감이 없잖아 있는데요. 쉽게 말해서 액터가 특정 에셋을 가지고 있는 상황입니다. 근데 가지고 있으면 가지고 있는거지 강참조, 약참조라니요. 대체 무슨 차이일까요. 일반적인 참조(강참조) 우선 일반적인 경우를 살펴보도록 하겠습니다. 보통 에셋을 참조, 즉 소유하기 위해서는 보통 이렇게 하겠죠. 1. UPROPERTY() 멤버변수로 선언합니다. 2-1. C++에서 LoadObject 함수를 사용하여 직접 에셋을 불러와 사용하거나 2-2. 엔진에서 에셋을 직접 선택하여 사용합니다. 이런 일반적인 방식이 바로 강참조입니다. 즉 에셋을 지정하는 시점에 에셋이 메모리에 올라가는 방식을 강참조라고 합니다. 일반적인 참조의 ..
개요 컴포넌트는 액터에 붙여서 사용하는 UObject입니다. 액터에 붙여서 사용한다는 점만 특이한, 그냥 UObject라고 봐도 무방할 듯 하네요. 하지만 바로 그 붙인다는 점이 무척 유용합니다. 사실 액터 클래스 내부(BP 클래스도 포함이죠)에 특정 UObject를 일일이 정의하기란 상당히 번거로운 일이니까요. 컴포넌트는 그냥 자체적으로 정의하고, 만들고, 붙이기만 하면 그 객체 전용이라는 걸 강조할 수 있죠. 굳이 현실세계로 비유하자면 이렇게 비유할 수 있을까요. 자동차에 열선을 추가 하려고 하는 상황이라면, 자동차 액터에 열선 컴포넌트를 붙이는 셈이라고 할 수 있죠. 다양한 컴포넌트 유형 컴포넌트는 객체에 붙어서 그 객체의 기능 자체로 사용될 수 있다는 점에 착안해서, 이미 UActorCompone..
개요 언리얼 엔진은 물리 엔진을 포함하고 있습니다. 즉, 오브젝트들끼리의 상호작용을 엔진 내에서 처리할 수 있습니다. 상호작용 중 가장 대표적인 것으로는 충돌을 꼽을 수 있을텐데요. 콜리전이란 바로 충돌을 처리하기 위한 기능입니다. 트레이스 또한 바로 그 충돌을 사용하여 연산합니다. 즉 내부적으로 콜리전 기능을 사용합니다. 콜리전 프리셋 콜리전은 각 오브젝트 혹은 트레이스 타입과의 상호 연관관계를 따져 충돌을 처리합니다. 엔진에서 오브젝트를 선택한 후 디테일 창을 확인하면 콜리전 프리셋이라는 란을 발견할 수 있는데요. 바로 이것이 그 상호 연관관계를 정의하는 부분입니다. 즉, 콜리전 프리셋이란 바로 해당 오브젝트가 다른 오브젝트, 트레이스와 어떤 상호작용을 할건지 선언한 것이라고 할 수 있습니다. 각 요..
트레이스 예를 들어 캐릭터 정면에 위치한 오브젝트를 감지해야 한다고 칩시다. 어떤 방식으로 감지해야 할까요. 일직선을 체크해보면 될 것 같긴 한데. 어떤 방식으로 해야 할까요? 네. 바로 트레이스죠. 트레이스란 특정 점을 기준으로 일직선으로 광선을 쏴서 오브젝트를 검출하는 기능입니다. 유니티에서는 Raycast라는 이름으로 부릅니다. 사용 그렇다면 어떻게 트레이스를 사용할 수 있을까요. 언리얼에는 이를 쉽게 사용할 수 있도록 다양한 종류의 함수가 준비되어 있습니다. 일반적으로는 UWorld 객체의 LineTrace 함수 세트들을 사용하면 됩니다. 이름대로 일직선상을 트레이스하는 기능입니다. UWorld::LineTraceSingleByChannel() UWorld::LineTraceMultiByChann..
개요 IK는 일반적으로 특정 지형이나 물체에 반응하는 애니메이션에 사용합니다. 예컨대 캐릭터의 발이 계단 아래에 파묻히지 않도록 하려면 써야겠죠. 그렇다면 FK는 뭘까요? IK와는 어떤 차이가 있을까요? 아래에서 좀 더 자세히 알아보도록 하겠습니다. FK / IK 순운동학 (Forward Kinematics, FK) 조인트나 본에 회전을 직접 적용하는 방식을 순운동학(Forward Kinematics, FK)라고 합니다. 특정 조인트에 특정 회전값을 정확하게 정의내리는 방식 이라고 하면 조금 어렵게 들리는데요. 간단하게 말하자면 일반적인 애니메이션에 적용되는 방식을 말합니다. 위의 그림을 참고하면 좀 더 명확하죠. 왼쪽 본과 오른쪽 본의 각도를 직접 지정해 주었지요. 이렇게 직접적인 방식으로 정확히 회전..
직렬화 프로그램은 메모리에 올라가게 됩니다. 그러니 프로그램 내의 객체들도 메모리에 올라가 있을 것입니다. 그렇다면 그 객체들은 메모리에 어떤 형태로 올라가 있을까요? . . . 답은 알 수 없다 입니다. 컴퓨터가 메모리를 관리하면서 배정하므로 하나의 객체라도 연속적으로 모여있다고 단정지을 순 없습니다. 즉, 운 좋게 한 곳에 모두 모여 있는 경우도 있을테지만, 반대로 여기 저기 심하게 파편화 되어 있을 수도 있다는 것이죠. 이 객체의 데이터를 전송 / 저장하려 한다고 가정해 보죠. 그러기 위해선 우선 메모리의 어디에 어떻게 위치할지 모를 객체의 데이터들을 모아야 할 것입니다. 사실 직렬화란 그것이 전부입니다. 데이터를 모으고 전송하기 위해 패키징하는 작업을 뜻합니다. 현재 객체의 상태를 온전히 동일한 ..