티스토리 뷰
Unreal Engine 4 프로그래밍 c++/기능
Unreal RecoilSystem c++ 적용하기. (CurveVector를 이용한 방법.)
코닥쿠 2022. 12. 16. 16:51반응형
CurveVector를 이용하여 시스템에 적용시킨 방법입니다.
RecoilSystem.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Components/ActorComponent.h"
#include "RecoilComponent.generated.h"
//CurveVector를 이용하기 위해서는 아래와 같이 추가해줘야 사용이 가능함.//
class UCurveVector;
UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )
class PROJECT_API URecoilComponent : public UActorComponent
{
GENERATED_BODY()
public:
// Sets default values for this component's properties
URecoilComponent();
public:
// Called every frame
virtual void TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction) override;
private:
//총의 작용이 끝난후 작용시키기위해 사용함//
FTimerHandle RecoilTimer;
//CurveVector의 값을 가져오면 FVector가 반환되기 때문에 선언해줌.//
FVector RecoilCurve_Vector;
//CurveVector의 키값을 가져오기 위해서는 정확한 값이 필요하기때문에 선언.//
float Recoil_Index = 0;
ACharacter* Player;
public:
//타이머 시간.//
float WaitTime = 0.15f;
public:
//호출할 함수들.//
void SetPlayer(ACharacter* Owner) { Player = Cast<ACharacter>(Owner); }
void UpdateRecoil();
void ApplyRecoil(UCurveVector* CurveVector);
void StopRecoil();
void ResetRecoil();
};
RecoilSystem.cpp
#include "RecoilComponent.h"
#include "GameframeWork/Character.h"
#include "Curves/CurveVector.h" //CurveVector함수를 사용하기 위해 추가시켜줘야함.//
#include "Kismet/GameplayStatics.h"
// Sets default values for this component's properties
URecoilComponent::URecoilComponent()
{
// Set this component to be initialized when the game starts, and to be ticked every frame. You can turn these features
// off to improve performance if you don't need them.
PrimaryComponentTick.bCanEverTick = true;
// ...
}
// Called every frame
void URecoilComponent::TickComponent(float DeltaTime, ELevelTick TickType, FActorComponentTickFunction* ThisTickFunction)
{
Super::TickComponent(DeltaTime, TickType, ThisTickFunction);
// ...
//계속 업데이트하는 함수.//
UpdateRecoil();
}
//컨트롤러의 pitch, yaw를 이용한 반동효과 업데이트 함수//
void URecoilComponent::UpdateRecoil()
{
Player->AddControllerPitchInput(RecoilCurve_Vector.Y);
Player->AddControllerYawInput(RecoilCurve_Vector.Z);
}
//Curve를 이용한 값가져와 적용시키기//
void URecoilComponent::ApplyRecoil(UCurveVector* CurveVector)
{
//인덱스에 해당하는 키값을 가져옴//
Recoil_Index++;
RecoilCurve_Vector = CurveVector->GetVectorValue(Recoil_Index);
//타이머를 사용해 총의 상호작용을 멈췄을때 호출되는거임//
GetWorld()->GetTimerManager().SetTimer(RecoilTimer, this, &URecoilComponent::StopRecoil, WaitTime);
}
//총이 발사를 멈췄을때 잠깐 총이 아래로 내려가게 0.1f값을 줘서 내려오게 만듬//
void URecoilComponent::StopRecoil()
{
//GEngine->AddOnScreenDebugMessage(-1, 3.f, FColor::White, __FUNCTION__);
//RecoilCurve_Vector = FVector(0);
Recoil_Index = 0;
RecoilCurve_Vector = FVector(0.f, 0.1f, 0.f);
//그렇게 타이머가 지나면 ResetRecoil을 호출함//
GetWorld()->GetTimerManager().SetTimer(RecoilTimer, this, &URecoilComponent::ResetRecoil, WaitTime);
}
//Vector값을 완전히 0.f로 만들어 멈추게 만듬//
void URecoilComponent::ResetRecoil()
{
RecoilCurve_Vector = FVector(0);
}
FirstPerson(일인칭)같은경우에는 메쉬가 카메라에 붙어있기때문에 RInterp를 이용하여 반동을 이용할수 있지만.
ThirdPerson(삼인칭)같은 Pawn은 메쉬가 있고 카메라가 붙어있기때문에 따로 움직인다. 그래서 ControllerRot을 이용하여
Player->AddControllerPitchInput(RecoilCurve_Vector.Y);
Player->AddControllerYawInput(RecoilCurve_Vector.Z);
부드럽게 위로 이동시켜줍니다.
**AddController***Input같은경우에는 값이 0일경우 아무런 작용이 안이루어짐.**
c++ UCurve+ (Vector, float, LinearColor) 사용하기.
Curve는 다양하게 적용이 가능하다 Timeline으로 이용한 커브로도 사용할수 있으며 자신이 원하는 값도 사용할 수 있다. .h UCurveFloat* CurveFloat; UCurveVector* CurveVector; UCurveLinearColor* CurveLinearColor; .cpp #inc
codakcoo.tistory.com
전에 업로드한 커브에셋 이용하는 방법.
반응형
'Unreal Engine 4 프로그래밍 c++ > 기능' 카테고리의 다른 글
UE4 TimelineComponent c++. (0) | 2023.08.08 |
---|---|
UE4 c++ Material 접근하기. (0) | 2023.07.06 |
Unreal c++ Interface uint + n 사용시 주의점. (0) | 2022.06.24 |
c++ UCurve+ (Vector, float, LinearColor) 사용하기. (3) | 2022.02.23 |
언리얼 interface c++ 호출방법 (0) | 2022.01.25 |
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Multiplayer
- 영화리뷰
- ReplicatedUsing
- c++
- LockonSystem
- 언리얼엔진#FPS
- 언리얼
- Direct3D
- 게임
- html5
- 언리얼#c++#기능
- 포트폴리오
- 언리얼#게임
- directx3d
- DirectX12
- DirectX
- UnReal
- 게임프로그래밍
- 시애틀의 잠 못 이루는 밤
- Replicated
- Direct12
- 포레스트 검프
- RPC
- 4.27
- 언리얼#프로그래밍#c++#포트폴리오준비#블루프린트->c++전환
- 1993
- ActorComponent
- 프로그래밍
- Multipalyer
- 언리얼#c++#Interface
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
글 보관함