TIL (Today I Learned)
오늘 해야할 것
- 책 1차 마무리
- 3 x 3 구현 코드와 내 코드 비교
오늘 한 것
- 책 1차 작업 완료
- 내 코드 vs 구현 잘 되는 코드 차이점
- 3 x 3 왜 못했는지 생각하기
오늘 배운 것
- 2차원 배열을 1차원 배열로 표현하기
for (int i = 0; i < 9; i++)
{
int y = (i + 3) / 3;
int x = i + 3 - y * 3;
}
i | y | x |
0 | 1 | 0 |
1 | 1 | 1 |
2 | 1 | 2 |
3 | 2 | 0 |
4 | 2 | 1 |
5 | 2 | 2 |
6 | 3 | 0 |
7 | 3 | 1 |
8 | 3 | 2 |
(1,0) | (1,1) | (1,2) |
(2,0) | (2,1) | (2,2) |
(3,0) | (3,1) | (3,3) |
2차원 배열을 1차원 배열로 변환하는 방법 · Parker (qkrrudtjr954.github.io)
- 퍼즐 좌표와 그 좌표에 맞는 정보(block, empty, puzzle)을 같이 관리하고 싶은데 방법을 몰라서 따로 뒀었다.
ex. 내 코드
TArray<TArray<FVector>> _boardCenterPosInfo
= {
{FVector(-9.6, -15.3,0),FVector(0, -15.3,0),FVector(9.6, -15.3,0)},
{FVector(-9.6, -5,0),FVector(0, -5,0),FVector(9.6, -5,0)},
{FVector(-9.6, 4.6,0),FVector(0, 4.6,0),FVector(9.6, 4.6,0)},
{FVector(-9.6, 14.3,0),FVector(0, 14.3,0),FVector(9.6, 14.3,0)}
};
TArray<TArray<EBoardPathState>> _boardPathStateInfo
= {
{EBoardPathState::BLOCK,EBoardPathState::BLOCK,EBoardPathState::BLOCK},
{EBoardPathState::BLOCK,EBoardPathState::BLOCK,EBoardPathState::BLOCK},
{EBoardPathState::EMPTY,EBoardPathState::BLOCK,EBoardPathState::BLOCK},
{EBoardPathState::BLOCK,EBoardPathState::BLOCK,EBoardPathState::BLOCK}
};
ex. 바뀐 코드
TArray<TArray<FVector>> _boardCenterPosInfo
= {
{FVector(-9.6, -15.3,0),FVector(0, -15.3,0),FVector(9.6, -15.3,0)},
{FVector(-9.6, -5,0),FVector(0, -5,0),FVector(9.6, -5,0)},
{FVector(-9.6, 4.6,0),FVector(0, 4.6,0),FVector(9.6, 4.6,0)},
{FVector(-9.6, 14.3,0),FVector(0, 14.3,0),FVector(9.6, 14.3,0)}
};
TArray<TArray<int>> _boardPathStateInfo
= {
{-2,-2,2},
{0,1,-1},
{3,4,5},
{6,7,8},
};
따로 두긴 하는데 이걸 어떻게 연결시켜줄지 고민했는데 처음 BeginPlay에서 퍼즐상태를 받아와 인덱스에 저장 후 퍼즐을 위치시킬 때 위치를 넣어준다.
-> 이 생각은 왜 못해줬는가?
우선 _boardPathStateInfo를 상태로만 처리해줘서 숫자로 바꾼뒤 적용할 생각을 못했고,
위치랑 번호를 어떻게 연관하지? 하면서 for문 돌릴 생각까진 했던 것 같은데 예를 들어
퍼즐 넘버 3인데 이 3이랑 실제 퍼즐이랑 어떻게 연관지어? 하니까 그 다음까지 사고가 못이어졌고,
SetRelativeLocation 안에 저 _boardCenterPosInfo[y][x]를 넣어줄 생각 자체를 못했다.
_puzzles[puzzleIndex]->SetRelativeLocation(_boardCenterPosInfo[y][x]);
void AR1Level1SlidingPuzzle::BeginPlay()
{
Super::BeginPlay();
for (int y = 0; y < 4; y++)
{
for (int x = 0; x < 3; x++)
{
int puzzleIndex = _boardPathStateInfo[y][x];
if (puzzleIndex < 0)
continue;
_puzzles[puzzleIndex]->SetRelativeLocation(_boardCenterPosInfo[y][x]);
}
}
SetSlidingPuzzleState(ELevel1SlidingPuzzleState::Default);
}
내일 진행 할 것
- 1차 작업한 것 글 교정 + 부족한 내용 끼워 넣기
- 게임 프로그래밍 입문 편 - 게임 엔진 소개, 게임 프로그래머의 미래(AI관련) 내용 추가
- 목차 수정하기
- C# 유니티 Part3 진행하기
앞으로 진행할 것
- 유데미 언리얼 강의 듣기
- UE5 블루프린트 강의 듣기
- Pico 빌드
- 서랍, 문 등 다시 잡을 때 손잡이가 앞으로 확 오는 문제 처리하기
- Gimmick 가이드 완성하기(for 인프런)
- 언리얼 모듈화 연구 (코드 복붙 안하고 모듈화 할 수 있는 방안 생각하기)
'회사 TIL' 카테고리의 다른 글
[TIL] 23.01.25 / Vector 콘티 (0) | 2023.01.26 |
---|---|
[TIL] 23.01.19 / 유니티 벡터 정리 (0) | 2023.01.21 |
[TIL] 23.01.11 / 3 x 3 (0) | 2023.01.12 |
[TIL] 23.01.10 / 상태 변화 시켜주기 (0) | 2023.01.10 |
[TIL] 23.01.09 / Pico 축 설정, 3 x 3 퍼즐 이동 경로 구현중 (0) | 2023.01.10 |
댓글