※ 개인적인 공부를 위해 포스팅 하는 글입니다.
# 적으로 쓸 임시 엑터 생성
지금은 에디터에서 그냥 클릭 해본 상태인데. 인게임에서도 마우스 커서를 가져다 올렸을 때 해당 기능이 되길 원한다.
ㆍ 인터페이스를 상속받는 클래스를 하나 만들어준다.
ㆍ 다중상속은 C++에서 지원은 하나 별로 권장하진 않는다.. 하지만 인터페이스로 추상적으로 되어있는 클래스는 다중상속을 받아 구현해도 별 문제가 없다.
ㆍ 해당기능은 몬스터든 플레이어든 둘 다 작동되길 원하느 그냥 캐릭터 클래스에서 상속을 받아서 구현부를 작성해줬다.
ㆍ 뭐 일단은 별거없이 bool로 분기점만 나눠둔 상태
#R1PlayerController
ㆍ 컨트롤에 관련된 것들은 PlayerController 클래스에서 해주고 있으니 거기에 해당 변수를 추가해 줬다.
ㆍ 마우스에 따라 외곽선이 생기는건 필연적으로 Tick으로 연산할 수 밖에 없으니 그와 관련된 함수를 2개 파줬다.
잊지 말고 Super:: 해주고
void AR1PlayerController::TickCursorTrace()
{
if (bMousePressed)
{
return;
}
FHitResult OutCursorHit;
if (GetHitResultUnderCursor(ECollisionChannel::ECC_Visibility, true, OUT OutCursorHit) == false)
{
return;
}
AR1Character* LocalHighlightActor = Cast<AR1Character>(OutCursorHit.GetActor());
//커서가 누구를 주시하고 있느냐... 로컬 히트가 null이면 마우스가 몬스터를 주시하고 있지 않는 상황.
//Cast는 다이나믹 캐스트같은것이므로 실패시 nullptr을 반환함
if (LocalHighlightActor == nullptr)
{
//1. 하이라이트가 있었는데 마우스가 빠져서 없어지는 상황
if (HighlightActor)
{
HighlightActor->UnHighlight();
}
}
else
{
if (HighlightActor)
{
//있긴 있었는데, 빈공간에서 생긴게 아닌 있던애에서 다른애로 바뀐 상황
if (HighlightActor != LocalHighlightActor)
{
HighlightActor->UnHighlight();
LocalHighlightActor->Highlight();
}
//반복문에 안들어온다면 동일한 애 이므로 무시
}
else
{
//원래 아무도 없었고 새로운 타겟
LocalHighlightActor->Highlight();
}
}
HighlightActor = LocalHighlightActor;
}
ㆍ 로직에 대한 포스팅은 주석으로 대체
앤진으로 돌아와서
이렇게 세팅하면
ㆍ 커서는 캡처가 안돼서 대체...ㅎㅎ 암튼 잘 작동한다
※ 그럴싸한 리소스를 넣는다면 더 잘뽑히겠다
# 추적과 공격
ㆍ 기존 코드에 이제 Tick에서 업데이트 되고있는 타겟에 대한 정보를 추가해 줬다.
ㆍ 이제 적을 향해 커서를 찍으면 아무 기능도 작동하지 않는다. 또한 마우스를 누르고있는 상태에서 다른곳을 드래그했다 때도 마찬가지로 아무 기능도 작동하지 않는 상태로 만들어 두었다.
ㆍ 틱 함수에 추가할 함수를 하나 더 만들어줬다.
ㆍ 근데 PlayerController 클래스에서 Player를 좀 많이 사용하는 것 같으니 캐싱받을 수 있는 변수를 하나 만들어서 BeginPlay 에서 할당해주자.
잘 된다. 이제 실제 공격이 되게끔 그냥 몽타주를 만들어서 재생시켜 보자
여기 들어가면되겠다.
ㆍ 눌렀을때 떘을때에 대한 자세한 로직 처리도 추후 필요하겠다. 일단 몽타주만 재생시켜주자
#스킬쓰는데 이동하지 않기... 이런 상태에 관련된 것들은 따로 enum을 이용해 관리하는게 좋다.
ㆍ 따로 클래스를 파준건 얘를 include했을때 데이터가 크기 않길원하기 떄문. 아무것도 상속받지 않은 클래스로 만들어서 다 지워주고 enum만 생성해준다.
ㆍ 움직이는 중엔 공격하면 안된다.
# 그이후엔 그냥 로직이겠다.
대충 이런 느낌인데 로직이 너무 길어서 자세한 포스팅은 생략
※ 핵심은 상태를 분리해주고 그 상태에 맞게 행동하는 로직이라는 것.
'언리얼엔진 > 언리얼 C++' 카테고리의 다른 글
Post Process (0) | 2024.10.23 |
---|---|
데미지 처리와 애니메이션 노티파이 (0) | 2024.10.23 |
(충돌) C++에서 충돌과 델리게이트 (1) | 2024.10.21 |
(충돌) 프리셋과 트레이스 (0) | 2024.10.21 |
충돌의 기초 (0) | 2024.10.21 |