struct는 메모리를 정렬하는 방법이 바이트패딩을 따르고있다.
union은 내부의 자료형 중 가장 큰 자료형으로 크기를 잡는다.
Struct의 메모리는
[][][][] [][][][]
A B
Union은
[][][][][][][][]
Value
A
B
MyUnion의 A를 쓰면 Value의 앞쪽 4바이트만 사용하는 것이다. 그래서 Union의 A의 값을 바꾸면 Value, A, B의 값이 모두 바뀐다.
class, struct, union은 문법적 의미가 자기 내부에 있다. 이름을 붙이면 자료형 자체를 선언할 수 있다. 이름을 안 붙일 수가 있다.
이름 안 붙이면 그냥 '내부에 존재하는 메모리들을 바이트패딩 형식으로 만들어줘' 라는 느낌?
struct float4
{
union
{
struct
{
float X;
float Y;
float Z;
float W;
};
float Arr1D[4];
};
};
float4 struct 안에서 union형식으로 메모리 관리를 해달라고 했다. 그안에서는 float 변수 네 개가 있는 struct와 float 4개짜리 배열이 있다. 그럼 X,Y,Z,W와 Arr1D를 동일시하여 사용할 수 있다.
타일맵 만들 때 활용한다고 한다..
정우님이 보내주신 엔진 구조 필기!!! 상속 구조를 보는게 코드이해에 큰 도움이 됐다.. (짱감사)
DestroyTime를 2.0f로 두고 DeltaTime을 빼며 확인, 0.0f >= DestroyTime
이면 Destroy()시켜도 되지만 아예 Bullet의 BeginPlay()함수에서 시작할때부터 Destroy(2.0f) : 2초 후에 죽어라
로 만듦.
프레임 사이에 한 번에 많은 시간을 소모하는 함수를 호출하면 DeltaTime이 증가한다. 그게 렉.
예시) for문 1000만번 돌리는 데 5초 걸렸다 → 델타타임 5 → 한 번에 5초 동안 가야할 양을 한 프레임만에 이돌해버리니까 순간이동하듯이 보이게 된다. → 뚝뚝 끊어지게 보임.
ActorComponent : 액터에 속해있는 기능만.. 영혼 느낌
SceneComponent : 자신만의 위치까지 갖고있어야 하는 컴포넌트, 팔다리몸통같은거. 나는 액터에게 속해있고 거기 나만의 상대적 위치까지 가지고 있어야 한다.
렌더러가 컴포넌트들 기반으로 그려줌....
(왜 컴포넌트로 해야하지)
한 번 도전해봤다.
플레이어 머리위에 HpRender라는 Hp바 표시용 네모를 만들어봤다. 가로 60, 세로 10 scale로 만들었다.
HpBarPos와 HpFullValue 라는 멤버변수를 만들었다. 각각 Hp바의 위치 X좌표와 HP바 스케일 X값이다.
그럼 이렇게 생긴다. (네모눈사람이 플레이어임)
Player::Tick에서 T를 누르면 체력이 깎이는 모양새가 되도록 HpFullValue에서 1을 뺀 값으로 scale을 다시 Set해줬다.
그럼 이렇게 양쪽 번갈아서 줄어든다. Hp바같지 않음!! 위치도 고쳐줘야한다.
1.0f씩 깎으면 왼쪽으로 더 많이 이동하게 된다. HpBarPos를 0.5씩 깎아준다.
깎인 체력의 절반씩 왼쪽으로 밀면 그자리에 있는것으로 보이게 된다.
그럼 이렇게 Hp바처럼 생기게 된다. 선생님이 말씀하신 Hp바가 이런 것일지는 모르겠다..