데디서버가 아닐때 protobuf 클래스를 그대로 사용하는 것을 상당히 좋은 방법이라고 생각했었는데, GameplayAttribute를 쓰면 앞의 방식을 포기하게 되는 경우가 있었나요? 아니면 사용하기는 하나 GameplayAttribute를 위해 protobuf에서 FGameplayAttributeData쪽에 복사를 해서 사용하려나요...
안녕하세요, 강의 관련 질문은 아니지만 궁금한 점이 생겨 질문 올립니다. 개인 프로젝트로 TPS 생존 게임을 제작하려 합니다. 한 경기에 10명 내외의 클라이언트가 접속할 예정입니다. 언리얼 엔진에서 제공하는 리슨 서버와 데디케이티드 서버 중 어떤 방식이 알맞을까요? 만약 데디케이티드 서버가 알맞다면 리슨 서버에서 구현했던 if(Hasauthority()) 등의 로직들은 제거해주면 되는 것인가요? 만약 데디케이티드 서버로 구성하면 어디서 클라이언트의 데이터 검증을 하게 되는지 등 리슨 서버와 어떻게 다르게 구성해야 하는지 잘 와닿지가 않습니다. characterplayer.cpp 등에 작성한 코드 자체가 서버 로직임과 동시에 클라이언트 로직인 것인지.. 인터넷에는 데디 서버를 구축하는 방법만 나와 있어서 여쭈어 봅니다. ++) 그리고 게임을 제작할 때 BP와 C++을 혼용해도 상관 없을까요? 강의는 전부 C++로 진행되어서 웬만하면 C++로 제작할 예정이지만, BP를 혼용하여 사용하는 것에 있어서 주의점 등이 있는지 궁금합니다.
안녕하세요 강의 정말 잘 듣고 있습니다. 다름이 아니라 마지막 32:13 쓸모 없는 파일을 삭제하는 부분에서 수업 자료에서 받은 파일 중 txt파일만 삭제하면 빌드 오류가 떠서 어떻게 없애야할지 궁금하여 질문 드립니다. 위 사진처럼 삼인칭템플릿추가필요.txt 파일을 삭제하고 빌드를 하면 아래와 같이 빌드 오류가 뜨네요. Saved, Intermediate, DerivedDataCache, sin 파일을 지우고 txt파일도 지운 다음 Generate Visiual Studio를 실행했는데도 계속 똑같은 빌드 오류가 뜨네요. 어떻게 해결할 수 있을까요?
안녕하세요, 9강 델리게이트 까지 들은 현재, 제가 객체지향 설계에 대해 잘 이해를 한 것인지 잘 모르겠고 궁금한 것이 생겨서 질문 남깁니다. 9강에서 인터페이스를 사용해서 느슨한 결합으로 구현하는 것을 설명해주셨었습니다. 강의에서 인터페이스를 구현할 때, 인터페이스를 사용해서 함수를 호출하기 위해서는 특정 클래스를 Cast하여 확인하고 호출했었습니다. 그러면 예를 들어 캐릭터에서 아이템 사용 인터페이스를 사용한다고 해도 아이템 클래스 헤더를 include를 해야하는 상황이 발생하는데 이 경우에는 인터페이스를 사용했음에도 결합? 의존이 발생한 것이라고 봐야할까요? 그리고 델리게이트 강의에서 중간에서 연결과 활동을 관리하는 주체 클래스가 필요하다고 하셨는데 이 클래스의 경우에는 모든 클래스를 include하여 사용하게 되는데 강한결합을 따지지 않나요? 그리고 강의를 따라가며 이해한 걸로 예시를 들어보았는데 제가 제대로 이해하고 있는 것인지 궁금합니다... 좀 길지만 혹시 한번 봐주신다면 정말 감사하겠습니다 =============================================================== <6강 리플렉션 2> 게임에서 다양한 아이템이 있습니다. 아이템이라는 클래스를 만들어서 상속시켜 구현을 합니다. 아이템 클래스에는 Use라는 가상 함수를 두고 이를 오버라이드 해서 각 아이템의 사용 시 효과를 구현합니다. <7강 인터페이스> 사용가능한 아이템이 있고 패시브 효과를 가진 아이템이 있을 수 있기 때문에 Use라는 함수를 UsableItemInterface 등의 인터페이스로 구현하여 상속시켜 구현합니다. <8강 컴포지션> 포함관계를 사용하여 복잡한 기능을 클래스를 쉽게 구현합니다. 캐릭터 클래스에 아이템 클래스를 include하여 생성하여 아이템의 기능을 사용할 수 있게 합니다. <9강 델리게이트> include 된다면 강한 결합이기 때문에 안좋은 설계 방법이며 인터페이스를 활용하여 구현하여 느슨한 결합을 유지할 수 있습니다. 예를 들어 아이템 자체를 include하기 보다는 아이템 사용 함수를 구현한 인터페이스에 의존하게 하여 해당 인터페이스를 구현한다면 다양한 종류의 아이템을 직접 캐릭터에 include하여 변경할 필요없이 사용이 가능하게 됩니다. 하지만 매번 인터페이스를 만드는 것이 불편할 수 있으므로 델리게이트를 쓰면 편하고 안정적으로 관리가 가능합니다. 캐릭터와 아이템의 의존을 없애기 위해 연결과 활동 주체 클래스를 만듭니다. 주체 클래스에서 캐릭터와 아이템을 include하고 캐릭터에 onUse라는 델리게이트를 만들고 이게 호출되면 아이템의 Use가 호출되도록 bind합니다. 그러면 캐릭터와 아이템이 의존하지 않고도 사용할 수 있게 되었습니다. ===============================================================
현재는 리슨 서버로 개발하고 있어서 서버 클라 코드가 동시에 들어가지만 데디케이티드 서버 개발은 서버 코드만 있으면 되기 때문에 더 편리하다 라고 하셨는데 이게 머릿속에 잘 그려 지지가 않습니다 ㅠ 데디케이티드 서버 개발 방식이라는게 아예 프로젝트를 분리해서 서버와 클라를 구분해서 개발 하는 것으로 생각 해야 할까요? (예를 들어 캐릭터 액터의 경우를 보면 같은 이름의 ABCharacter.h & cpp 파일이 있지만 안의 내용은 다르게 (어떤건 같은 내용) 되어 있다고 생각해야 할까요?) 아니면 프로퍼티 리플리케이션의 경우는 콜백으로 OnRep_ 함수가 클라이언트 측에서만 실행 할 수 있는 걸로 나오는데, 이렇게 되면 애초에 서버 클라가 분리된 형태로 볼 수 있고, 이를 기반으로 프로퍼티를 바꾸는건 서버 코드, OnRep_ 콜백 함수는 클라이언트 코드 로 해서 각 파트가 개발 하는 방식이 데디케이티드 서버 개발 방식일까요?
안녕하세요 루키스님 저는 비전공자로서, 강의 너무 잘듣고있습니다. 이해가 아주 쏙쏙됩니다. 이때까지 제 자존심이 허락하지 않아 뭐 안되는거있으면 구글링이나 chatgpt한테 물어봐가면서 아득바득해결했는데 이건 도저히 이해가 안되네요... 제가 공격을 구현하는 코드에서 실수로 UpdateAnimation 부분을 빼고 연결해버렸습니다. 나머지는 강의랑 동일한 코드로 작성하였습니다 근데 요상하게도 나머지 기능은 정상적으로 작동하는데 공격시, 2회연속공격을 하더라구요?? 아니 공격키가 먹히는 것도 요상한데 2회연속공격도 요상합니다. 공격키가 먹히는 이유는 Event Tick에 걸어준 코드 때문에 Update Input 함수에서 노란선방향으로 쭉 나가서 UpateAnimation쪽으로 가주면서 공격키를 눌러주긴했으니까 EState가 Skill값으로 받아줘서 결과적으로 공격 모션을 취한것으로 예상을하고있는데 근데 왜 2회연속공격으로 실행될까요?? 예전에 말씀하시길 Tick이 frame단위로 굉장히 짧은시간이니깐 공격키가 눌린 찰나의 시간동안 저 과정이 2번 반복되서 그런걸까요??
평소 비주얼 스튜디오 코드 사용하고 있어서 환경바꾸기 귀찮아 그냥 그대로 쓰고 있었습니다. MainActor.cpp 에서 BP_R1Actor 찾는데는 성공했지만, ActorClass 에 대입이 안 되서 속 썩이다가 혹시나 하는 마음에 비주얼 스튜디오 2022로 옮기니 잘 되네요. 비주얼 코드에서는 자꾸 타입 불일치로 Null 로 나려버리던데 이유는 아직도 찾지 못했습니다. 저 같은 분 계실가봐 적어봅니다.
안녕하세요. 두 가지 질문이 있습니다. 게임플레이 태그도 FName으로 구현되었다면 해시테이블 자료구조로 저장되어 있을 것이라 예측했는데 계층구조를 지원하는 검색기능을 제공한다면 게임플레이태그 컨테이너는 Trie같은 자료구조로 만들어져 있는 건가요? GAS를 사용해서 구현하는 방식이 액터로부터 기능을 분리하는 것인데 기존에 언리얼에서 제공하는 액터컴포넌트와 차이가 있을까요?
안녕하세요. 매번 양질의 강의 영상 감사드립니다. 플레이어의 점프력을 조금 낮춰보고 점프를 했을때 (JumpZVelocity 700->400 , Mass 200) 첫번째 점프는 애니메이션 처음부터 재생하지만, 착지 후 즉시 점프를 했을때, 이전에 점프가 끝났던 프레임에서 재생하여, 바로 Falling 노드로 진입하는듯한 문제가 있었습니다. 혹시, 현재 노드를 벗어나거나, 진입하면, 무조건 첫 프레임부터 재생하겠다라는 옵션을 설정해줄 수 있을까요? 감사합니다
안녕하세요, 그러면 Listen Server로 저희 예제를 작동시킬 때 CharacterMovementComponent에서 자동으로 캐릭터 네트워크 움직임들을 앞서 살펴본 소스코드의 과정을 통해 보완 및 이동 시켜주고 있다고 보면 되는거겠죠? 그런 것 같지만 확인차 질문드려봅니다.
안녕하세요? 좋은 강의 감사히 보고 있는 학생입니다. 이번 강의를 수강하면서 내용을 진행중에 있었습니다. 샘플로 실습해본 Editor 모듈을 삭제하는 과정에서 이해가되지 않는 문제가 발생했습니다. (Pawn 강의에서 이전 실습 내용을 삭제하고 정리하는 부분) 문제 상황 모듈 파일을 적절히 제거하고 Generate Visual Studio project files를 실행을 하고 빌드를 하고 실행을 해봤더니 Game files required to initialize the global shader library are missing from: 위 에러가 발생했습니다. 구글링을 해봤더니 프로젝트 구성 속성이 DebugGame Editor 같은 에디터가 아니어서 발생하는 문제라고 해서 확인해봤더니 Editor 구성 속성이 전부 사라져있었습니다. -DebugGame -Development -Shipping 세 속성만 남아있었습니다. Intermediate 파일이나 Cache, 솔루션 파일 등을 제거하고 다시 Generate Visual Studio project files을 실행해도 문제가 해결되지 않았습니다. 질문 강의를 다시 확인해보니 R1Editor.Target.cs 파일을 제거하지 않은 것을 볼 수 있었습니다. 저 또한 R1Editor.Target.cs 파일만 다시 복구해보니 정상적으로 Editor 구성 속성이 생겼습니다. .uproject에서 모듈을 제거하고 종속성도 제거했는데 왜 이런일이 발생할까요? R1Editor.Target.cs 파일을 깔끔하게 삭제하고 모듈의 흔적을 완전히 제거할 수 있나요?
강의 많은 도움되고 있어요 감사합니다! flip 파티클을 노이즈 값이랑 윈드값으로 VECTOR 값을 {1, 0, 0} 이런식으로 주면 x방향으로 나아가긴 하는데 x보다 조금 더 대각선 위쪽으로 으로 날라가는데 정확하게 제가 원하는 방향으로 날라가게 하려면 어떤 방식으로 하는게 좋은가요?