목록전체보기 (231)
득이공간
개요 '다른 플레이어의 캐릭터가 부활할 때, 부활 모션 재생이 안되는' 문제를 해결하면서 얻은 경험을 공유하기 위해서 글을 작성한다.위의 이미지처럼 원래는 Simulated Proxy(다른 플레이어) 캐릭터의 시작(or 부활) 애니메이션이 양쪽 모두에서 정상적으로 재생되어야 하는데, 아래 이미지처럼 간헐적으로 다른 클라이언트에서는 상대 캐릭터의 모션 및 모습이 보이지 않는 문제가 발생했다.100퍼센트 미동작하는 것도 아니고 확률적으로 정상 동작할 때도 있었다.. ㅎㅎ 원인 중단점을 걸어서 확인해 보니 서버에서 몽타주 재생 RPC를 호출한 시점에 다른 클라이언트에서는 Simulated Proxy 캐릭터의 AnimInstance가 없었다. 현재 플레이어 캐릭터의 생명 주기는 다음과 같은데, 1. 애셋(메시,..
해당 게시물은 프로텍 미디어의 'Effective C++'를 읽고학습한 내용을 개인적으로 요약한 글입니다.📌 목차 - 6장. 상속, 그리고 객체 지향 설계6-1. public 상속 모형은 반드시 “is-a”를 따르도록 만들자 (32)6-2. 상속된 이름을 숨기는 일은 피하자 (33)6-3. 인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자 (34)6-4. 가상 함수 대신 쓸 것들도 생각해 두는 자세를 시시때때로 길러 두자 (35)6-5. 상속받은 비가상 함수를 파생 클래스에서 재정의하는 것은 절대 금물! (36)6-6. 어떤 함수에 대해서도 상속받은 기본 매개변수 값은 절대로 재정의하지 말자 (37)6-7. “has-a” 혹은 “is-implemented-in-terms-of”를 모형화할 ..
해당 게시물은 프로텍 미디어의 'Effective C++'를 읽고학습한 내용을 개인적으로 요약한 글입니다.📌 목차 - 5장. 구현5-1. 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자 (26)5-2. 캐스팅은 절약, 또 절약! 잊지 말자 (27)5-3. 내부에서 사용하는 객체에 대한 “핸들”을 반환하는 코드는 되도록 피하자 (28)5-4. 예외 안전성이 확보되는 그날 위해 싸우고 또 싸우자! (29)5-5. 인라인 함수는 미주알고주알 따져서 이해해 두자 (30)5-6. 파일 사이의 컴파일 의존성을 최대로 줄이자 (31)📌 5-1. 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자 (26)변수 정의는 늦출 수 있는 데까지 늦추자. 프로그램이 더 깔끔해지며 효율도 좋아진다.📌 5-2...
해당 게시물은 프로텍 미디어의 'Effective C++'를 읽고학습한 내용을 개인적으로 요약한 글입니다.📌 목차 - 4장. 설계 및 선언4-1. 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자 (18)4-2. 클래스 설계는 타입 설계와 똑같이 취급하자 (19)4-3. ‘값에 의한 전달’ 보다는 ‘상수객체 참조자에 의한 전달’ 방식을 택하는 편이 대개 낫다 (20)4-4. 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자 (21)4-5. 데이터 멤버가 선언될 곳은 private 영역임을 명심하자 (22)4-6. 멤버 함수보다는 비멤버 비프렌드 함수와 더 가까워지자 (23)4-7. 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자 (24)4-8..
해당 게시물은 프로텍 미디어의 'Effective C++'를 읽고학습한 내용을 개인적으로 요약한 글입니다. 📌 목차 - 3장. 자원 관리3-1. 자원 관리에는 객체가 그만! (13)3-2. 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 (14)3-3. 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자 (15)3-4. new 및 delete를 사용할 때는 형태를 반드시 맞추자 (16)3-5. new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 (17)📌 3-1. 자원 관리에는 객체가 그만! (13)자원 누출을 막기 위해, 생성자 안에서 자원을 획득하고 소멸자에서 그것을 해제하는 RAII 객체를 사용하자.일반적으로 널리 쓰이는 RAII 클래스는 ..
해당 게시물은 프로텍 미디어의 'Effective C++'를 읽고학습한 내용을 개인적으로 요약한 글입니다. 📌 목차 - 2장. 생성자, 소멸자 및 대입 연산자2-1. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 (5)2-2. 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자 (6)2-3. 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 (7)2-4. 예외가 소멸자를 떠나지 못하도록 붙들어 놓자 (8)2-5. 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 (9)2-6. 대입 연산자는 *this의 참조자를 반환하게 하자 (10)2-7. operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 (11)2-8. 객체의..
해당 게시물은 프로텍 미디어의 'Effective C++'를 읽고학습한 내용을 개인적으로 요약한 글입니다. 📌 목차 - 1장. C++에 왔으면 C++의 법을 따릅시다1-1. C++를 언어들의 연합체로 바라보는 안목은 필수 (1)1-2. #define을 쓰려거든 const, enum, inline을 떠올리자 (2)1-3. 낌새만 보이면 const를 들이대 보자! (3)1-4. 객체를 사용하기 전에 반드시 그 객체를 초기화하자 (4)📌 1-1. C++를 언어들의 연합체로 바라보는 안목은 필수 (1)C++를 사용한 효과적인 프로그래밍 규칙은 경우에 따라 달라진다. 그 경우란, 바로 C++의 어떤 부분을 사용하느냐다.C++를 구성하는 네 가지 부분은 C, 객체 지향 개념의 C++, 템플릿 C++, STL이다..
해당 게시물은 이득우 교수님의 '게임플레이 어빌리티 시스템' 강의를 수강하며학습한 내용을 개인적으로 정리한 글입니다. 📌 목차 - 4장. 게임플레이 어빌리티 시스템의 활용 방법4-1. 아이템 상자 구현4-2. 캐릭터의 광역 스킬 구현📌 4-1. 아이템 상자 구현 1. 공격 명중 시 장식 이펙트를 추가로 발동시키기2. 기간형 게임플레이 이펙트의 주기 설정이 가지는 특징의 학습3. 게임 이펙트 설정으로 장식 이펙트를 발동시키는 방법의 학습4. 태그 설정을 활용한 게임플레이 이펙트 및 태그의 제거5. 게임 이벤트 발동과 어트리뷰트 직접 접근을 통한 무기 추가와 제거 구현 게임플레이 이펙트를 활용한 아이템과 무기 기획대미지, 회복 상자의 구현체력 리젠(Regeneration) 상자, DOT(Damage Ov..
해당 게시물은 이득우 교수님의 '게임플레이 어빌리티 시스템' 강의를 수강하며학습한 내용을 개인적으로 정리한 글입니다. 📌 목차 - 3장. 어트리뷰트와 게임플레이 이펙트의 이해3-1. 캐릭터 어트리뷰트 설정3-2. 게임플레이 이펙트의 활용3-3. 어트리뷰트와 UI 연동📌 3-1. 캐릭터 어트리뷰트 설정 1. GAS NPC 제작과 캐릭터에 어트리뷰트를 부여하는 방법의 이해2. ASC에서 어트리뷰트 세트를 초기화하는 과정의 학습3. NPC의 어트리뷰트와 태그 값을 확인할 수 있는 디버그 시스템의 추가 설정4. ASC와 매크로를 사용해 어트리뷰트 값을 가져오고, 변경하는 기능의 구현5. 변경되는 어트리뷰트 값의 검증 방법 학습 캐릭터 어트리뷰트 설정 기획캐릭터에 설정할 어트리뷰트 목록기본 어트리뷰트체력 (H..
해당 게시물은 이득우 교수님의 '게임플레이 어빌리티 시스템' 강의를 수강하며학습한 내용을 개인적으로 정리한 글입니다. 📌 목차 - 2장. 게임플레이 어빌리티 시스템 캐릭터 제작 기초2-1. 캐릭터의 입력 처리2-2. 캐릭터 콤보 공격의 구현2-3. 공격 판정 시스템의 구현📌 2-1. 캐릭터의 입력 처리 1. 플레이어 캐릭터의 GAS 설정 방법의 학습1-1. 오너액터와 아바타액터 개념의 이해1-2. 플레이어 스테이트에서 ASC를 설정하는 이유를 이해하기2. 게임플레이 어빌리티 스펙의 이해3. GAS에 관련된 입력을 범용적으로 처리하는 방식의 학습4. GA의 다양한 인스턴싱 옵션의 확인5. GA에서 AT를 사용하는 C++ 프로그래밍 패턴의 학습6. GAS의 디버깅 방법 플레이어 캐릭터의 기획기존 플레이어..