국가 보훈부 공식 '보보' 프로필 적용완료 쉽게 읽는 백범일지 - '내가 원하는 우리나라' 필사완료 쉽게 읽는 백범일지 - '민족국가' 필사완료 판뒤집기 승리 (야호!) - 한컴타자를 통해 재미있게 참여하면서 국가보훈의 의미를 다시 한번 생각해 볼 수 있어 뜻 깊었습니다. 특히 백범 김구 선생님의 '내가 원하는 우리나라' 와 민족국가' 를 직접 필사하면서 나라와 민족을 위해 끝까지 최선을 다 하셨던 선생님의 마음을 되새겨볼 수 있어 감명깊었고, 한 글자 한 글자 따라 쓰다 보니 독립을 위해 노력하셨던 분들의 희생과 감사함을 더욱 깊이 느낄 수 있었습니다. 이번 이벤트를 통해 우리의 역사를 다시 돌아보고, 그분들의 뜻을 기억할 수 있는 좋은 시간이었습니다.
앞서 구조체 배열을 배웠을 때 만약 게임 중에 캐릭터가 추가되거나 삭제되면 고정된 배열 크기는 어떻게 동작하는지 의문이 들었을 수도 있다. 컴퓨터가 우리 프로그램에 메모리를 빌려주는 방식은 크게 두 가지가 있다.1. 정적 할당(Static Allocation): 고정된 메모리 크기 할당-> 우리가 지금까지 하던 방식이다. int score; 혹은 char role[20]; 처럼 코드를 짤 때 미리 크기를 정해두는 것이다.하지만 공간을 설정할 때 사용을 얼마 하지 못하면 메모리가 낭비되고, 설정한 크기보다 메모리를 많이 사용해야 하면 메모리가 부족해서 프로그램이 터져 버린다. 그래서 프로그램이 실행되는 도중에는 이 메모리 공간을 늘리거나 줄일 수 없다. 2. 동적 할당(Dynamic Allocation):..
이번에는 구조체에 대해 알아보자. 우선 게임 캐릭터의 정보를 저장하는 프로그램을 만든다고 가정해보자.만약 캐릭터가 100명이 된다면 이대로 계속 변수를 300개나 만들어야 한다.심지어는 이름, HP, MP가 서로 다른 변수라 한 눈에 보이지도 않는다. 이렇게 파편화된 변수들을 하나로 묶어주는 일종의 '양식'이 있다면, 굳이 캐릭터마다 변수 이름을 달리 할 필요 없이 서류 한 장에 이름 HP, MP 칸을 다 만들어 두고 새 캐릭터를 생성할 때마다 그 서류 양식을 그대로 찍어내면 되지 않을까? 이 기능을 하는 것이 바로 '구조체'이다.구조체란, 하나 이상의 변수를 묶어서 좀 더 편리하게 사용할 수 있도록 도와주는 도구이다. 구조체는 쉽게 설명해서 일종의 카테고리를 만들어서 하나의 자료형으로 사용한다.[i..
이번에는 c언어에서 가장 중요하지만 사람들이 많이 어려워 하는 개념인 '포인터'에 대해서 알아보자. 포인터(Pointer)란 "메모리 주소"를 저장하는 변수이다. (말 그대로 주소'만' 저장할 수 있다) 예를 들어, int num = 10; 이라는 변수를 선언했다고 가정해보자.그렇다면 메모리 공간 중 하나에 10을 저장하고 있을 것이고, 메모리 공간의 주소가 있을 것이다.메모리 주소를 1000 이라고 한다면 변수 이름은 num, 값은 10, 주소는 1000이 된다. 여기서 포인터는 1000이라는 주소를 저장하는 변수이다. 포인터 변수를 선언하는 방법은 int* ptr; 와 같이 포인터 변수를 선언할 때는 담고자 하는 자료형에 *를 붙여서 선언한다. int *ptr; int* ptr; int * ptr..
이번에는 함수에 대해서 알아보자. 함수란 입력->처리->출력 구조를 가진 독립된 기능 단위이다.예를 들어 3과 5를 입력하면 더하기가 처리되어 출력을 8로 한다. 이렇게 작은 기능을 구현해놓은 것이 바로 함수이다. 만약 함수가 없다면 같은 코드를 계속해서 반복해야 할 것이고, 같은 역할의 코드를 수정할 때 각 따로 고쳐야 할 것이며 코드가 길고 읽기가 어려울 것이다. 반환형 함수이름(매개변수){ 실행문; return 값;} 함수의 구조는 반환형, 함수이름, 매개변수(parameter)로 구성되어 있는데, 매개변수란 함수에 전달하는 입력값이다. 함수를 사용하는 방법은 2가지가 존재하는데, 함수를 선언과 구현을 동시에 하거나 함수를 선언하고 나중에 구현하는 방식이다. 예를 들어 어떤 수를 2..
지난 글인 언리얼5 C++ 에서 5번, 위 아래로 움직이는 발판밟고 이동하는 부분까지 제작해보았다. 이번 글에서는 6번, 회전하고 있는 기다란 발판을 밟고 이동할 수 있도록 제작해보자 콘텐츠 브라우저에서 [C++ Classes > AdventureTrap] 폴더에서 Obstacle C++ Class에 우클릭하고 이 클래스를 기반으로 하는 블루프린트를 하나 생성한다 이름은 BP_Obstacle5로 한 후에 생성해보자 발판의 역할을 할 메시를 [Content > EnvironmentPack1 > Meshes > EnvironmentPack_1] 폴더에서 찾아보자(다른 메시를 변형해서 사용해도 되지만 간단하게 SM_Bridge_01 메시를 사용하였다) SM_Bridge_01 메시를 끌어다 놓고 컴파일..
이번에는 장애물들을 더 다양하게 배치하여 목표지점에 도착하는 것을 방해하도록 제작할 것이다. 레벨을 디자인하는데 있어서 단순히 이동과 회전만 이용하면 장애물 맵이라고 할 수 없을 것이다. 이때까지는 가장 기본이 되는 이동과 회전을 통해 장애물을 배치해보았지만,이를 활용해서 캐릭터를 밀어버린다던가, 다른 레벨로 이동하도록 할 수도 있다. 이 프로젝트는 어디까지나 장애물 맵을 제작하기 위한 하나의 "참고자료"일 뿐 맵 지형, 디자인, 장애물타입, 레벨 크기, 목표지점 도달 조건 등등 수많은 아이디어들을 본인이 계획하여 맵을 제작하는 것을 추천한다.하지만 너무 많은 아이디어는 오히려 쉽게 질릴수도 있기 때문에 범위를 줄여서 생각해보자. 본인도 맵을 제작하기 전에 아주 간단하게 코스를 짜보았다.이동과 회전은 ..
이전 글에서는 C++ 코드를 이용해서 오브젝트를 움직일 수 있게 하였다. 하지만 단순히 상하좌우로 움직이기만 한다면, 게임의 재미 요소가 줄어들 수 밖에 없다. 이번에는 성 위에 올라갔을 때 생기는 작은 버그를 해결하고, C++로 회전도 추가하여 플레이어의 움직임을 방해하도록 제작해보자 이전에 제작했던 발판을 이용해서 성 위로 올라가면 바닥이 뚫려버린다 이것 또한 언리얼5-15 C++ 장애물 피하기(1) - 프로젝트 세팅하기 에서도 한번 다루어봤는데, 이번에는 조금 다른 방식으로 문제를 해결해보자콘텐츠 브라우저에서 [All > Content > EnvironmentPack1 > Meshes > EnvironmentPack_1] 폴더에서 SM_Castle을 검색하여 'SM_Castle_Back'을 우클릭..