분수대 같은 개별 액터가 아니라 빙의 되어있는 폰같은 액터의 경우, 오너로 자신의 player controller 가 있을 것인데요. 이 폰에서 IsNetRelevantFor() 함수가 호출될 때 매개변수로 받는 RealViewer에 대하여 어떤 RealViewer(클라이언트)이든 무조건 true가 반환 되서, 모든 클라이언트에게 복제가 되는 건가요? IsNetRelevantFor() 의 첫 번째 조건은 자기 자신의 오너쉽과 관련된 클라이언트에 대해서는 무조건 true 가 반환 되는 걸로 보여지지만 if (bAlwaysRelevant || IsOwnedBy(ViewTarget) || IsOwnedBy(RealViewer) || this == ViewTarget || ViewTarget == GetInstigator()) { return true; } Player State 나 Game State가 무조건 모든 클라이언트에게 복제 되는 것 처럼. (bOnlyRelevantToOwner같은 특별한 옵션이 없다고 가정했을 때) Player Controller를 오너로 가지고있는 액터도 모든 클라이언트에 복제가 된다고 이해해도 되나요??
수업에서는 AttackInRange 데코레이터를 CalculateRawConditionValue() 만 구현해서 사용했는데요. aborts 발동 조건같은걸 따로 지정안해도 자동으로 되는 건가요?? BlackBoard 데코레이터의 경우에는 값이나 결과? 가 바뀌면 aborts가 발동되는 걸로 이해해서 코드를 보니 상당히 복잡하게 aborts 구현이 되어있더라구요.... 어설프게 이해한 바로는 블랙보드의 키에 델리게이트 등록해서 값 변경 이벤트를받아 ConditionalFlowAbort() 라는 함수를 호출하고 있습니다. 이 과정에서 CalculateRawConditionValue()가 또 호출되고 활성/비활성으로 나뉘어져 뭔가 복잡하게 수행하는데요. 결국 aborts를 해야하는지 말아야하는지 체크는 ConditionalFlowAbort() 를 호출함으로서 시작되는 것 같아 보이는데.... 이걸 안 한 AttackInRange 데코레이터는 aborts 가 어떻게 동작하는지 알고 싶습니다..
안녕하세요. 저는 무기 아이템 액터가 무기를 휘두르는 몽타주를 재생하는 어빌리티를 멤버 변수로 갖고 있게 하고, 해당 무기를 장착했을 때 무기의 어빌리티를 매개변수로 전달받아 어빌리티를 활성화 하도록 구현하려고 하는데요. 이 경우에 어빌리티를 활성화하고 등록된 어빌리티를 다시 제거해 줄 필요는 없을까요? 같은 무기를 여러번 장착할 수도 있을텐데 ASC에 같은 어빌리티 여러 개가 등록되어 있는게 문제가 될 수도 있지 않나 해서 질문드립니다.
안녕하세요. 제목 그대로 섹션4 디아블로 방식의 컨트롤 강의 소스코드를 받고 싶습니다. 따라 하고 있는데요. 해당 강의 끝 부분에 커서를 따라서 캐릭터가 이동하지 않는 오류에 대해서 강의를 보면 갑자기 해결이 되기도 하고, 강의에 있는 해결 방식으로 해결이 안 됩니다.ㅠㅠ 해결된 소스파일과 제 소스파일을 비교해서 어느 부분이 문제인지 보고 싶습니다. 부탁드립니다.
8강 48분 40초에서 Client, Server RPC의 사용 조건인 엑터의 오너쉽 여부를 IsLocalControlled함수로 파악하라고 되어있습니다. 근데 서버에서 ROLE_Authority / ROLE_AutonomousProxy에 해당 하는 엑터는 IsLocalControlled가 false인데 클라이언터와의 커넥션은 가지고 있어 client RPC가 사용 가능하고, ROLE_Authority / ROLE_SimulatedProxy는 IsLocalControlled가 true이지만 커넥션 없을 수도 있어 Client RPC를 사용하지 못할 수 있지 않나요? hasAuthority등으로 서버, 클라이언트 여부를 먼저 파악한뒤 클라이언트 일 때 커넥션 오너쉽을 확인하기 위한 용도로 isLocalConrolled를 사용할 수 있다는 뜻인지, 아니면 제가 isLocalConrolled 자체를 잘못 이해한 건지 헷갈립니다. 그리고 오너쉽, 소유라는 단어의 개념이 혼동됩니다. 46분 40초에서 pawn의 ' 오너쉽 ', 50분의 표에서 클라 ' 소유 ', 서버 ' 소유 '에서의 ' 오너쉽 '과 ' 소유 '는 해당 프로세스가 해당 엑터에서 isLocalControlled가 true가 나와 컨트롤 권한을 가지고 있다는 의미이고, Client, Server RPC의 사용 조건인 엑터의 ' 오너쉽 ' 여부에서의 ' 오너쉽 '은 최상위 오너 엑터가 커넥션을 가진 playerContoroller인 경우를 의미하는게 맞나요?
character와 controller 모두 onrep_playerstate 함수를 사용하고 있습니다. 지금 제 코드는 controller의 onrep_playerstate 에서는 playerstate를 초기화하고, playerstate 안에 변수 값들을 HUD에 바인드 하고 있고 character의 onrep_playerstate 에서는 playerstate의 변수 안에 값을 넣는 상황인데 controller->character라는 기존의 프레임워크 실행 순서와는 다르게 onrep_playerstate 함수가 리슨서버의 클라이언트 입장에서 매번 실행 순서가 뒤바뀌는 경우가 발생합니다. 이유를 찾아보니 playerstate를 서버에서 클라이언트로 리플리케이트하는데 매번 지연속도가 다르다고 하는 것 같은데 이럴 경우는 어떻게 해야할까요? settimer를 사용하는 방법은 지양되는 방식이라는 의견이 많아서 다른 해결방법을 모르겠습니다.
안녕하세요. 블록 태그 관련해서 질문 있습니다.강의에서는 각 어빌리티별로 블록할 태그들을 설정하고 있는데 이런 방식이라면 새로운 태그를 추가할 때마다 기존에 있던 어빌리티들의 블록할 태그에 해당 태그를 일일이 추가해줘야 하잖아요? enum 클래스를 사용해서 state패턴으로 구현하는 방법처럼 더 나은 방식은 없을까요?일반적으로 게임에서는 두 가지 이상의 행위를 동시에 하는 것은 막고 있기 때문에 블록 태그 같은 부정문 방식보다는 state패턴처럼 긍정문 방식이 더 좋을 것 같아 질문합니다.
안녕하세요 강의를 보고 열심히 따라해보고 있습니다. 뷰포트에서 play 버튼을 누르는데, 항상 origin 위치로 초기화가 되더라구요. 강사님께서 마지막 슬라임 경주 강의 찍으실 때 보면, play 버튼 누르면 편집하던 위치에서 시작되던데, 어떻게 그렇게 할 수 있나요?
안녕하세요 좋은 강의 정말 감사드립니다. 다름이 아니라 delegate wrapper 사용 이유가 궁금하여 질문 드립니다. 선생님께서 delegate를 다수 배열로 관리하기 해야 하는데 이 자체를 인자로 쓸 수 없다고 하신 부분이 잘 이해가 되지가 않습니다. 어느 부분을 인자로 쓸 수 없는지에 대해 구체적으로 말씀해주실 수 있나요? FTakeItemDelegateWrapper 랩퍼 구조체가 아닌 FOnTakeItemDelegate 델리게이트를 TArray 배열에 넣을 수도 있고 이런 식으로 바인드도 되고, 실행도 되는데 왜 델리게이트 랩퍼 구조체를 따로 만들어야하는지가 궁금합니다.