일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- UnrealEngine5
- 오블완
- UE5
- 팰린드롬 만들기
- DirectX11
- 언리얼엔진5
- 티스토리챌린지
- C++
- 백준
- UnrealEngine4
- 1563
- RVO
- baekjoon
- Unreal Engine5
- C
- const
- directx
- softeer
- 프로그래머스
- IFileDialog
- winapi
- TObjectPtr
- Programmers
- NRVO
- 2294
- Frustum
- 줄 세우기
- algorithm
- GeeksForGeeks
- RootMotion
- Today
- Total
목록전체 글 (731)
Game Develop

어떤 객체의 인스턴스한테 유일성을 보장해주고싶을 때가 있다고 가정해보자.그러면 인스턴스를 만들면 그것과 동일한게 있으면 안되니 복사생성자나 복사대입연산자를 허용하면 안된다. 이럴 때 먼저 가장 손쉬운방법은 복사생성자나 복사대입연산자를 private으로 선언해버리는 것이다.private이니 외부에서 호출할 수 없게 만들어버렸다는 느낌이다. 하지만 이 방법은 100% 완벽하지 않다.왜냐면 클래스의 멤버함수나 프렌드함수에서 해당 복사생성자나 복사대입연산자를 호출해버릴수도 있기 때문이다. 멤버함수에서의 호출까지 막을려면 그냥 복사생성자, 복사대입연산자를 '선언'만 하는 것이다.실제로 이 방법은 C++의 iostream 라이브러리의 몇몇 클래스에서 실제로 적용한 복사방지법이라고 하니, 필요할 때 써먹어도 될 것 ..
제목을 다시 바꿔말하면.. 멤버 초기화 리스트를 사용해 멤버변수들을 초기화하자. C++규칙에 의하면 어떤 객체이든 그 객체의데이터 멤버는 '생성자의 본문'이 실행되기 전에 초기화되어야 한다고 명시되어있다. Foo::Foo(const string& name, const int count) { this->m_Name = name; this->m_Count = count; } 위 코드에서 멤버변수들은 초기화되었는가? 아니다. '생성자의 본문'이 실행되기 전에 초기화 되어야 한다고 되어있는데, 위 코드는 본문에서 멤버변수에 '대입'을 했을 뿐이다. 그리고 좀 더 정확히는 저 대입연산을 하기전에 멤버변수들의 기본생성자들이 호출되어서 값을 초기화했을 것이다.근데 m_C..
그.. 보통 몬스터 기본움직임은 블렌드스페이스로 하는경우가 많을 것이다.그리고 행동트리에서 뭐 타겟을 향해 이동할 때 기본적으로 내장되어있는 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..
여기서 말하는 강참조는 GC의 수거대상이 안되게 참조하고있다는 의미이다.간혹 관련해서 구글링하다보면 여러글에서 TObjectPtr을 사용하면 GC가 수거를 안한다고 되어있는데, 내가 실험해본 결과는 아니다. 보통 그런글에는 TObjectPtr에 UPROPERTY가 선언되어있는데, 그렇기때문에 수거를 안한거다. 나는 실험을 위해 몬스터 때릴때 나오는 데미지위젯을 대상으로 실험해봤다.기본적으로 데미지위젯은 생성시 AddViewport로 슬레이트시스템에 등록하고 애니메이션재생이 끝나면 RemoveFromParent로 슬레이트시스템에서 제거하게 해놨다.즉 슬레이트시스템이 강하게참조하는부분은 RemoveFromParent로 삭제했으니 신경 안써도된다. 여기서 실험적인 요소를 넣어서, 데미지위젯을 CreateWid..
https://www.acmicpc.net/problem/5052 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172#include iostream>#include string>#include map>#include vector>#include algorithm>#include math.h>#include queue>#include functional>#include sstream>#include memory.h>#include deque>#include set>#include unordered_set>#includ..
컨트롤러는 전방을, 캐릭터는 왼쪽을 바라보고 있다고 가정.캐릭터는 전방기준으로 8가지방향에 대해 구르는 몽타주가 있다.캐릭터는 왼쪽을 바라보고 있는데 키입력을 D키 누르고 구르기를 시도한다면, 캐릭터는 어떤 몽타주를 재생해야하는가?오른쪽으로 굴러야하니 오른쪽으로 구르는 몽타주? 아니다. 위치이동은 키입력의 월드방향벡터로 하는게 맞지만, 몽타주는 오른쪽으로 구르는 몽타주가 아니라 뒤로 구르는 몽타주를 재생해야 자연스럽다.왜? 캐릭터는 왼쪽을 바라보고 있으니까, 뒤로 굴러야 오른쪽으로 이동하는것처럼 자연스러워진다.그러면 컨트롤러기준의 키입력방향벡터가 캐릭터의 로컬기준으로 어디방향인지를 알아내기 위해서는, 먼저 키입력방향벡터를 캐릭터의 로컬방향벡터로 변환해줘야 한다. 그러면 먼저 키입력방향벡터를 알아내보자.여..

https://www.acmicpc.net/problem/1484 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970#include iostream>#include string>#include map>#include vector>#include algorithm>#include math.h>#include queue>#include functional>#include sstream>#include memory.h>#include deque>#include set>#include unordered_set>#include th..