맵에 Use Animation BluePrint를 적용한 스켈레탈 매쉬를 배치했을 경우, 이렇게 해보면 Hello도 출력되고 ThirdPersonCharacter도 잘 움직입니다. Get Owning Actor를 Cast To Character 했을 때 성공 또는 실패 하나만 될 것 같았는데, cast 성공할 때 동작과 실패했을 때 동작 모두 되는데 이럴 수도 있는 건가요?
블로킹 시 데미지는 감쇠되지만, 피격 이펙트는 일반 피격 효과로 재생됩니다. 아래는 예시입니다. 현재 스태미나는 35 이다. 블로킹에 성공한다. TakeDamage() 에서 스태미나가 20 소모되어, 남은 스태미나는 15 가 된다. ImpactEffect() 에서 CanPerformAttackBlocking() 이 호출된다. CanPerformAttackBlocking() 은 스태미나가 20 이상인지 확인한다. 현재 스태미나는 15로 20 미만이다. 따라서 데미지는 막았지만, 피격 이펙트와 사운드는 재생 된다.
이해한 내용 : 12 번째 강의를 보면 무기의 데미지 처리를 위해 CollisionComponent를 따로 생성하셨습니다. TickComponent에서 LineTracing 활성화 여부를 조절함으로써 원하는 공격 타이밍에 무기의 데미지 처리를 할 수 있게끔 구현하셨습니다. 질문할 내용 : 혹시 무기에 CapsuleCollision을 부착하여 CollisionComponent 자체의 콜리전을 NoCollision 혹은 Overlap 모드로 변경하는 식의 충돌 처리와 어떤 차이가 있는 지 알 수 있을까요 ??
AnimNotify 를 상속받아 Custom AnimNotify 를 만들고 Animation blueprint 의 track 에 추가했습니다. 잘 작동한 듯 하나, 에디터를 껐다 켜면, 트랙상에 AnimNotify 가 녹색으로 바뀌어 있고 동작하지 않습니다. 지우고 새로 작성, 리빌드 다 해봤는데 안됩니다. 에디터에서 클래스를 인식하지 못하면 녹색으로 나온다고 하는데 어떻게 수정해야 하나요? 에디터가 켜져 있는 동안 추가하면 분홍색으로 DeadCheck 라고 뜨는데 껐다 켜서 확인하면 GASDeadCheck 라고 녹색으로 떠 있습니다.
현재 RPG게임을 제작 중입니다. 캐릭터 사망 시 게임을 재시작하는 로직을 만들려고 하는데 기존에는 OpenLevel로 레벨을 다시 로드하는 방법으로 충분했지만 Lyra프로젝트의 경우 Experience를 비활성화 후 다시 활성화 하는 과정을 거쳐야 할 것 같은데 맞나요? Experience를 재시작한다면 로비에서 포탈을 탈 때 UserFacingExperienceDefinition을 통해 게임을 시작하듯이 재시작하는 방법이 가장 좋을까요?
일반생성자와 FObjectInitializer 를 사용한 생성자 차이점이 궁금해서 제이나미에 검색을해보니 다음과 같이 답변을 합니다. FObjectInitializer 는 언리얼 엔진의 객체를 생성할 때 항상 사용해야 합니다. 언리얼 엔진은 자체적인 객체 생성 및 초기화 시스템을 가지고 있으며, FObjectInitializer 는 이 시스템의 핵심이에요. FObjectInitializer 를 사용해야 하는 경우 언리얼 엔진의 UObject 를 상속받는 모든 클래스의 생성자 에서는 FObjectInitializer 를 사용하는 것이 원칙입니다. 대표적인 예시들은 다음과 같습니다. AActor (액터) UGameInstance (게임 인스턴스) APawn (폰) UUserWidget (위젯) UMyCustomClass (직접 만든 UObject 클래스) 현재 강의에서는 UObject 를 상속받는 클래스라도 Default 생성자를 사용하시는곳이 많은데 , 위의 답변이 틀린것이 겠지요, 어쩔때 FobjectInitializer 를 사용해야할지 , 일반생성자를 사용해야할지 잘모르겠습니다
// Movement GetCharacterMovement()->bOrientRotationToMovement = true; GetCharacterMovement()->RotationRate = FRotator(0.f, 0.f, 0.f); GetCharacterMovement()->JumpZVelocity = 700.f; GetCharacterMovement()->AirControl = 0.35f; GetCharacterMovement()->MaxWalkSpeed = 500.f; GetCharacterMovement()->MinAnalogWalkSpeed = 20.f; GetCharacterMovement()->BrakingDecelerationWalking = 2000.f; RotationRate가 회전속도라고 이해했고 값을 바꿔봐도 변화가 안보여서 Yaw값을 0.f로 설정하고 테스트해봤는데 똑같이 회전이 됐습니다. 블루프린트 클래스도 확인해봤는데 여기서는 0으로 되어있습니다. 디버깅 해봤을 때 CharacterMovementComponent의 PhysicsRotation함수에서 위 사진처럼 RotationRate가 Yaw값으로 360이 들어가고 있었습니다. Charater의 BeginPlay에서 로그를 찍어서 값을 확인해보니 여기서는 0으로 들어가는데 그럼 이후에 값이 다시 360으로 세팅되는 건가요? RotationRate 조정해보고 싶은데 어떻게 해야 되는지 궁금합니다.
언리얼 5.6으로 진행하다가 이상한 버그가 터져서 다시 5.4로 복습도 할겸 해서 처음부터 만들어보고 있는데 콤보 공격할 때 ActivateAbility가 발동되고 콤보의 첫번째 공격이 끝나게 되면 무조건 EndAbility가 발동합니다. 5.6으로 했을때와 5.4로 했을때의 코드적으로 다른점도 없는데 왜 처음에는 첫번째 공격을 하고 두번째 콤보 공격을 하면 EndAbility가 아닌 ActivateAbility가 다시 호출되고, 두번째 할때는 왜 첫번째 공격이 끝나면 무조건 EndAbility가 호출될까요..??ㅠ