// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "Engine/StaticMeshActor.h"
#include "MyMovingPlatform__A.generated.h"
/**
*
*/
UCLASS()
class PUZZLEPLATFORMS_API AMyMovingPlatform__A : public AStaticMeshActor
{
GENERATED_BODY()
public:
protected:
private:
AMyMovingPlatform__A();
virtual void BeginPlay() override;
virtual void Tick(float DeltaTime) override;
//디테일 창에서 에딧이 가능하게
UPROPERTY(EditAnywhere)
float MoveSpeed = 20;
//기즈모 추가
UPROPERTY(EditAnywhere, Meta = (MakeEditWidget = true))
FVector TargetLocation;
//자신의 위치와 타겟 위치를 담음
FVector GlobalStartLocation, GlobalTargetLocation;
//나가야 할 방향
FVector Direction;
//시작 <-> 목적지까지의 거리?
float TravelLength;
};
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyMovingPlatform__A.h"
AMyMovingPlatform__A::AMyMovingPlatform__A()
{
PrimaryActorTick.bCanEverTick = true;
}
void AMyMovingPlatform__A::BeginPlay()
{
Super::BeginPlay();
//액터를 무버블로 설정한다
SetMobility(EComponentMobility::Movable);
if (HasAuthority())
{
SetReplicates(true);
SetReplicateMovement(true);
}
//시작 위치는 자신의 위치
this->GlobalStartLocation = GetActorLocation();
//도착 지점은 기즈모(타겟 로케이션)의 위치
this->GlobalTargetLocation = GetTransform().TransformPosition(TargetLocation);
//방향은 타겟 - 자신위치.. 의 normalized
this->Direction = (GlobalTargetLocation - GlobalStartLocation).GetSafeNormal();
//총 이동거리는 타겟 - 초기위치의 길이
this->TravelLength = (GlobalTargetLocation - GlobalStartLocation).Size();
}
void AMyMovingPlatform__A::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
if (HasAuthority())
{
FVector Location = GetActorLocation();
Location += Direction * DeltaTime * MoveSpeed;
SetActorLocation(Location);
float TravelSize = (Location - GlobalStartLocation).Size();
if (TravelSize > TravelLength)
{
Direction *= -1;
FVector swapTemp = GlobalStartLocation;
GlobalStartLocation = GlobalTargetLocation;
GlobalTargetLocation = swapTemp;
}
}
}
'unreal engine' 카테고리의 다른 글
[언리얼엔진] C++로 트리거함수 콜백시키기, 트리거로 다른 오브젝트 작동 (0) | 2022.07.10 |
---|---|
[언리얼엔진] C++로 트리거 재정의하기 (AddDynamic) (0) | 2022.07.10 |
[언리얼엔진] C++로 컴포넌트 생성하기 (0) | 2022.07.10 |
[언리얼엔진] Gizmo로 FVector 이동, 월드좌표로 변환 (0) | 2022.07.09 |
[언리얼엔진] Authotiry와 멀티플레이 관계 (0) | 2022.07.09 |