-
총알 클래스 제작Game Programming/언리얼 2023. 10. 22. 12:51
보이저 에셋에 블루프린트로 구성 된 총알 클래스가 있었다.
이것을 cpp로 옮겨보려했다.
각 컴포넌트에 대해 조사했는데 아래와 같았다.
UArrowComponent 진행 방향을 에디터에서 랜더링 할 때 표시하기 위한 컴포넌트 URadialForceComponent 부셔 질 수 있는 메쉬에 충격(?)을 줄 때 사용하는 컴포넌트 UProjectileMovementComponent 부착 된 컴포넌트를 이동 시키기 위한 컴포넌트 UProjectileMovementComponent의 경우에는 아래와 같이 생성자에서 초기화하고
ProjectileMovementComponent = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("ProjectileMovementComponent")); ProjectileMovementComponent->SetUpdatedComponent(CollisionComponent); ProjectileMovementComponent->InitialSpeed = 3000.0f; ProjectileMovementComponent->MaxSpeed = 3000.0f; ProjectileMovementComponent->bRotationFollowsVelocity = true; ProjectileMovementComponent->bShouldBounce = true; ProjectileMovementComponent->Bounciness = 0.3f;
생성 한 뒤에 속도를 세팅해주면 동작하는 것으로 이해했는데 이 부분이 잘 동작하지 않았다.
void ABullet::FireInDirection(const FVector& ShootDirection) { ProjecttileMovement->Velocity = ShootDirection * ProjecttileMovement->InitialSpeed; }
그래서 결국은 물리를 사용해 해결했다. BeginPlay에 다음과 같은 코드를 추가했다.
SphereCollision->SetSimulatePhysics(true); SphereCollision->SetEnableGravity(false); SphereCollision->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics); SphereCollision->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore); FVector vDir = GetActorRotation().Vector(); vDir.Normalize(); vDir *= 12000.f; SphereCollision->AddImpulse(vDir * 1.f); SphereCollision->OnComponentBeginOverlap.AddDynamic(this, &ABullet::OnSphereOverlap); SphereCollision->OnComponentEndOverlap.AddDynamic(this, &ABullet::OnSphereEndOverlap);
https://wergia.tistory.com/134
참고 블로그
'Game Programming > 언리얼' 카테고리의 다른 글
Camera Interp location (1) 2023.10.21 Create Door Trigger (1) 2023.10.20 문 소켓 추가 (0) 2023.10.19 문 물리 작용 업데이트 (0) 2023.10.19 무기 교체 (0) 2023.10.18