본문 바로가기
언리얼엔진 개발/Network

[UnrealEngine5] 네트워크 게임 만들기 What the box(4) Effect 동기화

by yeni_0224 2023. 5. 22.
728x90
반응형

기본 네트워크 세팅이 나의 주된 역할이었기 때문에 게임 플레이 중 동기화 되는 부분에 대한 작업도 해보고싶었다. 총알 이펙트가 발생하는 부분은 플레이어쪽에서 해야하지만, 공부하고싶다고 플레이어 담당자에게 요청하여 총알이펙트가 동기화 되는 과정도 작업할 수 있었다. 할 수 있는 건 할 수 있을 때 최대한 해봐야한다! 공부하는 중이니까!

마음처럼 쉽게 동기화가 되지는 않았지만 그래도 공부할 수 있음에 감사하고, 동기화에 성공했을 때 뿌듯했다.

 

구현 내용 :  플레이어가 공격할 때 총알 발사 효과를 모든 플레이어의 화면에서 보이게 할 것이다.


 1. 일단 Spawn 할 Effect 요소가 블루프린트 상에서 Replicated 체크가 되어있는지 확인해줘야한다.

혹은 완전히 코드로 구현하고자 한다면 생성자에 이렇게라도 작성해주어야한다.

	SetReplicateMovement(true);
	SetReplicates(true);

2. Spawn 되는 시점은 Damage Process에서 작업해줄 것이다.

플레이어 담당자분께서 처음에는 다른 곳에서 작업하셨지만, 동기화 작업을 위해 Fire Effect 작업은 Damage Process 함수에서 진행하도록 최종적으로 바뀌었다.

일단, 함수 세개가 만들어질 것이다.

	void Fire();
	UFUNCTION(Server, Unreliable)
	void ServerFire();
	UFUNCTION(NetMulticast, Unreliable)
	void MulticastFire();
    
	UPROPERTY(EditAnywhere)
	class UParticleSystem* fireEmitterTemplate;

UFUNCTION() 필수

Server인지 multicast인지도 꼭 적어주고

void AWhatTheBoxProjectCharacter::Fire()
{
	ServerFire();
}
void AWhatTheBoxProjectCharacter::ServerFire_Implementation()
{	
	MulticastFire();
}

처음 만들어진 Fire 함수에서는 Server Fire 함수를 호출해줄 것이고, Server에서는 Multicast 함수를 호출해줄 것이고

Fire 효과는 Multicast 함수 안에서 진행하도록 할 것이다.

그렇게 했을 때 모든 서버와 클라이언트의 화면에서 폭발 이펙트가 발생할 것이다.

void AWhatTheBoxProjectCharacter::MulticastFire_Implementation()
{
    if(curBulletCount>=0)
            {
                FTransform EmitterTrans = BoxBodyComp->GetSocketTransform(FName("FireSocket"));
                UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), fireEmitterTemplate, EmitterTrans, true);
            }
   // 후략..
}

총알 발사 위치는 플레이어 담당자분께서 설정하신 위치이다. 설정된 위치에서 총알 이펙트를 재생시킬 수 있도록 했다.

이렇게 완성된 내용을 설명하자니 너무 쉬워보여서 마음이 아프지만, 이 과정을 생각해내기까지 팀원 모두 머리를 싸맸다.

 

728x90
반응형