일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- Programmers
- const
- 티스토리챌린지
- TObjectPtr
- C++
- RVO
- 프로그래머스
- Frustum
- baekjoon
- UnrealEngine5
- softeer
- 2294
- 1563
- GeeksForGeeks
- algorithm
- C
- 언리얼엔진5
- winapi
- directx
- IFileDialog
- DirectX11
- UnrealEngine4
- 오블완
- 팰린드롬 만들기
- UE5
- NRVO
- 백준
- 줄 세우기
- Unreal Engine5
- RootMotion
- Today
- Total
목록UnrealEngine5 (33)
Game Develop
Enhanced Input을 이용해서 키입력을 받는것을 C++로 구현하면, 아래와 같이 BindAction을 호출 할 것이다. EIC->BindAction(m_InAir_InputActions["NormalAttack_InAir"], ETriggerEvent::Triggered, skillComponent, &UMainPlayerSkillComponent::NormalAttack_InAir); 보통은 저렇게 매개변수가 없는 함수를 바인딩을 하고, 그렇게 해야되는줄만 알고있지만 사실 매개변수있는 함수도 바인딩이 가능하다. 다만, 모든 매개변수는 아니고 POD타입의 데이터만 매개변수로 가능하다.여기서 POD란 Plain Old Data의 약자인데 쉽게 말하자면 단순한 데이터타입을 의미하고, 좀 더 정확히 말..
뭐랄까 확실하다기보다는 아직까지는 좀 더 추상적이긴 한데..언리얼 문서에서는 TObjectPtr을 써야하는 이유로 동적해상도와 액세스 추적을 추가한다! 라고 되어있다.사실 이부분은 언젠가 실제로 겪었을 때 이 글을 업데이트해야겠다고 생각한다.. 지금은 잘 모르겠다. 이것보다 좀 더 와닿는것은, 언리얼엔진만든 에픽사가 앞으로 '표준'으로써 로우포인터대신 TObjectPtr을 채택했다는 사실 자체이다.즉, 버전이업데이트될때마다 그들이 만드는 코드들은 개발자가 TObjectPtr을 사용한다는 '가정'하에 디자인할 것이라는 것.이 문구를 보니까 뭔가 로우포인터쓸지 TObjectPtr 쓰지 살짝 고민했던것이 사라졌다. 정리하자면 헤더에서 변수선언할때는 로우포인터대신 TObjectPtr을 쓰고, 함수내의 로컬변수같..
그.. 보통 몬스터 기본움직임은 블렌드스페이스로 하는경우가 많을 것이다.그리고 행동트리에서 뭐 타겟을 향해 이동할 때 기본적으로 내장되어있는 MoveTo 태스크노드를 사용하는 경우도 많을 것이다. 나같은경우 특정 몬스터에 속도가 0일 때, 600일 때, 1200일 때의 애니메이션시퀸스를 넣어서 블렌드스페이스를 하나 만들었었다. 그리고 해당 몬스터의 CharacterMovement에서 MaxWalkSpeed값을 1200으로 맞췄다.MoveTo 노드는 기본적으로 행동트리 오너의 MaxWalkSpeed값을 기준으로 오너의 속도를 올리기 때문에, 당연히 잘 되야한다. 근데.. 실제 PIE에서 몬스터 움직이는거보니까 자꾸 멈칫멈칫거린다.확인결과, WalkSpeed가 자꾸 600에 도달하면 0으로 초기화가 되버리는..
이슈저장용글에 가깝다. 12345678910111213141516171819202122232425USTRUCT(Atomic) struct FSkillList{ GENERATED_USTRUCT_BODY() public: UPROPERTY(Transient) TMapFName, TObjectPtrUSkill>> skillList;}; UCLASS( ClassGroup=(Custom), meta=(BlueprintSpawnableComponent) )class HYOBINSPROJECT_API USkillComponent : public UActorComponent{ GENERATED_BODY() public: USkillComponent(); const TMapFNa..
예시 1. 피격시 군중제어상태를 Down, Knockback 등으로 바뀐다.2. 행동트리의 최상단에서는 이 군중제어상태가 None일때만 하위노드를 수행하도록 했다.3. 근데 간혹 한번씩 None이 아닌데도 하위노드로 뻗어나가는 경우가 생김. 이런 비슷한 경우일 경우, 최상단에서 특정상태를 검사하는 (2번같은) 데코레이터의 Observer aborts값이 None인지 아닌지 확인할 것.이유는 아래의 각 옵션 설명을 보면 알 수 있다. Observer Aborts 설정 요약:None: 블랙보드 값이 변경되어도 즉시 트리를 다시 평가하지 않음.Self: 해당 노드와 하위 노드를 즉시 다시 평가함.Lower Priority: 이 노드보다 우선순위가 낮은 노드들을 다시 평가함.Both: 이 노드와 하위 노드, ..
액션성을 중요시하다보니, 어퍼기를 이용해 몬스터를 공중에 띄우는 기능이 있다. 그냥 막연히 AddImpulse를 이용해서 데이터테이블에 지정된 값만큼 z축으로 띄우게 했었는데, 가만히 살펴보니 액터(몬스터)의 CharacterState에 따라서 값이 달라지는 걸 알 수 있었다. OnGround상태일 때랑 Falling 상태일 때 띄워지는 정도가 달랐던 것.그래서 ChatGPT한테 물어보니, Falling상태일 땐 중력값에 의해 속도가 -z축쪽으로 힘이 가해지니, +z축으로 힘을 가한 내 AddImpulse 함수랑 충돌해서 더 적게 띄워진 것이였다. 또한 AddImpulse 는 액터의 질량에도 영향을 받는다고 한다. 이렇게 현재 액터에 가해지고있는 속도나 액터의 질량을 무시하고싶으면 LaunchCharac..
https://www.youtube.com/watch?v=vLyxzPFbTBU 내용은 계속 업데이트 예정. 모션워핑 노티파이스테이트의 각 옵션 Root Motion Modifier Scale은 선형애니메이션에 적절. (그냥 일직선으로 걷는다던가)Skew Warp는 동선이 약간 호를 그리는 애니메이션일 때 사용. 모션워핑을 통해 개발자가 애니메이션의 특정구간을 재생할 때 원하는만큼 이동시키게 한다는 등의 기능을 구현 가능.타겟을 지정해주면, 회전시킨다던가. 노티파이랑 노티파이스테이트로도 가능한 부분들이 많긴하지만, 약간 노가다성(?) 작업들이 많을 수 있는 부분을 좀 더 편하게, 생산성있게 해주는 기능인 것 같다.
내가 설계한 구조상, 노티파이스테이트에서 매개변수로입력한 공격이름에 대한 정보를 DataManager라는 서브시스템에서 가져오게 해놨다. 그래서 으레 다른곳에서 했던것처럼 UDataManager* dataManager = GetWorld()->GetGameInstance()->GetSubsystem(); 이런식으로 가져왔는데, 크래쉬가 발생했다. 확인결과 GetWorld()자체가 그냥 nullptr을 반환했다. 그래서 그냥 느낌상으론, NotifyState는 액터나 액터에 부착되는 액터컴포넌트같은것들처럼 월드에 속한개념이 아니다보니(?) 그냥 nullptr을 리턴하는 것 같다. 좀 더 정확히는, 그냥 노티파이트스테이트에서 GetWorld()를 하면 UObject의 GetWorld를 가져오고, MeshCo..