C++과 대응시켜 알아보자. 먼저 변수 복제 옵션에서 Replicated(일반 변수복제) 와 RepNotify(콜백함수 자동생성. 즉 함수 실행형 복제 변수) 를 C++과 비교하면, 1. UPROPERTY(Replicated)C++ 역할: 서버의 변숫값이 바뀔 때 클라이언트의 변수 값도 그대로 동기화해 줍니다.블루프린트 대응: 변수 디테일 패널에서 Replication을 Replicated로 설정한 것과 같습니다.특징: 값은 조용히 바뀌지만, 값이 바뀐 순간에 별도로 실행되는 함수(알람)는 없습니다. (값이 바뀌었는지 매 프레임 체크하거나 다른 로직으로 알아채야 할 때 씁니다.)2. UPROPERTY(ReplicatedUsing = OnRep_함수)C++ 역할: 서버의 변숫값이 바뀌어 클라이언트에 도착하..
언리얼 엔진의 RPC(Remote Procedure Call, 원격 프로시저 호출)는 네트워크 멀티플레이어 환경에서 클라이언트와 서버 간의 함수를 서로 호출하기 위해 사용되는 핵심 시스템입니다.언리얼 엔진의 RPC는 복제(Replication)가 활성화된 액터(Actor) 내에서만 동작하며, 크게 세 가지 종류로 나뉩니다.1. RPC의 기본 개념 (블루프린트 관점)💡 핵심 규칙: RPC는 반드시 **네트워크 오너십(Network Ownership)**이 있는 액터(예: 플레이어 컨트롤러, 조종 중인 폰/캐릭터) 내부에서만 정상적으로 작동합니다.=> 문을 여는 예제에서 문의 블프에서 RPC를 직접호출하기 때문에, 일단 문에 접촉하는 유저에게 Owner를 지정해주는 임시 방법을 사용했지만, 임시 방편일 뿐..
동기화 모든 데이터 다 주고받아야할까? 그럴필욘 없다. 싱크를 맞춰야하는걸 다 주고받으면 너무많다. 즉, 중요한 데이터는 동기화를 해주고 중요하지 않은 데이터는 굳이 동기화가 필요가 없다. 주로 연출관련된 것들은 동기화가 필요없다. -> 카메라, 애니메이션 우리 게임에서는 무기가 떨어져있는것, 플레이어 위치나 들고 있는 총, 쏘고있는지, 탄환 P2P (옛날방식)중간 서버 없이 플레이어끼리 직접 연결되어 정보를 주고받는 방식. 유저끼리 직접 연결. p2p는 가장 간단하게 구현가능하지만, 단점이 있다. 유저가 늘어날수록 각 유저가 나머지의 모든 유저에게 동기화를 전달해야한다. 그렇기 때문에 동기화부담이 빠르게 커진다. 또 다른 치명적인 문제가 있는데, 모든 플레이어가 치팅이 가능하다. 유저1이 유저2..
SpawnActor 와 SpawnActorDeferredQ3. SpawnActor 함수와 관련된 내용으로 옳지 않은 것은?항상 결과가 성공해서 유효한 메모리 값을 반환해준다.'스폰 콜리전 처리 메소드'(Collision Handling Override) 값에 따라 성공하여 유효한 메모리를 반환할 수도, nullptr일 수도 있다.함수가 반환되는 시점에는 스폰 성공 여부가 이미 결정되어 있으므로, 반환값이 nullptr인지 그 자리에서 바로 확인할 수 있다.실시간 런타임에 스폰하는 경우, BeginPlay() 함수가 호출 완료된 후에 유효한 메모리를 반환한다.Q4. 액터의 “스폰 콜리전 처리 메서드”를 Try To Adjust Location, Don't Spawn If Still Colliding 으로 ..
애니메이션 -> 에임 오프셋 생성 AO_Rifle로 이름 지정. 블렌드스페이스와 창의 거의 똑같다. 그리드 설정하고 애니메이션을 넣어보면, 일단 안들어가는 애니메이션들이 좀 있을거다. Addictive를 넣는게 기본인데(?) Addictive애니메이션이 아니기 때문이다. 아래는 공식문서를 참고해서 Addictive 메시 스페이스 애니메이션으로 변환하는 방법이다. 애디티브 세팅 -> 메시 스페이스 베이스 포즈 타입 _> Seleted animation frame레퍼런스 프레임 인덱스 -> 0 이렇게 메시스페이스로 하면 상체의움직임에 본체가 과하게 꺾이는것을 막아준다(?) 공식문서 참고 그렇게 공식문서대로 설정하면, 해당 애니메이션이 매시 스페이스 Addictive가 되는것이다. 똑같은 속..
UMG & Widget Reflector💡UMG는 화면에 그려지는 UI를 만드는 시스템입니다. 위젯 블루프린트를 만들면 디자이너 탭에서 텍스트·이미지·버튼·프로그레스 바 같은 부품을 배치하고, 그래프 탭에서 로직을 붙입니다.배치한 부품 중 그래프에서 이름으로 접근하고 싶은 것은 따로 “변수 여부” 표시를 해줘야 목록에 나타납니다.UMG 기본 이벤트 개념 [ 이 부분은 교수님이 노션에 올려줄거임. 피격이벤트시 콜라이더생성 후 캐릭터가 콜라이더에 맞을 경우에만 피격으로 변경] Recieve Notify 노드 ->Mesh comp에 우클릭해서 핀 분할을 누르면 더 많은 옵션을 볼 수 있다. -> 해당 타이밍에 딱 한번만 충돌체크하게 하려고 지금은 Start 와 End를 같은시간으로 두고, Radiu..
델리게이트 (p.410)함수 포인터 활용. 코드의 유연성 & 종속성을 제거하는데 유용.3종류의 델리게이트DECLARE_DELEGATE하나의 함수만 등록p.416 함수포인터 연결하는 방식DECLARE_MULTICAST_DELEGATE한개가 아니라 여러개의 함수를 등록 DECLARE_DYNAMIC_DELEGATEDECLARE_DYNAMIC_MULTICAST_DELEGATE블루프린트 호환용 함수 포인터한개 or 여러개 등록바인딩 연결할 함수는 무조건 UFUNCTION() 필요사용하는 부분이 TwoParam인데 매개변수에 들어가는건 4개라 헷갈리는데, 이건 블루프린트를 생각하면 쉽다.타입과, 지정해줄(노드에서 핀 된) 값 각각 하나씩 넣어주면 된다=> Dynamic인 경우에는 매개변수의 변수 이름까지도 지정해 ..
주의 사항p. 289. 애니메이션 블루프린트를 C++에서 할당할 때, 경로 복사 (Ctrl + Shift + C) 하고 붙여넣는다./Game/MyGame/Blueprints/Enemy/ABP_Enemy.**ABP_Enemy_C**이때, 제일 마지막에 _C 를 반드시 붙여야한다. 언리얼 규칙이다.p. 307. AttackEnd 노티파이를 애니메이션 완전 끝 쪽에 배치하지 말고, 약간 앞쪽에 배치하자.너무 끝에 배치하면, 호출이 안될 수도 있다. 적 애니메이션 공격과 공격 대기는 확확바뀌는상태이다. 끊긴것처럼. 오른쪽 블렌드세팅에서 경과시간을 조절하면된다. 기본은0.2s로 되어있는데 이 뜻은 0,2초동안 Attack과 AttackDelay의 모션이 섞인애니메이션을 재생한다는것이다. 현재 이런 현상이 있는..