DB로 MySQL을 잠깐 사용해봤지만 간단한 명령어를 사용해보는 정도에 그쳐서 기획서에 바로 적용하긴 힘들어서 이해하고 가기 위해 작성했습니다. 필드, 레코드 개념을 모여 테이블이 됩니다. 이곳에 정보는 일관성 있어야하며 뜬금없이 들어가면 좋지 않은 테이블의 형태입니다. 위와 같이 테이블이 모이면 DB가 됩니다. 테이터의 양에 따라 DB 또한 나눠 질 수도 있습니다. DB에서 데이터를 획득하거나 집어넣는 일을 쿼리한다고 표현합니다. 그리고 RDB에서 쿼리하기 위한 언어를 SQL이라고 합니다. 각 레코드는 PK(기본키)를 가져야합니다. PK는 각 레코드를 구별할 수 있는 유니크한 값이며 절대 중독되어서는 안되는 값입니다. 관계 설명 관계는 위 영상에 예시를 보면 이해가 쉽습니다. 테이블 간에 관계를 만들땐..
지식의 저주 실제로 레벨 디자이너가 처음 맵을 만들면 난이도가 밸런스가 맞지 않는데 이유는 계속된 맵 테스트를 통해서 게임에 익숙해지게 되고 이미 경험자인 상태에서 게임을 플레이하고 밸런스를 맞추다 보니 결국 처음하는 플레이어를 이해하지 못한채로 만들어지게 됩니다. 그렇게 플레이를 실제로 시켜보고 설문 조사를해서 해결하게 됩니다. 플레이 테스트 하지만 설문 조사로는 모든 정보를 얻기도 힘들고 참조하기 힘든 부분도 있습니다. 질문을 인식하고 대답을 하게되면 자연스럽게 나오기 힘들어서 그런것 같습니다 그래서 플레이 테스트를 아무런 정보를 주지 않고 진행합니다. 그렇게 테스트를 관찰하게 됩니다. 테스트 관찰하는 방법은 아무런 조언 개입없이 진행하며 모니터링 혹은 뒤에서 보는 형식으로 진행한다고합니다. 손을 어..
참고 자료 레벨 디자인 튜토리얼 강연 레벨 디자인의 체계화가 잡힌건 하프라이프 2라고 합니다. 더미맵을 제작하고 아트 완성이 되어 이 과정이 하프라이프 2때 확립이 됩니다. 레벨디자이너란 레벨(맵)을 만드는 사람입니다. 게임 기획자의 세부 직군이며 아트팀에 속해 있을 수도 있고 기획팀에 속해 있을수도 있습니다. 모든 기획자는 테스트 -> 피드백 -> 피드백 적용 -> 테스트 과정을 반복한다. 시스템과 환경을 아울러 게임플레이를 만든다. 시스템 - 캐릭터, 몬스터, 아이템 같은 요소 환경은 - 맵의 환경 요소 이 두가지를 아울러 게임플레이를 만드는 일이라고 생각합니다. 게임플레이란 규격을 통한 플레이 흐름과 의미있는 선택이다. 규격이 먼저 섭립이 되고 플레이의 흐름이 나오고 의미있는 선택 요소가 있어야합니..
밸런스(Balance) 정의 - 게임을 매커니즘이나 수치적으로 재미있게 만드는 역할 밸런싱은 전체적인걸 아울러하는 말이며 모든 기획자들이 관여하는것 밸런스 기획자 한줄 요약 - 게임의 수치적인 밸런스를 잡는 역할을 하며 시스템이나 콘텐츠 디자이너가 밸런싱을 하기 좋은 환경을 만들어주는 사람 (데이터 베이스) 엑셀, VBA를 사용하며 추가적으로 VSTO, SQL까지 사용 가능하다. 시뮬레이션 -> 데이터 적용 (게임 서비스 중일땐 유저피드백과 데이터 통계도 참고) -> 테스트 -> 피드백 위 과정을 반복하며 또한 내부에서도 다른 기획자들에게도 피드백도 받습니다. 하지만 완벽한 밸런스란 시뮬레이션을 통해서 만들어지더라도 상황에 따라 밸런스가 무너질 수 있습니다. 결국 완벽한 밸런스보단 좋은 밸런스를 유지하는..
Unreal QuickStart를 만들어볼 예정입니다. Actor - 레벨에 배칠 될 수 있는 오브젝트 C++ 클래스 생성 후 Actor 클래스로 이름은 FloatingActor로 생성합니다. FVector - 언리얼내에서 위치와 속도를 다루기 위한 타입 헤더 파일엔 Tick에서 사용할 float RunningTime;을 선언해줍니다. 그리고 FloatingActor.cpp에 위아래로 움직이게 하도록합니다. void AFloatingActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); FVector NewLocation = GetActorLocation(); float DeltaHeight = (FMath::Sin(RunningTime + DeltaTime) ..
언리얼에서 오브젝트가 추가 될때 호출 되는 함수는 PostInitProperties() 프로퍼티가 수정될때 호출되는 함수는 PostEditChangeProperties() 위 두함수는 AMyActor의 부모클래스인 AActor에서 상속 받은 함수이기때문에 부모클래스의 함수를 자식클래스에서 덮어쓴다는 의미로 virtual override 키워드를 함께 사용해줘야합니다. 컨트롤 + Dot(.)을 누를 시 cpp에 함수를 정의해줍니다. Super::PostInitProperties() Super 클래스는 클래스가 상속받은 부모 클래스에 있는 기본 프로퍼티나 함수를 가져오는데 사용되는 키워드입니다. 이런작업을 해주는 이유는 전에 부터 하는 작업을 다시하도록 만든것입니다. 함수 또한 블루프린터에서 볼 수 있도록 ..
UPROPERTY() 매크로 UPROPERTY() int32 IntVar; 이렇게 변수의 기본형으로 사용합니다. UPROPERTY 매크로의 역할은 프로퍼티가 있음을 알리고 연결되었을때 어떻게 동작할지 지정하기 위한 것입니다. 그리고 보통 short , int , long을 알고 있는데 이런 타입은 플랫폼마다 길이가 달라질 수 있기 때문에 언리얼엔진에서는 길이가 고정되있는 타입으로 int8, int16, int32, int64 int 뒤 숫자는 정수를 표현하는데 몇개의 비트를 사용할것인지를 의미합니다. int8 - 127 ~ -128, int16 - 32,767 ~ -32,768 int32 - 214,648,647 ~ -214,648,648 int64 - 9,223,372,036,854,775,807 ~ ..
입문 Unreal 4 강의를 따라 작성됐습니다. 클래스와 이름이름과 같은 이름을 가진 생성자 Awake This 객체가 생성될때 호출되는 함수이며 주로 생성된 액터의 변수의 기본값을 설정해주는데 사용됩니다. BeginPlay 함수 This 객체가 월드에 스폰되었을때 한번 실행되는 함수로 게임 플레이어 로직을 초기화하는데 사용 Tick 함수 매 프레임마다 호출되는 함수, Tick 함수에 DeltTime 매개 변수는 전에 호출된 이후로 얼마나 시간이 경과한 뒤에 다시 Tick가 호출되었는지에 대한 시간을 전달받을 수 있습니다. 주로 게임의 로직을 구현하는데 사용됩니다. 하지만 매 프레임마다 호출되는 Tick 함수가 불필요한 경우 지워 포퍼먼스를 상승시킬 수 있습니다. 방법은 헤더 파일과 소스 파일에서 Tic..
7강입니다 constructor 01 생성자와 소멸자에 대해 설명합니다. sturct 를 클래스로 변경했습니다. class로 변환 시 안에 모든 데이터 멤버들을 public으로 전환해줘야합니다. 이렇게 변환 시 바꾸기 전 sturct와 유사하게 변환됩니다. #include class KPeople { public: int age; // 데이터 멤버(date member) char name[12]; void PrintPeople() // 멤버 함수 (member function) { printf("%s : %i\r\n", name, age); } void SetAge(int age_) { age = age_; } void SetName(const char* name_) { strcpy_s(name, nam..
C++ 강좌를 보면서 배운걸 정리합니다. 유니티 포트폴리오로는 C++ 회사에 지원하기 힘든 것 같아 언리얼 엔진4을 만져보기 위해 공부하는 중입니다. 포트폴리오로 만들기 위해서 어떤 방향으로 해야할지는 C++ 공부 후 검토해볼 생각입니다. 참고 강좌 : C++ struct 강좌는 총 3강입니다. 사용할 구조체 형태입니다. struct People // type definition { int age; // member variable char name[10]; }/*a*/; People 부분은 태그네임이라고 합니다. struct People이라는 타입으로 정의된 동시에 a라는 변수로 정의된 상태입니다. 구조체는 타입도 정의할 뿐만 아니라 변수도 정의할 수 있는 특별한 구조를 가지고 있습니다. 그리고 구조체..