전체 글 (228) 썸네일형 리스트형 피직스 머터리얼을 이용한 사운드 변경 프로젝트에서 사용하는 레벨에는 잔디가 깔려있는 바깥과 나무 바닥으로 되어 있는 호러 멘션이 존재한다. 발걸음에 대한 소리를 출력할 때에 잔디와 나무에 따라 다르게 소리를 내도록 만들었다. 1. 프로젝트 셋팅에서 Surface 설정으로 Grass 와 Wood 를 추가하고 각 표면에 맞는 피직스 머터리얼들을 생성한다.2. 폴리지 모드에서 사용된 폴리지 레이어를 확인하고 원하는 피직스 머터리얼을 설정한다.3. 멘션에 나무 바닥 메쉬들에도 Wood 피직스 머터리얼을 설정한다. 4. 플레이어가 움직일 때 걷는 순간 마다 AnimNotify 로 아래로 라인트레이스하고 HitActor 의 Surface 마다 사운드를 교체한다. 플레이어 캐릭터 빙의 변경 - (사람, 몬스터, 관전자) 게임 Pollute 는 플레이어가 사람, 몬스터, 관전자 3가지 캐릭터를 사용한다.컨트롤러는 3가지 캐릭터에 대한 ChangePossess 를 진행해야한다. 구현하면서 배운 것과 놓친 부분들1. Possess/UnPossess 는 항상 Server 에서 진행한다.2. 리플리케이트 되어 있는 액터의 생성과 파괴가 서버에서 이루어진다면 동기화된다.3. 클라에서는 캐릭터 생성하면서 Possess 시 Beginplay에서 컨트롤러를 정상적으로 가져올 수 있지만 Server 에서는 안된다. 안전하게 PossessedBy 함수를 사용한다.4. 사람이 몬스터로 변한다면 PlayerHUD 를 Off 해야하며 만약 아이템을 들고 있다면 Detach 해야한다.5. 몬스터로 변했다면 다시 무작위로 남아있는 사람 플레이어에게.. 객체 사용 전 객체 초기화 C++ 에서 객체 초기화는 상황에 따라 다른 모습을 보인다.int x;는 확실히 0으로 초기화된다. 그런데class Point{int x,y;};여기서는 초기화가 보장 될 수 도 있고 아닐 수 있다..... 일단 C 부분만을 기준으로 "초기화에 런타임 비용이 소모 될 가능성이 있다면 초기화가 보장되지 않는다." 여기서 중요한 것은 C 가 아닌 부분이 겹치면 상황이 애매해진다는 것이다. 이것은 C 배열은 원소가 확실히 초기화된다는 보장이 없지만 vector(STL) 는 보장해준다 따라서 생성 시 혹은 객체의 사용 전 가능한 항상 초기화하는 것이다. 참고로 생성자에서 초기화 리스트를 사용하지 않는다면 그것은 대입 방식이다, class PhoneNumber { // PhoneNumber 클래스 정의.. const 사용 const 를 사용하는 것으로 특정 값을 불변 시킬 수 있고 컴파일러 및 다른 프로그래머들은 이를 지켜 줄 수 있다. 여기서 const 를 포인터 사용한다면 왼쪽을 기준으로 하고 오른쪽을 본다const int* // 값만 상수int* const // 포인터만 상수 그러니const int operator*(....)const int* 와 int const * 는 같다. STL 의 반복자 또한, * 를 기반으로 만들어 졌기 때문에 주소 변경을 원하지 않을시에 const_iterator 를 사용할 수 있다. const 함수 const operator 를 이용한 예방const int operator*(..,..) 다음과 같이 반환형을 수정되지 않도록 막으면if(a*b=c)와 같이 == 을 = 로 잘못쓰는 실.. 시스템 프로그래밍이란? 시스템 프로그램 - 컴퓨터 시스템을 동작시키는 프로그램 즉, 컴퓨터를 동작하는데 필요한 프로그램을 의미. 대표적으로 윈도우, 유닉스 같은 운영체제여기서 windows 시스템 프로그래밍이란 window 운영체제 기반의 컴퓨터에게 일을 시키기 위한 프로그램을 구현하는 것.그리고 프로그램을 구현하기위해 필요한 라이브러리는 window 운영체제에 의해 제공된다. 따라서 컴퓨터 시스템은 하드웨어를 제어하는 것 뿐 아니라 하드웨어가 일 하도록 도와주는 운영체제를 포함 한다는 것이고 또한 해당 운영체제가 제공하는 라이브러리로 실제 '일거리'를 만들어 제공할 수 있는 그 과정을 의미한다. 이러한 시스템 프로그래머가 되기 위해서는 결국 운영체제에 대해 알아야한다는 것이고 운영체제는 하드웨어와 소프트웨어를 연결 짓는 역할.. #define 대신 const, enum, inline 을 생각 할 것 #define 매크로를 사용하면 선행 처리되면서 기호 테이블에 들어가지 않으며 컴파일러에게도 보이지 않는다. 그래서 디버깅 시에 찾기 어려울 수도 있다 매크로 이름이 아닌 값으로 에러 메시지가 나올 것 이기 때문에 확실히 파악하기 어려울 수 있다. 매크로 대신 상수를 쓸 수 있다.const double Aa = 1.653; const 이기 때문에 컴파일러의 눈에 보이고 기호 테이블에도 들어간다. 매크로 사용시 코드에 매크로 이름이 나타나면 선행 처리로 값으로 바뀌면서 목적 코드 안에 값 등장 횟수만큼 사본이 들어간다. 다만, 상수 타입 사용시에는 사본이 딱 한 번 생성된다. #define 대신 상수를 사용한다면 조심해야 할 것1. 상수 포인터를 사용할 경우 : 상수 포인터를 쓴다면 안정적으로 const .. C++의 하위 언어 C++ 을 여러 언어들의 연합체로 생각 할 수 있다.다음은 C++ 을 이루는 하위 언어이다. C- C++ 은 C 를 기본으로 하고 있다. 따라서 C++ 로 C 의 규칙 만을 이용한 프로그래밍이 가능하다. 당연히 효율적인 프로그래밍이 힘들다. 객체지향 C++'클래스를 쓰는 C++' 이 여기에 해당된다.클래스, 캡슐, 상속, 다형, 추상, 가상함수 등등의 개념이 포함된다 프로그래밍 방식이다. 객체 지향의 설계 규칙은 여기에 해당된다. 템플릿 C++C++ 의 일반화 프로그래밍 이다. 이는 사용자조차 자료형을 파악하지 않고 일반적으로 사용하는 프로그래밍이다.템플릿을 사용하면 높은 확장성 및 재사용성을 보장 받을 수 있다. STL템플릿 라이브러리. STL은 컨테이너, 반복자, 알고리즘 과 함수 객체를 사용하기 때.. 플레이어 블렌드 스페이스 변경 & 속도 동기화 - 스테미나 블렌드 스페이스사람 캐릭터의 움직임을 좀 더 자연스럽게 바꾸기 위해 블렌드 스페이스를 추가하였다.1인칭 게임을 제작 중이기 때문에 Strafe 형식으로 만들었다. @ . 리플리케이트를 이용한 동기화라면 Server 에서 변수나 객체를 바꾸어주어야한다.@ . 액터의 RPC 호출에 가장 중요한 것은 Owner 이다. 그리고 소유권을 가질 수 있냐이다. 속도 동기화속도 동기화 시 설계가 다른 방법이 충분히 있을 것 같긴한데 일단 구현한대로 두어야할듯. Replicated : RPC 구현된 속도 동기화 : MaxWalkSpeed 를 조절하고 모든 서버/클라가 이를 동기화한다.기본 움직임에는 WalkSpeed 값으로 설정되지만 Shift 를 누르면 RunSpeed 로 설정 되어야 한다. 기본적으로 MaxWal.. 이전 1 2 3 4 ··· 29 다음