티스토리 뷰
목차
1. 큐브가 없으니 큐브를 먼저 만들자
1.1 Unity로 1x1 큐브 만들기
1.1.1 Cube에 Color 입히기
1.2 Rotation 구현
1.3 2x2 큐브로 확장
1.4 Skill 구현
1.4.1 Random Shuffle 구현
1.4.2 Twist 두가지 구현
1.5 2x2 큐브 자동으로 맞추기 구현
1.5 3x3 큐브로 확장
2. 큐브가 있으니 강화학습으로 맞춰보자
-------------------------------------------------------------------
1.4 Skill 구현
1.4.2 Twist 두가지 구현
이번 포스팅에서는 2x2x2 Cube를 맞추기 위한 Skill인 두가지의 Twist를 구현해 보겠습니다.
이전 포스팅에서 우리는 2x2x2 Cube를 Random으로 Shuffle 해주고 오차를 보정해 주는 기능을 구현해 보았습니다. 이전 포스팅을 참고하시거나 영상을 참고하시면 될 것 같습니다.
Random으로 섞인 Cube를 맞추기 위해서는 Skill이 몇가지 필요합니다. Skill은 아래 영상을 참고하였습니다.
영상에서는 2가지 skill이 나옵니다. 그 두가지를 오늘 구현해보겠습니다. 구현하기 전에 앞으로 나오는 Line과 방향에 대해 정의하고 가겠습니다. 세로 Line은 (Q, W), 가로 Line은 (A, Z), 방향은 UP = 0, DOWN = 1, RIGHT = 2, LEFT = 3으로 정의하겠습니다.
1.4.2.1 First Twist 구현
첫번째 Twist의 순서는 다음과 같습니다.
(W, U), (A, L), (W, D), (A, R) 이 순서에 맞게 첫번째 Twist의 값들을 배열로 저장해 둡니다. 아래 코드는 Skill이라는 Class를 새로 생성해서 그 안에 값을 Setting하는 함수를 추가한 모습입니다.
그 다음 위에서 정의했던 대로 방향에 따른 회전축을 잡아주는 Code를 추가해줍니다.
추가로 1번키를 눌렀을 때 값 설정과 Flag가 True가 되어 실행될 수 있도록 Code를 추가해줍니다.
이렇게 하면 Skill Class 구현이 끝나게 됩니다.
그러면 기존 Cube Code로 돌아와서 firstTwistFlag가 true가 됐을 때 저장된 Line과 회전축으로 회전하는 Code를 추가하면 됩니다.
이 코드들을 실행시키면 아래 영상과 같이 First Twist Skill이 잘 되는 것을 확인할수 있습니다.
1.4.2.2 Second Twist 구현
다음으로 두번째 Twist를 구현해봅시다. 두번째 Twist는 조금 더 복잡하지만 Code 구현 과정은 첫번째와 똑같습니다.
(A, L), (W, U), (A, R), (Q, U), (A, L), (W, D), (A, R), (Q, D) 이 순서에 맞게 두번째 Twist의 값들을 배열로 저장해 둡니다.
그 다음은 위에서 했던 과정 그대로 변수명, 함수명만 바꿔서 만들어주면 됩니다.
이렇게 되면 Cube를 맞추기 위한 두가지 Skill 구현이 끝나게 됩니다! 전체 Code 및 결과 영상을 참고하시면 될 것 같습니다. 또한 여러분들이 원하시는 Skill을 위와같은 방법으로 직접 만들어보시는 것도 재밌을 것 같습니다.
다음 포스팅에서는 자동으로 2x2 Cube를 맞추는 기능을 구현해 보도록 하겠습니다.
'Unity' 카테고리의 다른 글
큐브 맞추는 기계 살 돈이 없어서 직접 만드는 글 #7 (0) | 2020.07.23 |
---|---|
Unity SRP 처음부터 시작하기 3 - 최적화 (3) | 2020.07.19 |
Unity SRP 처음부터 시작하기 2 (0) | 2020.07.06 |
큐브 맞추는 기계 살 돈이 없어서 직접 만드는 글 #5 (0) | 2020.07.02 |
큐브 맞추는 기계 살 돈이 없어서 직접 만드는 글 #4 (0) | 2020.06.23 |
- Total
- Today
- Yesterday
- batching
- 참조 형식
- 값 형식
- dynamic batching
- NDC
- C#
- 루빅스큐브
- static batching
- perspective projection
- SRP
- 유니티
- Mesh Processing
- value type
- VTK
- RL
- CollisionDetection
- Scriptable Render Pipeline
- normalized device coordinate
- opengl
- Unity
- transform
- collision detection
- Unreal
- MeshProcessing
- AABB
- Mesh
- 강화학습
- Transformation
- reference type
- RubiksCube
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |