14. 파티클과 사운드를 이용한 패링 연출 효과

2023. 9. 29. 19:55·[게임 개발] 개발 일지/RPG

서론

이번 포스팅에서는 저번에 구현한 방어를 이용한 패링 시스템에 이어서
다양한 연출들로 패링의 결과를 알기 쉽게 하는것이 목표입니다.

구현전에 생각한 내용으로는 패링 시 애니메이션들이 느려지고 화면을 줌인시켜 유저에게 패링이 되었다는 사실을
알려주는 효과를 연출하고 추가로 생각한 내용은 파티클 효과와 무기가 방패에 부딪히는 소리가 나면 멋있겠다는
생각을 하였습니다.

 


구현 전 설정

연출을 몬스터의 ApplyStun 함수에 구현하여 몬스터의 스턴이 성공적으로 적용 되었다면 연출을 적용할
계획을 세웠지만 캐릭터의 위치에서 파티클 효과를 낸다거나, 캐릭터의 방어로 인해서 연출 효과가
생기는데 몬스터 클래스에서 구현하는것이 이상해서 ApplyStun의 반환형을 bool 형으로 바꿔주었습니다.

 

bool ARPGEnemy::ApplyStun()
{
	if (AnimInstance->GetIsAttacking())
	{
    ...
    
		return true;
	}

	return false;
}

 다음과 같이 몬스터의 공격 중 충돌처리를 하여 스턴에 대한 조건을 만족하면 true,  아니라면 false를 반환하게 하도록

구조를 변경하였습니다.

 


연출효과 구현

RPGCharacter.cpp

...

        for (auto const& OutHitResult : OutHitResults)
		{
			IRPGAnimationDefenseInterface* WidgetInterface;
			WidgetInterface = Cast<IRPGAnimationDefenseInterface>(OutHitResult.GetActor());\
			if(WidgetInterface->ApplyStun())
			{
				DefenseResult = true;
			}
		}

		// 방어가 성공적으로 진행 되었을 경우
		if (DefenseResult)
		{
			// 파티클 생성
			UGameplayStatics::SpawnEmitterAtLocation(GetWorld(), DefenseParticle, Start);

			// 방어 성공 시 연출 효과
			float TimeSlowDilation = 0.3f; // 얼마만큼 슬로우
			float TimeSlowDelay = 1.0f; // 몇초동안 슬로우

			GetWorldSettings()->SetTimeDilation(TimeSlowDilation);
			SpringArmComp->TargetArmLength = 500.f;
			UGameplayStatics::PlaySound2D(this, DefenseSoundCue);
			
			FTimerHandle TimeSlowTimerHandle;
			GetWorldTimerManager().SetTimer(
				TimeSlowTimerHandle,
				[&]() {
					GetWorldSettings()->SetTimeDilation(1.0f);
					SpringArmComp->TargetArmLength = 1000.f;
				},
				TimeSlowDilation / TimeSlowDelay,
				false);
		}
        
 ...

먼저 스턴을 검사할 액터에 대해서 ApplyStun 함수를 인터페이스를 통해 호출해 bool형의 반환값을 가져옵니다.

반환값을 통해 true라는 조건이 통과 되었으면 공격 처리를 위한 원의 시작지점인 Start에 파티클을 생성하고
스프링암의 길이를 줄여서 카메라가 캐릭터쪽으로 당겨지도록 만들어주어서 줌인 효과를 적용합니다.


이후 SetTimeDilation을 통해 월드의 시간을 느리게 만들어 줍니다.
느리게 만들어준 시간은 일정시간이 지나면 풀리게끔 해야하기 떄문에 타이머함수를 람다함수로 선언하여
1초의 시간 뒤에 월드의 시간과 스프링암의 길이를 원상태로 복구시킵니다.

이 때 타이머의 시간도 월드 시간의 영향을 받기 때문에 (타이머 발동 시간 / 느려진 월드 시간) 식을 이용해서
느려진만큼 시간값의 보정을 구해서 적용하였습니다.

 


구현 결과

연출을 적용하기 전, 스턴에 대한 구분이 명확하지 않았던 모습입니다.

 

다양한 연출을 적용하여 몬스터가 스턴 상태임을 명확히 알 수 있습니다.
동영상을 하나 첨부하여 패링시 소리까지 들려드리겠습니다!

 

 


다음 포스팅에서는 캐릭터와 몬스터의 공격시 사운드, 발자국 소리, 점프 소리를 구현하여
전투에 대한 부분을 좀 더 디테일하게 다듬어 보겠습니다.

감사합니다!

저작자표시 (새창열림)

'[게임 개발] 개발 일지 > RPG' 카테고리의 다른 글

16. 몬스터 리스폰 구현과 맵 적용  (0) 2023.09.30
15. 피격 파티클 추가, 행동에 사운드 추가  (0) 2023.09.30
13. 방어 액션과 패링 기능의 구현  (0) 2023.09.27
12. AI를 이용한 몬스터의 공격  (0) 2023.09.25
11. AI를 이용한 캐릭터 탐지  (0) 2023.09.24
'[게임 개발] 개발 일지/RPG' 카테고리의 다른 글
  • 16. 몬스터 리스폰 구현과 맵 적용
  • 15. 피격 파티클 추가, 행동에 사운드 추가
  • 13. 방어 액션과 패링 기능의 구현
  • 12. AI를 이용한 몬스터의 공격
람팜팜~
람팜팜~
:)
  • 람팜팜~
    RumPumPum
    람팜팜~
  • 전체
    오늘
    어제
    • 전체 (123)
      • 🎵 일상 (2)
      • JAVA (5)
        • 김영한의 자바 입문 (3)
      • JavaScript (12)
      • ---------------------------.. (0)
      • [게임 개발] 포트폴리오 (2)
        • RPG (1)
        • 슈터-플랫포머 (1)
      • [게임 개발] 개발 일지 (28)
        • RPG (25)
        • TopDownProject (3)
      • [게임 개발] 언리얼엔진 공부 (9)
        • 이득우의 언리얼 프로그래밍 Part.1 (6)
        • 이득우의 언리얼 프로그래밍 Part.2 (1)
        • 개인 메모 (2)
      • [게임 개발] 알고리즘 공부 (60)
        • 프로그래머스 (8)
        • 백준 (52)
        • 개인 메모 (0)
      • [게임 개발] CPP 공부 (2)
        • 이것이 C++ 이다 (1)
        • Effective C++ (0)
        • Effective Modern C++ (0)
        • 홍정모 그래픽스 새싹코스 (1)
      • [게임 개발] CS 공부 (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      dfs
      메모리구조
      누적합
      브루트포스
      프로세스
      우선순위 큐
      해시
      그리디
      데드락
      스레드
      슬라이딩 윈도우
      투포인터
      dp
      역참조
      context switching
      참조자
      문자열
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    람팜팜~
    14. 파티클과 사운드를 이용한 패링 연출 효과
    상단으로

    티스토리툴바