初始提交: UE5.3项目基础框架
This commit is contained in:
@ -0,0 +1,151 @@
|
||||
// Copyright 2020-2024 CesiumGS, Inc. and Contributors
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "CesiumGlobeAnchoredActorComponent.h"
|
||||
#include "CoreMinimal.h"
|
||||
#include "CesiumOriginShiftComponent.generated.h"
|
||||
|
||||
class UCesiumGlobeAnchorComponent;
|
||||
|
||||
/**
|
||||
* Indicates how to shift the origin as the Actor to which a
|
||||
* CesiumOriginShiftComponent is attached moves.
|
||||
*/
|
||||
UENUM(BlueprintType)
|
||||
enum class ECesiumOriginShiftMode : uint8 {
|
||||
/**
|
||||
* This component is disabled and will have no effect.
|
||||
*/
|
||||
Disabled,
|
||||
|
||||
/**
|
||||
* The origin of the CesiumGeoreference will be changed when the Actor enters
|
||||
* a new sub-level, but it will otherwise not be modified as the Actor moves.
|
||||
* Any objects that are not anchored to the globe with a
|
||||
* CesiumGlobeAnchorComponent will appear to move when the Actor enters a
|
||||
* sub-level.
|
||||
*/
|
||||
SwitchSubLevelsOnly,
|
||||
|
||||
/**
|
||||
* The origin of the CesiumGeoreference will change as the Actor moves in
|
||||
* order to maintain small, precise coordinate values near the Actor, as well
|
||||
* as to keep the globe's local "up" direction aligned with the +Z axis. Any
|
||||
* objects that are not anchored to the globe with a
|
||||
* CesiumGlobeAnchorComponent will appear to move whenever the origin changes.
|
||||
*
|
||||
* When using this mode, all Cesium3DTileset instances as well as any Actors
|
||||
* with a CesiumGlobeAnchorComponent need to be marked Movable, because these
|
||||
* objects _will_ be moved when the origin is shifted.
|
||||
*/
|
||||
ChangeCesiumGeoreference,
|
||||
};
|
||||
|
||||
/**
|
||||
* Automatically shifts the origin of the Unreal world coordinate system as the
|
||||
* object to which this component is attached moves. This improves rendering
|
||||
* precision by keeping coordinate values small, and can also help world
|
||||
* building by keeping the globe's local up direction aligned with the +Z axis.
|
||||
*
|
||||
* This component is typically attached to a camera or Pawn. By default, it only
|
||||
* shifts the origin when entering a new sub-level (a Level Instance Actor with
|
||||
* a CesiumSubLevelComponent attached to it). By changing the Mode and Distance
|
||||
* properties, it can also shift the origin continually when in between
|
||||
* sub-levels (or when not using sub-levels at all).
|
||||
*
|
||||
* It is essential to add a CesiumGlobeAnchorComponent to all other non-globe
|
||||
* aware objects in the level; otherwise, they will appear to move when the
|
||||
* origin is shifted. It is not necessary to anchor objects that are in
|
||||
* sub-levels, because the origin remains constant for the entire time that a
|
||||
* sub-level is active.
|
||||
*/
|
||||
UCLASS(ClassGroup = "Cesium", Meta = (BlueprintSpawnableComponent))
|
||||
class CESIUMRUNTIME_API UCesiumOriginShiftComponent
|
||||
: public UCesiumGlobeAnchoredActorComponent {
|
||||
GENERATED_BODY()
|
||||
|
||||
#pragma region Properties
|
||||
private:
|
||||
/**
|
||||
* Indicates how to shift the origin as the Actor to which this component is
|
||||
* attached moves.
|
||||
*/
|
||||
UPROPERTY(
|
||||
EditAnywhere,
|
||||
BlueprintReadWrite,
|
||||
BlueprintGetter = GetMode,
|
||||
BlueprintSetter = SetMode,
|
||||
Category = "Cesium",
|
||||
Meta = (AllowPrivateAccess))
|
||||
ECesiumOriginShiftMode Mode = ECesiumOriginShiftMode::SwitchSubLevelsOnly;
|
||||
|
||||
/**
|
||||
* The maximum distance between the origin of the Unreal coordinate system and
|
||||
* the Actor to which this component is attached. When this distance is
|
||||
* exceeded, the origin is shifted to bring it close to the Actor. This
|
||||
* property is ignored if the Mode property is set to "Disabled" or "Switch
|
||||
* Sub Levels Only".
|
||||
*
|
||||
* When the value of this property is 0.0, the origin is shifted continuously.
|
||||
*/
|
||||
UPROPERTY(
|
||||
EditAnywhere,
|
||||
BlueprintReadWrite,
|
||||
BlueprintGetter = GetDistance,
|
||||
BlueprintSetter = SetDistance,
|
||||
Category = "Cesium",
|
||||
Meta = (AllowPrivateAccess))
|
||||
double Distance = 0.0;
|
||||
#pragma endregion
|
||||
|
||||
#pragma region Property Accessors
|
||||
public:
|
||||
/**
|
||||
* Gets a value indicating how to shift the origin as the Actor to which this
|
||||
* component is attached moves.
|
||||
*/
|
||||
UFUNCTION(BlueprintGetter)
|
||||
ECesiumOriginShiftMode GetMode() const;
|
||||
|
||||
/**
|
||||
* Sets a value indicating how to shift the origin as the Actor to which this
|
||||
* component is attached moves.
|
||||
*/
|
||||
UFUNCTION(BlueprintSetter)
|
||||
void SetMode(ECesiumOriginShiftMode NewMode);
|
||||
|
||||
/**
|
||||
* Gets the maximum distance between the origin of the Unreal coordinate
|
||||
* system and the Actor to which this component is attached. When this
|
||||
* distance is exceeded, the origin is shifted to bring it close to the Actor.
|
||||
* This property is ignored if the Mode property is set to "Disabled" or
|
||||
* "Switch Sub Levels Only".
|
||||
*
|
||||
* When the value of this property is 0.0, the origin is shifted continuously.
|
||||
*/
|
||||
UFUNCTION(BlueprintGetter)
|
||||
double GetDistance() const;
|
||||
|
||||
/**
|
||||
* Sets the maximum distance between the origin of the Unreal coordinate
|
||||
* system and the Actor to which this component is attached. When this
|
||||
* distance is exceeded, the origin is shifted to bring it close to the Actor.
|
||||
* This property is ignored if the Mode property is set to "Disabled" or
|
||||
* "Switch Sub Levels Only".
|
||||
*
|
||||
* When the value of this property is 0.0, the origin is shifted continuously.
|
||||
*/
|
||||
UFUNCTION(BlueprintSetter)
|
||||
void SetDistance(double NewDistance);
|
||||
#pragma endregion
|
||||
|
||||
public:
|
||||
UCesiumOriginShiftComponent();
|
||||
|
||||
protected:
|
||||
virtual void TickComponent(
|
||||
float DeltaTime,
|
||||
ELevelTick TickType,
|
||||
FActorComponentTickFunction* ThisTickFunction) override;
|
||||
};
|
||||
Reference in New Issue
Block a user