[Unreal_C++_DarkSoul]#12_문제 해결, Targeting 회전 속도

2022. 12. 25. 11:41· 개인프로젝트
목차
  1.  
  2. [Unreal_C++_DarkSoul]#12_Targeting 회전 속도

 

[Unreal_C++_DarkSoul]#12_Targeting 회전 속도

 

Player의 Targeting 동작 수행 시 발생하는 부자연스러운 회전 속도 문제를 해결합니다.

Unreal 포트폴리오 작업 과정을 기록합니다.

 


 

Overview

 

  1. 문제
  2. 해결
  3. 결과 화면

 

문제

 

  1. Player의 Targeting 동작 수행 과정에서 발생하는 부자연스러운 회전 동작
  2. Player의 Targeting 동작으로 인해 부자연스러운 연출이 불가피합니다.

 

문제 해결

 

 

[Unreal_C++_DarkSoul]#6_기능 구현, Targeting 기능

[Unreal_C++_DarkSoul]#6_Targeting 기능 Player 근방의 적들을 인지하고, 선택된 적 객체를 Focusing 하는 기능을 구현합니다. 포트폴리오 진행 사항을 기록하기 위한 포스팅입니다. Overview 먼저, Player 근방의

webddevys.tistory.com

 

1. TargetComponent::FocusOnTarget()

/*****************************************************************************************
* 
*	[Remark]:	Targeting 선형 보간
*
*	목적:
*		Target Lock이 켜져 있을 때, Target Enemy로 선정된  Actor를 바라보도록 합니다.
*	설명:
*		#1 Player Location과 Enemy Location을 활용하여 LookAtRotation 값을 구합니다.
*		#2 Camera의 지나치게 빠른 최전으로 어지러움 증상을 호소하기 이전에 RInterpTo 를 통해 선형 보간 적용 
*		#3 Controller Rotation을 위에서 구한 회전 값으로 설정합니다.
*		
*****************************************************************************************/

void UC_TargetComponent::FocusOnTarget(float DeltaTime)
{

	AActor* OwnerActor = GetOwner();
	CheckNull(OwnerActor);

	ACharacter* OwnerCharacter = Cast<ACharacter>(OwnerActor);
	CheckNull(OwnerCharacter);

	CheckFalse(TargetingLockOn);
	CheckNull(TargetEnemy);

	// #1. FindLookAtRotation
	APlayerCameraManager* CameraManager = GetWorld()->GetFirstPlayerController()->PlayerCameraManager;
	FVector Start = CameraManager->GetCameraLocation();
	FVector Target = TargetEnemy->GetActorLocation();

	// #2. Interpolation
	FRotator StartRotation = OwnerCharacter->GetControlRotation();
	FRotator TargetRotation = UKismetMathLibrary::FindLookAtRotation(Start, Target);

	FRotator FinalRotation = UKismetMathLibrary::RInterpTo(StartRotation, TargetRotation, DeltaTime, InteropSpeed);

	OwnerCharacter->GetController()->SetControlRotation(FRotator(0.f, FinalRotation.Yaw, 0.f));


}

 

Details

 

  1. Target Component의 "FocusOnTarget" 함수는 Player의 회전 값을 "FindLookAtRotation()"을 통해 변환합니다.
  2. Player의 위치 --- Target 적의 위치를 통해 회전 값을 얻어 Player의 회전 값을  변환하는 과정에서 Player의 카메라가 갑작스럽게 회전하여 부자연스러운 연출이 불가피해 보입니다.
  3. 따라서, "RInterpTo()" 함수를 통해 현재 회전 값에서 목표 회전 값으로 "선형 보간"을 통해 부드럽게 변환하도록 연출합니다. 

 

결과 화면

 

 

 

 

 

'개인프로젝트' 카테고리의 다른 글

[Unreal_C++_DarkSoul]#14_문제 해결, Actor Component 간 소통  (0) 2023.03.26
[Unreal_C++_DarkSoul]#13_기능 구현, Impact Effect  (0) 2023.02.05
[Unreal_C++_DarkSoul]#11_기능 구현, Parkour(Vaulting)  (0) 2022.12.25
[Unreal_C++_DarkSoul]#10_문제 해결, AIController  (0) 2022.12.25
[Unreal_C++_DarkSoul]#9_기능 구현, Status Effect 기능  (0) 2022.12.18
  1.  
  2. [Unreal_C++_DarkSoul]#12_Targeting 회전 속도
'개인프로젝트' 카테고리의 다른 글
  • [Unreal_C++_DarkSoul]#14_문제 해결, Actor Component 간 소통
  • [Unreal_C++_DarkSoul]#13_기능 구현, Impact Effect
  • [Unreal_C++_DarkSoul]#11_기능 구현, Parkour(Vaulting)
  • [Unreal_C++_DarkSoul]#10_문제 해결, AIController
Hardii2
Hardii2
개발 블로그Hardii2 님의 블로그입니다.
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • BFS
  • Unreal Blueprint
  • set
  • 개발
  • 정렬
  • 기술 질문
  • Effective C++
  • 트리
  • 디자인 패턴
  • 우선순위 큐
  • C++
  • 최단 경로
  • stl
  • 그래프
  • dfs
  • DP
  • unreal
  • BOJ
  • programmers
  • 알고리즘

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Unreal_C++_DarkSoul]#12_문제 해결, Targeting 회전 속도
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.