UDocumentation UE5.7 10.02.2026 (Source)
API documentation for Unreal Engine 5.7
SplineComponent.h
Go to the documentation of this file.
1// Copyright Epic Games, Inc. All Rights Reserved.
2
3#pragma once
4
5#include "CoreMinimal.h"
8#include "Math/InterpCurve.h"
9#include "BoxTypes.h"
10
12#include "Curves/Spline.h"
14
15#include "SplineComponent.generated.h"
16
18
21class FSceneView;
22
24UENUM(BlueprintType)
36
38UENUM()
40{
41 enum Type : int
42 {
44 World
45 };
46}
47
48UENUM()
50{
51 Unset,
52 Spline,
54};
55
56UCLASS(Abstract, MinimalAPI)
58{
60
61public:
63 virtual void InsertPoint(int32 Index, float t, bool bClosedLoop) PURE_VIRTUAL(USplineMetadata::InsertPoint, );
65 virtual void UpdatePoint(int32 Index, float t, bool bClosedLoop) PURE_VIRTUAL(USplineMetadata::UpdatePoint, );
66 virtual void AddPoint(float InputKey) PURE_VIRTUAL(USplineMetadata::AddPoint, );
67 virtual void RemovePoint(int32 Index) PURE_VIRTUAL(USplineMetadata::RemovePoint, );
68 virtual void DuplicatePoint(int32 Index) PURE_VIRTUAL(USplineMetadata::DuplicatePoint, );
69 virtual void CopyPoint(const USplineMetadata* FromSplineMetadata, int32 FromIndex, int32 ToIndex) PURE_VIRTUAL(USplineMetadata::CopyPoint, );
70 virtual void Reset(int32 NumPoints) PURE_VIRTUAL(USplineMetadata::Reset, );
71 virtual void Fixup(int32 NumPoints, USplineComponent* SplineComp) PURE_VIRTUAL(USplineMetadata::Fixup, );
72};
73
74USTRUCT()
76{
78
79 static FSplineCurves FromSplineInterface(const FSpline& InProxy)
80 {
82 NewCurve.Position = InProxy.GetSplinePointsPosition();
83 NewCurve.Rotation = InProxy.GetSplinePointsRotation();
84 NewCurve.Scale = InProxy.GetSplinePointsScale();
85 NewCurve.UpdateSpline(NewCurve.Position.bIsLooped, false);
86 return NewCurve;
87 }
88
90 UPROPERTY()
92
94 UPROPERTY()
96
98 UPROPERTY()
100
102 UPROPERTY()
103 FInterpCurveFloat ReparamTable;
104
105#if WITH_EDITORONLY_DATA
106 UPROPERTY()
108#endif
109
111 uint32 Version = 0xffffffff;
112
113 bool operator==(const FSplineCurves& Other) const
114 {
115 return Position == Other.Position && Rotation == Other.Rotation && Scale == Other.Scale;
116 }
117
118 bool operator!=(const FSplineCurves& Other) const
119 {
120 return !(*this == Other);
121 }
122
132 ENGINE_API void UpdateSpline(bool bClosedLoop = false, bool bStationaryEndpoints = false, int32 ReparamStepsPerSegment = 10, bool bLoopPositionOverride = false, float LoopPosition = 0.0f, const FVector& Scale3D = FVector(1.0f));
133
135 ENGINE_API float GetSegmentLength(const int32 Index, const float Param, bool bClosedLoop = false, const FVector& Scale3D = FVector(1.0f)) const;
136
138 ENGINE_API float GetSplineLength() const;
139};
140
163
164USTRUCT(BlueprintType)
166{
168
169 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = SplinePoint)
170 float InputKey;
171
172 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = SplinePoint)
174
175 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = SplinePoint)
176 FVector ArriveTangent;
177
178 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = SplinePoint)
179 FVector LeaveTangent;
180
181 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = SplinePoint)
183
184 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = SplinePoint)
186
187 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = SplinePoint)
189
192 : InputKey(0.0f), Position(0.0f), ArriveTangent(0.0f), LeaveTangent(0.0f), Rotation(0.0f), Scale(1.0f), Type(ESplinePointType::Curve)
193 {}
194
197 : InputKey(InInputKey), Position(InPosition), ArriveTangent(0.0f), LeaveTangent(0.0f), Rotation(0.0f), Scale(1.0f), Type(ESplinePointType::Curve)
198 {}
199
202 : InputKey(InInputKey), Position(InPosition), ArriveTangent(0.0f), LeaveTangent(0.0f), Rotation(InRotation), Scale(InScale), Type(InType)
203 {}
204
215};
216
221UCLASS(ClassGroup=Utility, ShowCategories = (Mobility), HideCategories = (Physics, Collision, Lighting, Rendering, Mobile), meta=(BlueprintSpawnableComponent), MinimalAPI)
222class USplineComponent : public UPrimitiveComponent
223{
225
227
228 UPROPERTY(EditAnywhere, Category=Points)
230
231public:
232
233 UFUNCTION(CallInEditor, Category="Spline")
234 void PopulateFromLegacy();
235
238
241
242 UPROPERTY(EditAnywhere, Replicated, Category=Points)
244
245#if WITH_EDITORONLY_DATA
247 UPROPERTY()
249
251 UPROPERTY()
253
255 UPROPERTY()
257
258 UPROPERTY()
260
261 UPROPERTY()
263#endif
264
266 UPROPERTY(EditAnywhere, Replicated, AdvancedDisplay, Category = Spline, meta=(ClampMin=4, UIMin=4, ClampMax=100, UIMax=100))
267 int32 ReparamStepsPerSegment;
268
270 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Spline)
271 float Duration;
272
274 UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, AdvancedDisplay, Category = Spline, meta=(EditCondition="!bClosedLoop"))
275 bool bStationaryEndpoints;
276
278 UPROPERTY(EditAnywhere, Replicated, Category = Spline, meta=(DisplayName="Override Construction Script"))
279 bool bSplineHasBeenEdited;
280
281 UPROPERTY()
284
289 UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = Spline)
291
293 UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = Spline)
294 bool bDrawDebug;
295
296private:
301 UPROPERTY(EditAnywhere, Replicated, Category = Spline)
302 bool bClosedLoop;
303
304 UPROPERTY(EditAnywhere, Replicated, Category = Spline, meta=(InlineEditConditionToggle=true))
305 bool bLoopPositionOverride;
306
307 UPROPERTY(EditAnywhere, Replicated, Category = Spline, meta=(EditCondition="bLoopPositionOverride"))
308 float LoopPosition;
309
310private:
311
315
319
323
327
330
331public:
333 UPROPERTY(EditAnywhere, Replicated, BlueprintReadWrite, Category = Spline, meta=(Spatial))
335
336#if WITH_EDITORONLY_DATA
338 UPROPERTY(EditAnywhere, Category = Editor, meta = (DisplayName="Editor Spline Unselected Color"))
340
342 UPROPERTY(EditAnywhere, Category = Editor, meta = (DisplayName="Editor Spline Selected Color"))
344
346 UPROPERTY(EditAnywhere, Category = Editor, meta = (DisplayName="Editor Spline Tangent Color"))
348
350 UPROPERTY(EditAnywhere, Category = Editor)
352
354 UPROPERTY(EditAnywhere, Category = Editor)
356
358 UPROPERTY(EditAnywhere, Category = Editor, meta=(InlineEditConditionToggle=true))
360
362 UPROPERTY(EditAnywhere, Category = Editor, meta=(EditCondition="bShouldVisualizeScale"))
364
368#endif
369
370 //~ Begin UObject Interface
371 ENGINE_API virtual void GetLifetimeReplicatedProps(TArray<FLifetimeProperty>& OutLifetimeProps) const override;
372 ENGINE_API virtual void Serialize(FArchive& Ar) override;
373 ENGINE_API virtual void PostLoad() override;
374 ENGINE_API virtual void OnRegister() override;
375 ENGINE_API virtual bool GetIgnoreBoundsForEditorFocus() const override;
376#if WITH_EDITOR
377 ENGINE_API virtual void PostEditChangeChainProperty(FPropertyChangedChainEvent& PropertyChangedEvent) override;
379#endif
380 //~ End UObject Interface
381
382 //~ Begin UActorComponent Interface.
383 ENGINE_API virtual TStructOnScope<FActorComponentInstanceData> GetComponentInstanceData() const override;
384 //~ End UActorComponent Interface.
385
386#if UE_ENABLE_DEBUG_DRAWING
387 //~ Begin UPrimitiveComponent Interface.
388 ENGINE_API virtual void GetUsedMaterials(TArray<UMaterialInterface*>& OutMaterials, bool bGetDebugMaterials = false) const override;
389 ENGINE_API virtual FPrimitiveSceneProxy* CreateSceneProxy() override;
390#endif
391
392#if WITH_EDITOR
393 ENGINE_API virtual void PushSelectionToProxy() override;
394#endif
395 //~ End UPrimitiveComponent Interface.
396
397 //~ Begin USceneComponent Interface
398 ENGINE_API virtual FBoxSphereBounds CalcBounds(const FTransform& LocalToWorld) const override;
399 //~ End USceneComponent Interface
400#if UE_ENABLE_DEBUG_DRAWING
402 static ENGINE_API void Draw(FPrimitiveDrawInterface* PDI, const FSceneView* View, const FInterpCurveVector& SplineInfo, const FMatrix& LocalToWorld, const FLinearColor& LineColor, uint8 DepthPriorityGroup);
403#endif
404
405 // Safe for caching spline data in the legacy format. Will auto convert data if necessary.
406 ENGINE_API FSplineCurves GetSplineCurves() const;
407 ENGINE_API FSpline GetSpline() const;
410
411 UE_EXPERIMENTAL(5.7, "Spline change notifications are experimental while the API is under active development.")
413
414 UE_EXPERIMENTAL(5.7, "Spline update notifications are experimental while the API is under active development.")
416
417 UE_EXPERIMENTAL(5.7, "Spline display setting change notifications are experimental while the API is under active development.")
419
422
423 ENGINE_API int32 GetVersion() const;
424 ENGINE_API const FInterpCurveVector& GetSplinePointsPosition() const;
425 ENGINE_API const FInterpCurveQuat& GetSplinePointsRotation() const;
426 ENGINE_API const FInterpCurveVector& GetSplinePointsScale() const;
427
428 virtual USplineMetadata* GetSplinePointsMetadata() { return nullptr; }
429 virtual const USplineMetadata* GetSplinePointsMetadata() const { return nullptr; }
430
433
435 virtual bool AllowsSpinePointLocationEditing() const { return true; }
437 virtual bool AllowsSplinePointRotationEditing() const { return true; }
439 virtual bool AllowsSplinePointScaleEditing() const { return true; }
441 virtual bool AllowsSplinePointArriveTangentEditing() const { return true; }
443 virtual bool AllowsSplinePointLeaveTangentEditing() const { return true; }
444
445 ENGINE_API void ApplyComponentInstanceData(struct FSplineInstanceData* ComponentInstanceData, const bool bPostUCS);
446 ENGINE_API void ApplyComponentInstanceData(struct FSplineComponentInstanceData* ComponentInstanceData, const bool bPostUCS);
447
450 ENGINE_API bool CanResetToDefault() const;
452
454 UFUNCTION(BlueprintCallable, Category = Spline)
455 ENGINE_API virtual void UpdateSpline();
456
458 UFUNCTION(BlueprintCallable, Category = Spline)
460
462 UFUNCTION(BlueprintCallable, Category = Spline)
463 ENGINE_API FVector GetLocationAtSplineInputKey(float InKey, ESplineCoordinateSpace::Type CoordinateSpace) const;
464
466 UFUNCTION(BlueprintCallable, Category = Spline)
467 ENGINE_API FVector GetTangentAtSplineInputKey(float InKey, ESplineCoordinateSpace::Type CoordinateSpace) const;
468
470 UFUNCTION(BlueprintCallable, Category = Spline)
471 ENGINE_API FVector GetDirectionAtSplineInputKey(float InKey, ESplineCoordinateSpace::Type CoordinateSpace) const;
472
474 UFUNCTION(BlueprintCallable, Category = Spline)
476
479
481 UFUNCTION(BlueprintCallable, Category = Spline)
483
485 UFUNCTION(BlueprintCallable, Category = Spline)
487
489 UFUNCTION(BlueprintCallable, Category = Spline)
491
493 UFUNCTION(BlueprintCallable, Category = Spline)
494 ENGINE_API float GetRollAtSplineInputKey(float InKey, ESplineCoordinateSpace::Type CoordinateSpace) const;
495
497 UFUNCTION(BlueprintCallable, Category = Spline)
499
501 UFUNCTION(BlueprintCallable, Category = Spline)
503
505 UFUNCTION(BlueprintCallable, Category = Spline)
507
509 UFUNCTION(BlueprintCallable, Category = Editor)
511
513 UFUNCTION(BlueprintCallable, Category = Editor)
515
517 UFUNCTION(BlueprintCallable, Category = Editor)
519
521 UFUNCTION(BlueprintCallable, Category = Spline)
522 ENGINE_API void SetDrawDebug(bool bShow);
523
525 UFUNCTION(BlueprintCallable, Category = Spline)
526 ENGINE_API void SetClosedLoop(bool bInClosedLoop, bool bUpdateSpline = true);
527
529 UFUNCTION(BlueprintCallable, Category = Spline)
530 ENGINE_API void SetClosedLoopAtPosition(bool bInClosedLoop, float Key, bool bUpdateSpline = true);
531
533 UFUNCTION(BlueprintCallable, Category = Spline)
534 ENGINE_API bool IsClosedLoop() const;
535
537 UFUNCTION(BlueprintCallable, Category = Spline)
539
541 UFUNCTION(BlueprintCallable, Category = Spline)
542 ENGINE_API void AddPoint(const FSplinePoint& Point, bool bUpdateSpline = true);
543
545 UFUNCTION(BlueprintCallable, Category = Spline)
546 ENGINE_API void AddPoints(const TArray<FSplinePoint>& Points, bool bUpdateSpline = true);
547
549 UFUNCTION(BlueprintCallable, Category = Spline)
550 ENGINE_API void AddSplinePoint(const FVector& Position, ESplineCoordinateSpace::Type CoordinateSpace, bool bUpdateSpline = true);
551
553 UFUNCTION(BlueprintCallable, Category = Spline)
555
557 UFUNCTION(BlueprintCallable, Category = Spline)
559
561 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use AddSplinePoint, specifying SplineCoordinateSpace::World"))
563
565 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use AddSplinePoint, specifying SplineCoordinateSpace::Local"))
567
569 UFUNCTION(BlueprintCallable, Category = Spline)
570 ENGINE_API void SetSplinePoints(const TArray<FVector>& Points, ESplineCoordinateSpace::Type CoordinateSpace, bool bUpdateSpline = true);
571
573 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use SetSplinePoints, specifying SplineCoordinateSpace::World"))
574 void SetSplineWorldPoints(const TArray<FVector>& Points);
575
577 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use SetSplinePoints, specifying SplineCoordinateSpace::Local"))
578 void SetSplineLocalPoints(const TArray<FVector>& Points);
579
581 UFUNCTION(BlueprintCallable, Category = Spline)
583
585 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use SetLocationAtSplinePoint, specifying SplineCoordinateSpace::World"))
587
589 UFUNCTION(BlueprintCallable, Category = Spline)
591
593 UFUNCTION(BlueprintCallable, Category = Spline)
595
597 UFUNCTION(BlueprintCallable, Category = Spline)
599
601 UFUNCTION(BlueprintCallable, Category = Spline)
604
606 UFUNCTION(BlueprintCallable, Category = Spline)
608
610 UFUNCTION(BlueprintCallable, Category = Spline)
611 ENGINE_API ESplinePointType::Type GetSplinePointType(int32 PointIndex) const;
612
614 UFUNCTION(BlueprintCallable, Category = Spline)
615 ENGINE_API void SetSplinePointType(int32 PointIndex, ESplinePointType::Type Type, bool bUpdateSpline = true);
616
618 UFUNCTION(BlueprintCallable, Category = Spline)
620
622 UFUNCTION(BlueprintCallable, Category = Spline)
624
626 UFUNCTION(BlueprintCallable, Category = Spline)
628
630 UFUNCTION(BlueprintCallable, Category = Spline)
632
634 UFUNCTION(BlueprintCallable, Category = Spline)
636
638 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use GetLocationAtSplinePoint, specifying SplineCoordinateSpace::World"))
640
642 UFUNCTION(BlueprintCallable, Category = Spline)
644
646 UFUNCTION(BlueprintCallable, Category = Spline)
648
650 UFUNCTION(BlueprintCallable, Category = Spline)
652
654 UFUNCTION(BlueprintCallable, Category = Spline)
656
659
661 UFUNCTION(BlueprintCallable, Category = Spline)
663
665 UFUNCTION(BlueprintCallable, Category = Spline)
667
669 UFUNCTION(BlueprintCallable, Category = Spline)
671
673 UFUNCTION(BlueprintCallable, Category = Spline)
674 ENGINE_API float GetRollAtSplinePoint(int32 PointIndex, ESplineCoordinateSpace::Type CoordinateSpace) const;
675
677 UFUNCTION(BlueprintCallable, Category = Spline)
679
681 UFUNCTION(BlueprintCallable, Category = Spline)
683
685 UFUNCTION(BlueprintCallable, Category=Spline)
687
689 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use GetLocationAndTangentAtSplinePoint, specifying SplineCoordinateSpace::Local"))
691
693 UFUNCTION(BlueprintCallable, Category=Spline)
695
697 UFUNCTION(BlueprintCallable, Category = Spline)
699
701 UFUNCTION(BlueprintCallable, Category = Spline)
703
705 UFUNCTION(BlueprintCallable, Category=Spline)
706 ENGINE_API float GetSplineLength() const;
707
709 UFUNCTION(BlueprintCallable, Category=Spline)
710 ENGINE_API void SetDefaultUpVector(const FVector& UpVector, ESplineCoordinateSpace::Type CoordinateSpace);
711
713 UFUNCTION(BlueprintCallable, Category = Spline)
714 ENGINE_API FVector GetDefaultUpVector(ESplineCoordinateSpace::Type CoordinateSpace) const;
715
717 UFUNCTION(BlueprintCallable, Category = Spline)
718 ENGINE_API float GetInputKeyValueAtTime(float Time) const;
719
723 UFUNCTION(BlueprintCallable, Category=Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use GetInputKeyValueAtDistanceAlongSpline to get input key at distance or GetTimeAtDistanceAlongSpline to get time value (normalized to duration) at distance (same logic as deprecated function)."))
725
728 UFUNCTION(BlueprintCallable, Category = Spline)
730
732 UFUNCTION(BlueprintCallable, Category = Spline)
734
736 UFUNCTION(BlueprintCallable, Category=Spline)
738
740 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use GetLocationAtDistanceAlongSpline, specifying SplineCoordinateSpace::World"))
742
744 UFUNCTION(BlueprintCallable, Category=Spline)
746
748 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use GetDirectionAtDistanceAlongSpline, specifying SplineCoordinateSpace::World"))
750
752 UFUNCTION(BlueprintCallable, Category = Spline)
754
756 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use GetTangentAtDistanceAlongSpline, specifying SplineCoordinateSpace::World"))
758
761
763 UFUNCTION(BlueprintCallable, Category = Spline)
765
767 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use GetRotationAtDistanceAlongSpline, specifying SplineCoordinateSpace::World"))
769
771 UFUNCTION(BlueprintCallable, Category = Spline)
773
775 UFUNCTION(BlueprintCallable, Category = Spline)
777
779 UFUNCTION(BlueprintCallable, Category = Spline)
780 ENGINE_API float GetRollAtDistanceAlongSpline(float Distance, ESplineCoordinateSpace::Type CoordinateSpace) const;
781
783 UFUNCTION(BlueprintCallable, Category = Spline)
785
787 UFUNCTION(BlueprintCallable, Category = Spline)
789
791 UFUNCTION(BlueprintCallable, Category=Spline)
793
795 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use GetLocationAtTime, specifying SplineCoordinateSpace::World"))
797
799 UFUNCTION(BlueprintCallable, Category=Spline)
801
803 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use GetDirectionAtTime, specifying SplineCoordinateSpace::World"))
805
807 UFUNCTION(BlueprintCallable, Category=Spline)
808 ENGINE_API FVector GetTangentAtTime(float Time, ESplineCoordinateSpace::Type CoordinateSpace, bool bUseConstantVelocity = false) const;
809
812
814 UFUNCTION(BlueprintCallable, Category=Spline)
816
818 UFUNCTION(BlueprintCallable, Category = Spline, meta = (DeprecatedFunction, DeprecationMessage = "Please use GetRotationAtTime, specifying SplineCoordinateSpace::World"))
820
822 UFUNCTION(BlueprintCallable, Category=Spline)
824
826 UFUNCTION(BlueprintCallable, Category=Spline)
828
830 UFUNCTION(BlueprintCallable, Category=Spline)
831 ENGINE_API FTransform GetTransformAtTime(float Time, ESplineCoordinateSpace::Type CoordinateSpace, bool bUseConstantVelocity = false, bool bUseScale = false) const;
832
834 UFUNCTION(BlueprintCallable, Category=Spline)
835 ENGINE_API float GetRollAtTime(float Time, ESplineCoordinateSpace::Type CoordinateSpace, bool bUseConstantVelocity = false) const;
836
838 UFUNCTION(BlueprintCallable, Category=Spline)
840
842 UFUNCTION(BlueprintCallable, Category=Spline)
843 ENGINE_API float FindInputKeyClosestToWorldLocation(const FVector& WorldLocation) const;
844
846 UFUNCTION(BlueprintCallable, Category=Spline)
848
850 UFUNCTION(BlueprintCallable, Category=Spline)
851 ENGINE_API FVector FindLocationClosestToWorldLocation(const FVector& WorldLocation, ESplineCoordinateSpace::Type CoordinateSpace) const;
852
854 UFUNCTION(BlueprintCallable, Category=Spline)
855 ENGINE_API FVector FindDirectionClosestToWorldLocation(const FVector& WorldLocation, ESplineCoordinateSpace::Type CoordinateSpace) const;
856
858 UFUNCTION(BlueprintCallable, Category = Spline)
859 ENGINE_API FVector FindTangentClosestToWorldLocation(const FVector& WorldLocation, ESplineCoordinateSpace::Type CoordinateSpace) const;
860
862 ENGINE_API FQuat FindQuaternionClosestToWorldLocation(const FVector& WorldLocation, ESplineCoordinateSpace::Type CoordinateSpace) const;
863
865 UFUNCTION(BlueprintCallable, Category = Spline)
866 ENGINE_API FRotator FindRotationClosestToWorldLocation(const FVector& WorldLocation, ESplineCoordinateSpace::Type CoordinateSpace) const;
867
869 UFUNCTION(BlueprintCallable, Category = Spline)
870 ENGINE_API FVector FindUpVectorClosestToWorldLocation(const FVector& WorldLocation, ESplineCoordinateSpace::Type CoordinateSpace) const;
871
873 UFUNCTION(BlueprintCallable, Category = Spline)
874 ENGINE_API FVector FindRightVectorClosestToWorldLocation(const FVector& WorldLocation, ESplineCoordinateSpace::Type CoordinateSpace) const;
875
877 UFUNCTION(BlueprintCallable, Category = Spline)
878 ENGINE_API float FindRollClosestToWorldLocation(const FVector& WorldLocation, ESplineCoordinateSpace::Type CoordinateSpace) const;
879
881 UFUNCTION(BlueprintCallable, Category = Spline)
882 ENGINE_API FVector FindScaleClosestToWorldLocation(const FVector& WorldLocation) const;
883
885 UFUNCTION(BlueprintCallable, Category = Spline)
886 ENGINE_API FTransform FindTransformClosestToWorldLocation(const FVector& WorldLocation, ESplineCoordinateSpace::Type CoordinateSpace, bool bUseScale = false) const;
887
889 UFUNCTION(BlueprintCallable, Category = Spline)
891
893 UFUNCTION(BlueprintCallable, Category = Spline)
895
897 UFUNCTION(BlueprintCallable, Category = Spline)
899
901 UFUNCTION(BlueprintCallable, Category = Spline)
903
905 UFUNCTION(BlueprintPure = false, Category = Spline)
907
909 UFUNCTION(BlueprintPure = false, Category = Spline)
911
913 UFUNCTION(BlueprintPure = false, Category = Spline)
915
916 /* ---- Metadata API ---- */
917
921 UFUNCTION(BlueprintCallable, Category = "Spline|Metadata")
922 ENGINE_API bool SupportsAttributes() const;
923
928 UFUNCTION(BlueprintCallable, Category = "Spline|Metadata")
930
936 UFUNCTION(BlueprintCallable, Category = "Spline|Metadata")
938
942 UFUNCTION(BlueprintCallable, Category = "Spline|Metadata")
943 ENGINE_API TArray<FName> GetFloatPropertyChannels() const;
944
949 UFUNCTION(BlueprintCallable, Category = "Spline|Metadata")
951
958 UFUNCTION(BlueprintCallable, Category = "Spline|Metadata")
960
968 UFUNCTION(BlueprintCallable, Category = "Spline|Metadata")
970
977 UFUNCTION(BlueprintCallable, Category = "Spline|Metadata")
979
987 UFUNCTION(BlueprintCallable, Category = "Spline|Metadata")
989
996 UFUNCTION(BlueprintCallable, Category = "Spline|Metadata")
998
1005 UFUNCTION(BlueprintCallable, Category = "Spline|Metadata")
1007
1013 UFUNCTION(BlueprintCallable, Category = "Spline|Metadata")
1015
1016 // todo: deprecate
1017 FInterpCurveVector& GetSplinePointsPosition() { return WarninglessSplineCurves().Position; }
1018 FInterpCurveQuat& GetSplinePointsRotation() { return WarninglessSplineCurves().Rotation; }
1019 FInterpCurveVector& GetSplinePointsScale() { return WarninglessSplineCurves().Scale; }
1020
1021protected:
1022
1024 ENGINE_API float GetSegmentLength(const int32 Index, const float Param = 1.0f) const;
1025
1028
1031
1034
1035private:
1036
1039
1049 {
1050 // Treat Index == GetNumberOfSplinePoints() as Index == 0, then clamp to valid index range.
1051 return FMath::Clamp(bClosedLoop && Index == GetNumberOfSplinePoints() ? 0 : Index, 0, GetNumberOfSplinePoints() - 1);
1052 }
1053
1058
1059 // Remove when appending _DEPRECATED to SplineCurves.
1061 {
1063 return SplineCurves;
1065 }
1066
1067 // Remove when appending _DEPRECATED to SplineCurves.
1069 {
1071 return SplineCurves;
1073 }
1074
1075 UPROPERTY()
1077
1079 bool Validate() const;
1080
1083
1085 ENGINE_API float GetSegmentParamFromLength(const int32 Index, const float Length, const float SegmentLength) const;
1086
1087 // Internal helper function called by ConvertSplineSegmentToPolyLine -- assumes the input is within a half-segment, so testing the distance to midpoint will be an accurate guide to subdivision
1089 // Internal helper function called by ConvertSplineSegmentToPolyLine -- assumes the input is within a half-segment, so testing the distance to midpoint will be an accurate guide to subdivision
1091
1092 // FSplineComponentVisualizer will access some private members when attempting to call NotifyPropertiesModified
1094};
1095
1097USTRUCT()
1099{
1101public:
1103 : bSplineHasBeenEdited(false)
1104 {}
1105 explicit FSplineInstanceData(const USplineComponent* SourceComponent)
1106 : FSceneComponentInstanceData(SourceComponent)
1107 , bSplineHasBeenEdited(false)
1108 {}
1109 virtual ~FSplineInstanceData() = default;
1110
1111 virtual bool ContainsData() const override
1112 {
1113 return Super::ContainsData() || bSplineHasBeenEdited;
1114 }
1115
1117 {
1118 Super::ApplyToComponent(Component, CacheApplyPhase);
1120 }
1121
1122 UPROPERTY()
1123 bool bSplineHasBeenEdited;
1124
1125 UPROPERTY()
1127
1128 UPROPERTY()
1129 bool bClosedLoop = false;
1130
1131 UPROPERTY()
1132 FSplineCurves SplineCurvesPreUCS;
1133};
1134
1136USTRUCT()
1138{
1140public:
1142 : bSplineHasBeenEdited(false)
1143 {}
1144 explicit FSplineComponentInstanceData(const USplineComponent* SourceComponent)
1145 : FSceneComponentInstanceData(SourceComponent)
1146 , bSplineHasBeenEdited(false)
1147 {}
1148 explicit FSplineComponentInstanceData(const USplineComponent* SourceComponent, const FSpline& SourceSpline)
1149 : FSceneComponentInstanceData(SourceComponent)
1150 , bSplineHasBeenEdited(false)
1152 {}
1154
1155 virtual bool ContainsData() const override
1156 {
1157 return Super::ContainsData() || bSplineHasBeenEdited;
1158 }
1159
1161 {
1162 Super::ApplyToComponent(Component, CacheApplyPhase);
1164 }
1165
1166 UPROPERTY()
1167 bool bSplineHasBeenEdited;
1168
1169 UPROPERTY()
1171
1172 UPROPERTY()
1173 bool bClosedLoop = false;
1174
1175 UPROPERTY()
1176 FSpline SplinePreUCS;
1177};
1178
1181
1182// Deprecated method definitions
1184inline void USplineComponent::AddSplineLocalPoint(const FVector& Position) { AddSplinePoint(Position, ESplineCoordinateSpace::Local); }
1185inline void USplineComponent::SetSplineWorldPoints(const TArray<FVector>& Points) { SetSplinePoints(Points, ESplineCoordinateSpace::World); }
1186inline void USplineComponent::SetSplineLocalPoints(const TArray<FVector>& Points) { SetSplinePoints(Points, ESplineCoordinateSpace::Local); }
1187inline void USplineComponent::SetWorldLocationAtSplinePoint(int32 PointIndex, const FVector& InLocation) { SetLocationAtSplinePoint(PointIndex, InLocation, ESplineCoordinateSpace::World); }
1188inline FVector USplineComponent::GetWorldLocationAtSplinePoint(int32 PointIndex) const { return GetLocationAtSplinePoint(PointIndex, ESplineCoordinateSpace::World); }
1189inline void USplineComponent::GetLocalLocationAndTangentAtSplinePoint(int32 PointIndex, FVector& LocalLocation, FVector& LocalTangent) const { GetLocationAndTangentAtSplinePoint(PointIndex, LocalLocation, LocalTangent, ESplineCoordinateSpace::Local); }
1190inline FVector USplineComponent::GetWorldLocationAtDistanceAlongSpline(float Distance) const { return GetLocationAtDistanceAlongSpline(Distance, ESplineCoordinateSpace::World); }
1191inline FVector USplineComponent::GetWorldDirectionAtDistanceAlongSpline(float Distance) const { return GetDirectionAtDistanceAlongSpline(Distance, ESplineCoordinateSpace::World); }
1192inline FVector USplineComponent::GetWorldTangentAtDistanceAlongSpline(float Distance) const { return GetTangentAtDistanceAlongSpline(Distance, ESplineCoordinateSpace::World); }
1193inline FRotator USplineComponent::GetWorldRotationAtDistanceAlongSpline(float Distance) const { return GetRotationAtDistanceAlongSpline(Distance, ESplineCoordinateSpace::World); }
1194inline FVector USplineComponent::GetWorldLocationAtTime(float Time, bool bUseConstantVelocity) const { return GetLocationAtTime(Time, ESplineCoordinateSpace::World, bUseConstantVelocity); }
1195inline FVector USplineComponent::GetWorldDirectionAtTime(float Time, bool bUseConstantVelocity) const { return GetDirectionAtTime(Time, ESplineCoordinateSpace::World, bUseConstantVelocity); }
1196inline FRotator USplineComponent::GetWorldRotationAtTime(float Time, bool bUseConstantVelocity) const { return GetRotationAtTime(Time, ESplineCoordinateSpace::World, bUseConstantVelocity); }
1197
OODEFFUNC typedef const int const char * function
Definition oodle2.h:710
OODEFFUNC typedef void(OODLE_CALLBACK t_fp_OodleCore_Plugin_Free)(void *ptr)
EGLSurface EGLnsecsANDROID time
Definition AndroidOpenGLFunctions.h:9
ECacheApplyPhase
Definition ComponentInstanceDataCache.h:18
@ INDEX_NONE
Definition CoreMiscDefines.h:150
#define PURE_VIRTUAL(func,...)
Definition CoreMiscDefines.h:103
#define PRAGMA_DISABLE_EXPERIMENTAL_WARNINGS
Definition CoreMiscDefines.h:370
#define PRAGMA_ENABLE_EXPERIMENTAL_WARNINGS
Definition CoreMiscDefines.h:371
#define UE_EXPERIMENTAL(Version, Message)
Definition CoreMiscDefines.h:369
FPlatformTypes::int32 int32
A 32-bit signed integer.
Definition Platform.h:1125
UE_FORCEINLINE_HINT TSharedRef< CastToType, Mode > StaticCastSharedRef(TSharedRef< CastFromType, Mode > const &InSharedRef)
Definition SharedPointer.h:127
#define DECLARE_MULTICAST_DELEGATE_OneParam(DelegateName, Param1Type)
Definition DelegateCombinations.h:49
return true
Definition ExternalRpcRegistry.cpp:601
#define PRAGMA_ENABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:12
#define PRAGMA_DISABLE_DEPRECATION_WARNINGS
Definition GenericPlatformCompilerPreSetup.h:8
FORCEINLINE uint32 ToIndex(FHairStrandsTiles::ETileType Type)
Definition HairStrandsData.h:93
#define FVector
Definition IOSSystemIncludes.h:8
EInterpCurveMode
Definition InterpCurvePoint.h:16
UE::Math::TRotator< double > FRotator
Definition MathFwd.h:57
const bool
Definition NetworkReplayStreaming.h:178
#define UPROPERTY(...)
UObject definition macros.
Definition ObjectMacros.h:744
#define GENERATED_BODY(...)
Definition ObjectMacros.h:765
#define UFUNCTION(...)
Definition ObjectMacros.h:745
#define GENERATED_UCLASS_BODY(...)
Definition ObjectMacros.h:768
#define UCLASS(...)
Definition ObjectMacros.h:776
#define UENUM(...)
Definition ObjectMacros.h:749
#define USTRUCT(...)
Definition ObjectMacros.h:746
USkinnedMeshComponent float
Definition SkinnedMeshComponent.h:60
ELastAuthority
Definition SplineComponent.h:50
ENGINE_API EInterpCurveMode ConvertSplinePointTypeToInterpCurveMode(ESplinePointType::Type SplinePointType)
Definition SplineComponent.cpp:410
ENGINE_API ESplinePointType::Type ConvertInterpCurveModeToSplinePointType(EInterpCurveMode InterpCurveMode)
Definition SplineComponent.cpp:424
decltype(auto) get(TupleType &&val)
Definition Tuple.h:940
uint8_t uint8
Definition binka_ue_file_header.h:8
uint32_t uint32
Definition binka_ue_file_header.h:6
Definition Archive.h:1208
Definition InterpCurvePoint.h:51
Definition NameTypes.h:617
Definition PrimitiveDrawInterface.h:19
Definition PrimitiveSceneProxy.h:296
Definition SceneView.h:1425
Definition TransactionObjectEvent.h:181
Definition Array.h:670
Definition EnumAsByte.h:22
Definition StructOnScope.h:142
Definition ActorComponent.h:152
Definition MaterialInterface.h:296
Definition Object.h:95
Definition SplineComponent.h:58
const Type ResetToDefault
Definition UnrealType.h:6858
Definition SplineComponent.h:40
Type
Definition SplineComponent.h:42
@ Local
Definition SplineComponent.h:43
@ World
Definition SplineComponent.h:44
Definition SplineComponent.h:26
Type
Definition SplineComponent.h:28
@ CurveClamped
Definition SplineComponent.h:32
@ CurveCustomTangent
Definition SplineComponent.h:33
void Draw(const FLinearBoundary &Boundary, const FRestrictionCurve &Curve, EVisuProperty Property)
Definition Display.cpp:95
ENGINE_API FBox CalcBounds(const FVector &P0, const FVector &P1, const FVector &P2, const FVector &P3)
Definition BezierUtilities.cpp:26
@ false
Definition radaudio_common.h:23
U16 Index
Definition radfft.cpp:71
Definition Color.h:48
static constexpr UE_FORCEINLINE_HINT T Clamp(const T X, const T MinValue, const T MaxValue)
Definition UnrealMathUtility.h:592
Definition UnrealType.h:7001
Definition SceneComponent.h:1743
Definition SplineComponent.h:1138
FSplineComponentInstanceData()
Definition SplineComponent.h:1141
virtual bool ContainsData() const override
Definition SplineComponent.h:1155
FSplineComponentInstanceData(const USplineComponent *SourceComponent, const FSpline &SourceSpline)
Definition SplineComponent.h:1148
virtual void ApplyToComponent(UActorComponent *Component, const ECacheApplyPhase CacheApplyPhase) override
Definition SplineComponent.h:1160
virtual ~FSplineComponentInstanceData()=default
FSplineComponentInstanceData(const USplineComponent *SourceComponent)
Definition SplineComponent.h:1144
Definition SplineComponent.h:76
bool operator!=(const FSplineCurves &Other) const
Definition SplineComponent.h:118
FInterpCurveVector Position
Definition SplineComponent.h:91
Definition SplineComponent.h:1099
virtual bool ContainsData() const override
Definition SplineComponent.h:1111
virtual void ApplyToComponent(UActorComponent *Component, const ECacheApplyPhase CacheApplyPhase) override
Definition SplineComponent.h:1116
virtual ~FSplineInstanceData()=default
FSplineInstanceData(const USplineComponent *SourceComponent)
Definition SplineComponent.h:1105
FSplineInstanceData()
Definition SplineComponent.h:1102
Definition SplineComponent.h:166
FSplinePoint(float InInputKey, const FVector &InPosition, const FVector &InArriveTangent, const FVector &InLeaveTangent, const FRotator &InRotation=FRotator(0.0f), const FVector &InScale=FVector(1.0f), ESplinePointType::Type InType=ESplinePointType::CurveCustomTangent)
Definition SplineComponent.h:206
FSplinePoint(float InInputKey, const FVector &InPosition)
Definition SplineComponent.h:196
FSplinePoint(float InInputKey, const FVector &InPosition, ESplinePointType::Type InType, const FRotator &InRotation=FRotator(0.0f), const FVector &InScale=FVector(1.0f))
Definition SplineComponent.h:201
Definition SplineComponent.h:143
FSplinePositionLinearApproximation(const FVector &InPosition, float InSplineParam)
Definition SplineComponent.h:144
float SplineParam
Definition SplineComponent.h:161
FVector Position
Definition SplineComponent.h:158
Definition Spline.h:24
Definition ObjectPtr.h:488
Definition SoftObjectPtr.h:174
Definition BoxSphereBounds.h:25