Game Programming/언리얼
-
총알 클래스 제작Game Programming/언리얼 2023. 10. 22. 12:51
보이저 에셋에 블루프린트로 구성 된 총알 클래스가 있었다. 이것을 cpp로 옮겨보려했다. 각 컴포넌트에 대해 조사했는데 아래와 같았다. UArrowComponent 진행 방향을 에디터에서 랜더링 할 때 표시하기 위한 컴포넌트 URadialForceComponent 부셔 질 수 있는 메쉬에 충격(?)을 줄 때 사용하는 컴포넌트 UProjectileMovementComponent 부착 된 컴포넌트를 이동 시키기 위한 컴포넌트 UProjectileMovementComponent의 경우에는 아래와 같이 생성자에서 초기화하고 ProjectileMovementComponent = CreateDefaultSubobject(TEXT("ProjectileMovementComponent")); ProjectileMovem..
-
Camera Interp locationGame Programming/언리얼 2023. 10. 21. 21:56
아이템을 주울 때 최종 위치를 구현했다. void AMyCharacter::SelectButtonPressed() { if (TraceHitItem) { auto TraceHitWeapon = Cast(TraceHitItem); TraceHitWeapon->StartItemCurve(this); } } 아이템을 줍는 키를 누르면 StartItemCurve 함수를 호출한다. void AWeapon::StartItemCurve(AMyCharacter* Char) { /* Store a handle to the Charater*/ Character = Char; ItemInterpStartLocation = GetActorLocation(); bInterping = true; SetItemState(EItem..
-
Create Door TriggerGame Programming/언리얼 2023. 10. 20. 14:19
문 트리거를 제작했다. //Common static mesh for childs UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Item Properties", meta = (AllowPrivateAccess = "true")); class UStaticMeshComponent* StaticMesh; 스테틱 메시는 아이템 클래스 자식들이 공통적으로 사용해 부모로 이동시켰다. TSubclassOf classToFind; TArray FoundActors; UGameplayStatics::GetAllActorsOfClass(GetWorld(), ACDoor::StaticClass(), FoundActors); double dist = 0.f; for (..
-
문 소켓 추가Game Programming/언리얼 2023. 10. 19. 12:57
문에 CenterSocket을 추가했다. const UStaticMeshSocket* Socket = LeftDoorComponent->GetSocketByName("CenterSocket"); FTransform SocketTransform; if (Socket) { if (Socket->GetSocketTransform(SocketTransform, LeftDoorComponent)) { CenterDoorComponent->SetRelativeLocation(SocketTransform.GetLocation()); CenterDoorComponent->AttachToComponent(LeftDoorComponent, FAttachmentTransformRules::SnapToTargetNotIncl..
-
문 물리 작용 업데이트Game Programming/언리얼 2023. 10. 19. 12:51
이전 포스팅을 참조하자면 타이머 안에서 문의 위치를 1씩 움직이는 방법으로 구현했다. https://korean-paul.tistory.com/102 Create Door cpp클래스에 Item 클래스를 상속받는 ACDoor 클래스를 선언했다. CDoor.h protected: virtual void BeginPlay() override; virtual void OnSphereOverlap(UPrimitiveComponent* OverlappedComponent, AActor* OtherActor, UPrimitiveComponent* OtherComp korean-paul.tistory.com LeftDoorComponent->SetSimulatePhysics(true); LeftDoorComponen..
-
무기 교체Game Programming/언리얼 2023. 10. 18. 18:13
void AMyCharacter::SelectButtonPressed() { if (TraceHitItem) { auto TraceHitWeapon = Cast(TraceHitItem); SwapWeapon(TraceHitWeapon); } GEngine->AddOnScreenDebugMessage(1, 1, FColor::Green, FString::Printf(TEXT("SelectButtonPressed"))); } 무기 교체를 하기 위해 'T" 버튼을 누르면 현재 Trace 중인 무기와 스왑하도록 코드를 변경했다. void AMyCharacter::SwapWeapon(AWeapon* WeaponToSwap) { DropWeapon(); EquipWeapon(WeaponToSwap); TraceHi..
-
무기 버리는 물리효과 추가Game Programming/언리얼 2023. 10. 18. 17:24
Weapon.h private: FTimerHandle ThrowWeaponTimer; float ThrowWeaponTime; bool bFalling; 무기 버리기 종료 타이머, 무기가 땅에 떨어졌는데 확인하는 boolean 변수를 추가했다. FRotator MeshRotation{ 0.f, GetItemMesh()->GetComponentRotation().Yaw, 0.f }; GetItemMesh()->SetWorldRotation(MeshRotation, true, nullptr, ETeleportType::TeleportPhysics); 무기의 Y축 회전량을 가져와서, 무기 메시를 Y축 방향으로 월드에서 회전시킨다. (손에 있을 때는 회전이 안된 상태인가보다.) SetWorldRotation ..
-
Item Falling StateGame Programming/언리얼 2023. 10. 17. 17:13
아이템이 떨어지는 상태를 만들었다. PA_HeavyMachineGun 물리 에셋 물리객체가 없다면 Add Shape에서 Add Box로 물리객체를 추가하면 된다. Item.cpp SetItemProperties에서 EIS_Falling 상태에 대한 물리정보 변경을 추가했다. case EItemState::EIS_Falling: ItemMesh->SetSimulatePhysics(true); ItemMesh->SetEnableGravity(true); ItemMesh->SetCollisionEnabled(ECollisionEnabled::QueryAndPhysics); ItemMesh->SetCollisionResponseToAllChannels(ECollisionResponse::ECR_Ignore); ..