ue4 绕轴旋转 RotateAngleAxis,SetActorLocation
1 新建c++类MyActor
2 MyActor.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
UCLASS()
class ROTATE_API AMyActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AMyActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
public:
// Called every frame
virtual void Tick(float DeltaTime) override;
float AngleAxis;
};
MyActor.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "MyActor.h"
// Sets default values
AMyActor::AMyActor()
{
// Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it.
PrimaryActorTick.bCanEverTick = true;
}
// Called when the game starts or when spawned
void AMyActor::BeginPlay()
{
Super::BeginPlay();
AngleAxis = 0;
}
// Called every frame
void AMyActor::Tick(float DeltaTime)
{
// 旋转中心点
FVector NewLocation = FVector(0, 0, 200);
//声明移动半径的大小
FVector Radius = FVector(200, 0, 0);
// 每帧旋转增加角度
AngleAxis++;
// prevent number from growind indefinitely
if (AngleAxis > 360.0f) {
AngleAxis = 1;
}
/*
*RotateAngleAxis(Angle,Axis)
*Angle 旋转角度
*Axis 旋转轴
**/
FVector RotateValue = Radius.RotateAngleAxis(AngleAxis, FVector(0, 0, 1));
NewLocation.X += RotateValue.X;
NewLocation.Y += RotateValue.Y;
NewLocation.Z += RotateValue.Z;
//移动到指定位置
SetActorLocation(NewLocation);
}
3 actor 下添加组件 sphere 并运行程序