< '분류 전체보기' 카테고리의 글 목록 (11 Page)

전체글 179

[이득우의 언리얼 프로그래밍 Part1 필기] 5-6. 언리얼 엔진 리플렉션 시스템

언리얼 엔진 게임 프레임워크는 리플렉션 시스템을 기반으로 짜여져 있기 때문에 이해하는 것이 중요하다. 리플렉션 시스템이란?프로그램 실행 시간에 자기 자신을 조사하는 것.다시 말하자면 프로그램이 실행 중에 동적으로 프로그램 내의 클래스의 데이터들에 접근하고 조작하는 것을 지원하는 시스템이다.C++ 에서는 이것을 지원하지 않아서 언리얼에서 자체적으로 만들었다. 우리가 컴파일 전 작성해놓은 매크로를 헤더 툴이 분석해서 리플리케이션을 구성하는 소스코드를 만들어준다. UPROPERTY() , UFUNCTION() 과 같이 매크로를 적어놓고 선언을 해주면 엔진의 가비지 컬렉터가 관리 해주는데 그렇지 않을 떄는 직접 프로그래머가 관리 해주면 된다. UField->UStruct   ->UClass이렇게 상속 받고 US..

[이득우의 언리얼 프로그래밍 Part1 필기] 4. 언리얼 오브젝트 기초

성능을 위해서 C++ 을 버릴 수 없기 때문에 C++의 매크로 기능을 활용해서 모던, 객체지향 언어들이 가지고 있는 기능을 언리얼 엔진 자체적으로 구현했다.일반 C++ 오브젝트는 접두사 F 언리얼 오브젝트는 접두사 U     // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h"#include "UObject/NoExportTypes.h"#include "MyObject.generated.h"/** * */UCLASS()class UNREALOBJECT_API UMyObject : public UObject{ GENERATED_BODY() }; #incl..

[이득우의 언리얼 프로그래밍 Part1 필기] 3.언리얼C++ 기본타입과 문자열

int 사용 시에는 int32 주로 사용데이터 통신 등 바이너리 데이터를 주고 받을 때에는 uint8 사용 bool 타입 크기가 명확하지 않음헤더 파일에는 불리언 데이터 타입을 사용하지 않고 바이트 정보를 사용함  - CPP 파일에서는 bool 자유롭게 사용해도 무방 캐릭터 인코딩언리얼이 문자열을 따로 지정하는 이유 - ANSI, ASCII, EUC-KR, CP949 , UTF-8, UTF-16 등의 여러 문자열들이 아직도 사용되고 있다. 언리얼엔진에서는 TCHAR 라는 고유한 문자열 처리 방식을 제공하고 있어 singlebyte, multibyte, Unicode 세 가지 타입을 신경 쓸 필요 없이 TCHAR 하나만 가지고 문자열을 처리해주면 된다. UTF-8 - 필요할 때 가변으로 집어넣음 (메모리 ..

[이득우의 언리얼 프로그래밍 Part1 필기] 2. 언리얼 C++ 코딩규칙

코딩 표준프로그래밍을 작성하는데 지켜야 하는 프로그래밍 이름 규칙,작성 방법 등을 지정한 가이드라인 절대적으로 좋은 코딩 표준이라는 건 없다. 언리얼엔진은 자체적으로 코딩 표준을 정해 놓았음. 따라서 기존 C++ 코딩 방법을 버리고 언리얼 엔진 코딩 표준을 따라야 함  하나의 프로젝트는 한 사람이 만드는 것처럼 코딩 해야 함. -> 유지 보수 비용 감소  파스칼 케이싱 - 첫 글자를 대문자를 사용해 명명   카멜 케이싱 - 첫 합성어는 소문자로 나머지는 대문자로 스네이크 케이싱 - 합성어 사이에 언더바(_) 를 사용해 명명 UnrealEngine unrealEngine unreal_engine 언리얼 엔진은 파스칼 케이싱 사용 언리얼 오브젝트를 상속받는 클래스는 U를 접두사로 붙인다. ex) UGameI..

[이득우의 언리얼 프로그래밍 Part1 필기] 1. 헬로 언리얼 (가상함수 호출, 로그)

