목록분류 전체보기 (194)
초보 코린이의 성장 일지
C++와 ANSI C의 함수 원형 비교 - ANSI C는 C++로부터 함수 원형의 개념을 차용했다. - 차이점 : ANSI C는 클래식 C언어와 호환성을 유지하기 위해 함수 원형의 사용이 선택적 C++은 함수 원형을 필수적으로 사용한다. - C++에서는 void num(); 괄호 안을 비워 놓아도 그 안에 void라는 키워드가 들어 있다고 간주한다. 이 의미는 함수가 어떠한 매개변수도 요구하지 않는다는 것을 의미한다. - ANSL C에서는 괄호 안을 비워 놓는 것은 매개변수가 무엇인지 밝히는 것을 거부한다는 뜻이다. 이 의미는 매개변수 리스트가 무엇인지 확인하지 않겠다는 의미이다. ANSI C : ISO C,표준 C(Standard C)는미국 국립 표준 협회(ANSI)와국제 표준화 기구(ISO)가 출판한..
3D 다룰때 분리축은 "평면"을 말하는 것이다. A와 B 오브젝트가 존재한다면 A 오브젝트의 평면 총 3개, B 오브젝트의 평면 총 3개 A 오브젝트의 좌표축(대각), B 오브젝트의 좌표축 각 각 외적한 경우의 수 9개 총 합 : 15개 분리축 : 두 다면체를 어떤 축에 투영시켰을때 구간이 서로 겹치지 않을 경우, 분리축이라 말한다. OBB가 충돌했는지 판단하는 기준은 15개의 분리축을 검사해야한다. 다면체 사이에 분리축이 하나라도 존재한다면 두 다면체는 서로 겹치지 않은 상태로 본다. 또 한 겹치지 않았다는 것은 두 다면체 사이에 하나는 평행한 분리축을 가지고 있다. 3D에서는 각 각 변들을 외적해야 OBB충돌검사를 할 수 있다. - OBB는 깊게 들어가서 정리해야 할 거 같다. 지금 내가 다루기에는 ..
플레이어가 들고 있는 무기와 객체가 충돌을 하게 만들어 볼 것이다. 화면에 보여줘야 하는 객체인 Actor로 생성해 준다. 충돌의 관한 Box Collision 컴포넌트를 추가해 준다. 각 각 구별을 위해 글자를 입력 할 수 있게 컴포넌트를 추가해 준다. 오른쪽 설정을 통해 적당한 크기를 맞춰주고 구별을 하기 위해 이름도 지어준다. 색상 또한 변경해줘서 구별하면 보기 편하다. 화면상에 충돌을 할 수 있는 구역이 하나 생기게 된다. Box로 들어가서 -> 설정 -> 렌더링 -> Hidden in Game 체크되 있는걸 풀어주면 화면상에서 사라진다. 충돌할때 중요한 설정이 있다. Generate Overlap Events = Overlap은 양쪽다 충돌체가 있어야하고 양쪽다 이 옵션이 켜져 있어야 겹침 연산..
공격 모션과 콤보를 넣기 위해 몽타주를 생성해서 활용할 것이다. 우선 캐릭터 공격 모션을 몽타주로 생성부터 해야한다. 애니메이션을 찾아 오른쪽 마우스를 누른 후 -> 생성 ->애님몽타주 생성을 클릭한다. 그럼 위와 같은 몽타주 모션이 생성이된다. 그리고 사용할 공격버튼을 설정해준다. 몽타주는 캐릭터안에 플레이 시켜주는 기능을 가진 Play Anim Montage가 있다. 생성해준다. 2번째 Anim Montage에서는 플레이 시킬 애니메이션 동작으로 설정을 바꿔준다. In Play Rate는 속도를 나타낸다. 만든 몽타주 애니메이션을 들어가면 다른 노티파이만 있던 부분과 달리 몽타주라는 설정이 존재한다. 이뜻은 이 구간에서 실행하라고 지정이 가능하다. 위에 DefaultSlot로 설정되어 있기 때문에 애..
불연속 그래픽 카드의 GPU와 같은 데이터 병렬 하드웨어를 활용하여 C++ 코드 실행을 가속화시킨다. AMP를 사용하면 이종 하드웨어에서 병렬 처리 방법을 사용하여 실행을 가속화 할 수 있도록 다차원 데이터 알고리즘을 코딩할 수 있게 만들어 줍니다. 일반적인 C++로 코드를 출력한다면 위에 보이는 결과가 나오게된다. 이는 CPU로 계산한 결과값이기도 합니다. 하지만 여기서 AMP를 사용하여 GPU가 연산을 하게 된다면 어떤 방법으로 코드를 작성하게 되는지 살펴보겠습니다. C++ APM으로 구현한 코드인데 값이 정확히 나오지 않아 나중에 깊게 파봐야겠다. 아직까진 쓰는 방식에 대해서만 다뤄야겠다. 1. C++에서는 메모리는 CPU가 접근할 수 있는 메모리이다. 2. GPU로 처리하기 위해서는 직접적으로 접..
칼을 뺴고 나면 Equiping가 해제되어야 하는데 지금은 계속 유지되고 있는 상태이다 그래서 애니메이션 상태에서 중간에 이벤트인 Notifies 하나 만들어서 이 과정을 순차적으로 만들것이다. Notifies를 만드는 방법은 원하는 동작의 애니메이션을 들어가 모션을 보여주는 수치를 나타낸 곳에 우클릭을 누른 후 노티파이추가를 누르면 된다. 그 중에 자신이 만든 노티파이를 추가해주면서 원하는 지점에 제어를 해줄 수 있다. 관리를 편하게하기 위해 폴더를 하나 생성해주고 내가 앞으로 할 동작을 노티파이로 만들어 준다. 오른쪽 마우스를 누른 후 -> 블루프린 클래스 생성 -> 부모 클래스 선택 창에서 하단 모든 클래스에 검색 -> Animnotify 선택을 하면 된다. 클래스로부터 상속을 받게되면 먼저 찾아야..
다른 정렬 알고리즘과 다르게 비교를 줄여나가면서 진행되는 분할정복 알고리즘이다. 기본적인 틀은 아주 간단하다. 특정한 기준을 잡고 그것을 Pivot 이라고 부른다. pivot을 기준으로 pivot보다 작으면 왼쪽으로 이동하고, 크다면 오른쪽으로 이동하는 동작을 하게 된다. 이러한 배열이 만약 있다고 가정하고 돌아가는 원리를 설명해 보겠다. arr[9]라는 배열을 하나 선언하고 그 Index값에 숫자를 넣었다. 표시해놓은 숫자 "7"(pivot)을 기준으로 arr[0]을 시작부터 비교를 하기 시작한다. 0번인 4와 7를 비교 했을때 만일 좌항이 pivot 보다 작다면 그대로 유지 시키고, 하나씩 비교를 해나아간다. 그리고 arr[3]을 가리키는 9의 값까지 도달했을시 pivot인 7이 더 작으므로 9과 7..
게임내에서 무기를 장착하면 전방을 기준으로 잡고 움직일 것이다. 여기서 전방의 기준이 되는것은 캐릭터의 기준이 아닌 카메라의 기준이 된다. 무기를 들지 않는 상태에서는 모든방향을 자유롭게 움직일 수 있지만 무기를 들었을때는 전방을 기준으로 설정할 것이다. 우선 Get Control Rotation을 선언한다. 플레이어의 컨트롤러는 카메라를 보유하고 있어 플레이어 기준으로 카메라를 가져온다고 생각하면 된다. (플레이어의 회전값) 또한 구조체로써 핀분활을 눌러 x, y ,z축을 열어주거나 Break를 선언해서 사용해야한다. 그리고 구조체는 Make를 가지고 있어 선언 후 필요한 수행값을 보내준다. 이제 카메라의 전방 Get Forward Vector를 받아 MoveForward와 연결해 준다. return되..
ECA규칙 E(enent) -> C(condition) -> A(action) 트리거를 명시하려면 트리거를 활성화시키는 사건인 이벤트, 트리거가 활성화되었을때 수행되는 조건이 활성화되고 그 조건이 참이라면 수행되는 문(프로시저)인 동작을 표현해야 한다. 데이터베이스 트리거는 테이블에 대해 삽입, 수정, 삭제 등 이벤트가 발생하면 자동으로 실행하는 작업을 의미한다. 연쇄적인 반응이 일어나는 거라고 생각하면 편하다. 트리거가 적용됨으로써 편리함이 작용한다. - 만일 수십만건에 데이터가 한번에 실시간으로 들어온다면 프로그램은 누군가 그 수량과 품목등을 조회할때마다 수십만건의 데이터를 읽고 계산을 해야합니다. 그렇게 되면 시스템 자체 퍼포먼스도 떨어지며 효율을 잃게 된다. 장점 1. 데이터 무결성 강화(참조 무..
셋팅 -> 프로젝트 셋팅 -> 맵&모드 안에서 설정 가능 에디터 시작 맵 = 에디터가 열리면 기본으로 이 프로젝트에 맵을 열어주는 설정 게임 기본 맵 = 프로젝트 빌드를 시작하면 시작되는 맵 설정 셋팅 -> 프로젝트 셋팅 -> 엔진 -> 입력 안에서 설정 가능 액션 매핑 = 캐릭터의 공격, 뛰기 등등 한번만 입력하게 되는 입력값은 액션매핑 축 매핑 = 누르고 있을때 값들이 연속으로 들어오는 입력값은 축매핑 동작을 구분하기 위해 이름을 정해주고 키를 입력 받음과 동시에 Scale를 조절해준다 ex) 위 그림과 같이 MoveRight라는 이름 그대로 오른쪽으로 움직인다는 키 셋팅이다. Scale값이 1,0이 오른쪽 방향을 나타낸다면, 반대방향으로 방향을 바꿀때는 -1.0으로 반대를 가리키게 하면 된다. 키 ..