What is ProjectileMovementComponent?
ProjectileMovementComponent를 앞으로 PMC라고 칭하겠습니다. PMC는 tick이 돌아가는 동안에 다른 컴포넌트의 위치를 업데이트해주는 컴포넌트입니다. 충격이 가해진 이후 바운스되는 부분이나 특정 타겟을 향해 유도미사일처럼 이동하는 기능 등을 지원합니다.
보통 움직이는 컴포넌트는 PMC를 소유하고 있는 액터의 루트 컴포넌트이지만, 다른 컴포넌트를 선택할 수도 있습니다. (SetUpdatedComponent()를 사용하세요.)
만약 업데이트되는 컴포넌트가 물리를 시뮬레이팅중이라면(Simulating Physics), 오직 Initial launch parameters(발사 초기화 인자들) 만이 발사체(projectile)의 운동에 영향을 줄 것이고, physics sim이 그곳을 대신하게 됩니다. 이때 발사 초기화 인자들은 initial velocity가 0이 아닐때 발사체 운동을 하게 됩니다.
델리게이트
DECLARE_DYNAMIC_MULTICAST_DELEGATE_TwoParams( FOnProjectileBounceDelegate, const FHitResult&, ImpactResult, const FVector&, ImpactVelocity );
DECLARE_DYNAMIC_MULTICAST_DELEGATE_OneParam( FOnProjectileStopDelegate, const FHitResult&, ImpactResult );
변수
/** 발사체의 속도를 initial(초기화)합니다. 0보다 크면 초기 Velocity 값을 재정의하고 대신 Velocity를 방향으로 처리합니다. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Projectile)
float InitialSpeed;
/** 발사체의 최대 속도. (0은 속도에 한계를 두지 않음을 의미합니다.) */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Projectile)
float MaxSpeed;
/** true라면, 이 발사체는 Velocity의 방향과 일치하도록 각 프레임의 회전을 업데이트합니다 */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Projectile)
uint8 bRotationFollowsVelocity:1;
/** true라면, 이 발사체는 회전을 Yaw만 유지하기 위해 각 프레임의 회전을 업데이트합니다. (단, bRotationFollowsVelocity가 true여야 합니다.) */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Projectile, meta = (EditCondition = "bRotationFollowsVelocity"))
uint8 bRotationRemainsVertical:1;
/** true라면, 간단한 바운스가 시뮬레이션됩니다. 어딘가 최초로 접촉된 후에 시뮬레이션을 하지 않으려면 이 값을 false로 설정합니다. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ProjectileBounces)
uint8 bShouldBounce:1;
/** true라면, initial Velocity는 시작 시 로컬 공간에 있는 것으로 해석됩니다.(SetVelocityInLocalSpave()를 보자)*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Projectile)
uint8 bInitialVelocityInLocalSpace:1;
/** true라면, 궤도의 정확도를 향상시키기 위해 Sub-stepping이 이동을 개별적으로 더 작은 단계로 분할하도록 강제합니다.
* 직선으로 움직이는 물체는 충돌을 놓치지 않도록 항상 연속적인 충돌 감지(스위프)를 사용하기 때문에 일반적으로 이 값을 설정할 필요가 없습니다.
* Sub-stepping은 중력의 영향을 받거나 대상을 향해 유도(Homing)로 이동할 때 자동으로 활성화됩니다.*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ProjectileSimulation)
uint8 bForceSubStepping:1;
/** true라면, 정상적인 시뮬레이션을 실행하고 업데이트합니다. 거짓인 경우 시뮬레이션이 중지되지만 Component는 여전히 tick(보간 실행 허용)됩니다.*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ProjectileSimulation)
uint8 bSimulationEnabled:1;
/** true라면, 이동 시 스윕 충돌 검사가 사용됩니다. 거짓인 경우 Collision은 효과적으로 대상으로 텔레포트합니다.
* 이 기능을 비활성화하면 이동 시 blocking collision hits가 생성되지 않습니다(overlaps는 업데이트되지만).*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ProjectileSimulation)
uint8 bSweepCollision:1;
/** true라면, Homing Target를 향해 가속합니다. 발사체가 생성된 후에 반드시 HomingTargetComponent가 설정되어야 합니다.
* (HomingTargetComponent, HomingAccelerationMagnitude 참고)*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Homing)
uint8 bIsHomingProjectile:1;
/** 튕길 때 Collision 표면과 평행한 속도에 대한 마찰 효과를 제어합니다.
* true라면, 충돌 각도에 따라 마찰이 수정되어 '수직 충돌'의 경우 마찰력이 높아지고 '스침 충격'의 경우 마찰력이 낮아집니다.
* false라면, 바운스는 (1.0 - 마찰)과 동일한 접선 속도의 비율을 유지하여 "수평 복원" 역할을 합니다*/
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ProjectileBounces)
uint8 bBounceAngleAffectsFriction:1;
/** true라면, 발사체가 지표면을 따라 미끄러지거나 구릅니다.*/
UPROPERTY(VisibleInstanceOnly, BlueprintReadOnly, Category=ProjectileBounces)
uint8 bIsSliding:1;
/** 만약 이 값이 true이고 보간된(interpolated) Component Set이 있는 경우, 보간된 오브젝트가 UpdatedComponent's location의 불규칙한 업데이트를
* sooth하게 수행할 수 있는 Location(및 경우에 따라 Rotation)의 보간이 활성화됩니다. (일반적으로 네트워크 업데이트를 원활하게 수행하기 위해 사용).
* 이를 위해서는 SetInterpolatedComponent()를 사용하여 Collision에 뒤따라오는(lag) Visual Component를 표시하고,
* 새로운 target의 location/rotation이 received 되었을 때(일반적으로 net update에서) MoveInterpolationTarget()함수를 사용합니다.
* @SetInterpolatedComponent(), MoveInterpolationTarget() 참고 */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ProjectileInterpolation)
uint8 bInterpMovement:1;
/** 만약 이 값이 true이고 보간된(interpolated) Component Set이 있는 경우, 보간된 오브젝트가 UpdatedComponent Rotation값의 불규칙한 업데이트를
* smooth하게 수행할 수 있는 Rotation 보간이 활성화됩니다. (일반적으로 네트워크 업데이트를 원활하게 하기 위해 사용).
* Rotation interpolation(회전보간)은 "오직" bInterpMovement도 활성화된 경우에만 적용됩니다.
* @SetInterpolatedComponent(), MoveInterpolationTarget() 참고 */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=ProjectileInterpolation)
uint8 bInterpRotation:1;
'UE4' 카테고리의 다른 글
[UE4] 스마트 포인터 (Smart Pointer) (0) | 2023.02.24 |
---|---|
[UE4] 언리얼 ui 최적화 기법 (4) | 2023.02.21 |
[UE4] 게임플레이 프레임워크 (0) | 2023.01.18 |
[UE4] 캐릭터 무브먼트 컴포넌트 (0) | 2022.11.24 |
[UE4] 위젯 UI 제작하기 (0) | 2022.11.14 |