부모 클래스가 제공하는 가상 함수를 override 하였을 때는 부모 클래스의 함수 또한 실행 해주어야 한다 -전체 엔진 플로우가 동작할 수 있게 만들어 둔 것이기 때문 (무시하면 안 된다)  Super::Init();   로그를 남기는 방법UE_LOG 사용 ex ) UE_LOG(LogTemp, Log, TEXT("%s"),TEXT("Hello Unreal!")); TEXT 매크로로 감싸주어야 2byte 문자열을 쓸 때 문제가 안 생긴다.

[C++/백준 4948번] 베르트랑 공준

https://www.acmicpc.net/problem/4948 4948번: 베르트랑 공준 베르트랑 공준은 임의의 자연수 n에 대하여, n보다 크고, 2n보다 작거나 같은 소수는 적어도 하나 존재한다는 내용을 담고 있다. 이 명제는 조제프 베르트랑이 1845년에 추측했고, 파프누티 체비쇼 www.acmicpc.net 해결 방법 소수 판별법으로 N에서 2N까지의 범위의 수를 전부 소수 판별을 하면 시간 초과가 일어난다. 에라토스테네스의 체를 이용해서 미리 선언되어있는 배열에 소수들을 판별해 놓아서 소수의 개수만 세주면 해결된다. 에라토스테네스의 체를 이용하는 방법은 루트 N < N 범위까지만의 본인을 제외한 배수들을 전부 지워주는 것이다. 2를 제외한 2의 배수 삭제 3을 제외한 3의 배수 삭제 4는 2..

[C++/백준 4134번] 다음 소수

https://www.acmicpc.net/problem/4134 4134번: 다음 소수 첫째 줄에 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 한 줄로 이루어져 있고, 정수 n이 주어진다. www.acmicpc.net 해결 방법 유명한 소수 판별법을 사용했다. 에라토스테네스의 체를 이용해 sqrt(N) 까지만 나누어 보고 소수인지 아닌지 판별할 수 있었다. 따라서 시간 복잡도도 sqrt(N)이다. 시도해보진 않았지만 범위를 long long 이 아닌 unsigned int 로 하여도 무방할 듯 하다. IsPrime 함수에서 소수를 판별하고, 소수가 아니면 값을 증가시켜 다시 검사해 소수를 찾는다. ※ for문의 i값 범위는 당연히 sqrt(N) 이하지만 양변 제곱을 통해 조건문은 i * i <..

[C++/백준 2485번] 가로수

https://www.acmicpc.net/problem/2485 2485번: 가로수 첫째 줄에는 이미 심어져 있는 가로수의 수를 나타내는 하나의 정수 N이 주어진다(3 ≤ N ≤ 100,000). 둘째 줄부터 N개의 줄에는 각 줄마다 심어져 있는 가로수의 위치가 양의 정수로 주어지며, 가 www.acmicpc.net 해결 방법 확실히 생각을 오래 하니까 쉬워졌다. 간격을 전부 구해서 배열에 저장한 후 최대공약수를 구해주고 간격을 최대공약수로 나눈 뒤 -1 만큼 해준 숫자를 모두 더해주면 된다. ex) 1 3 7 13 2 4 6 // 간격 1 2 3 // 최대공약수 2로 나눔 0 1 2 // -1 해준다. 답 : 3 #include #include using namespace std; long long ..

[C++/ 백준 1735번] 분수 합

https://www.acmicpc.net/problem/1735 1735번: 분수 합 첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다. www.acmicpc.net 해결 방법 유클리드 호제법을 사용했다. 분모끼리 곱해서 우선 약분이 가능하거나 가능하지 않은 한 개의 분수로 만든다. 구해진 분자와 분모를 이용해 유클리드 호제법을 적용하면 최대공약수를 구할 수 있다.(당연히 1일 수 있다) 최대공약수로 분자와 분모를 나누어 주면 끝. 정말 간단했는데... 새삼 알고리즘 구상의 중요성을 느낀다. 턱을 괴고 생각하는 시간을 더 늘려야겠다. #include #include using namespace std; long ..