티스토리 뷰

목차

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.1 각 Face의 Color 받아오기

  1.5 3x3 큐브로 확장

 

2. 큐브가 있으니 강화학습으로 맞춰보자

 

-------------------------------------------------------------------

1.5 2x2 큐브 자동으로 맞추기

  1.5.1 각 Face의 Color 받아오기

 

 

이번 포스팅에서는 2x2x2 Cube를 자동으로 맞추기 전 작업인 각 Face의 Color를 받아오는 Code를 구현해 보겠습니다.

 

1.5.1(들어가기에 앞서)Basic Skill 구현

이전 포스팅에서 우리는 두가지 Twist Skill을 구현해 보았습니다. 하지만 이전 포스팅에서 알려드린 영상보다 더 상세하게 잘 되어있는 영상이 있어서 가져왔습니다.

2x2 Cube 맞추는 방법

 

그래서 Code를 좀 수정하게 되었습니다. 먼저 영상에서 나오는 가장 기본적인 Rotation을 구현하였습니다. 이 Rotation 명칭들이 표준으로 쓰는 명칭이라고 합니다.

12가지 기본 회전

 

아래 코드에서 볼 수 있듯이 가장 기본적인 회전들을 정의하여 함수로 만들어 두었습니다.

Basic Skill 추가

또한 List를 생성하여 기본 Skill들을 Add해주고 저장된 Skill들을 활용할 수 있도록 하였습니다. 이전 포스팅 때 배열의 크기를 미리 지정하고 배열 값을 하나씩 지정해 줄 필요가 없어 더 편리합니다. 아래 코드처럼 만들게 되면 RUR'U' 회전이 LineList에 들어가게 됩니다.

기본 회전을 활용하여 Skill 만들기

그러면 저장된 lineList와 directionList를 활용하여 연속적인 Rotation이 가능해집니다.

저장된 Skill Rotation Code

 

 

1.5.1 Color 값 받아오기

우리는 Cube를 맞출때 Color의 위치를 보고 맞추게 됩니다. 면에 해당하는 Color에 따라 공식이 달라지기도 합니다. 그래서 이번에는 원하는 색이 어디에 있는지?! 찾아보도록 하겠습니다.

 

1.5.1.1 작은 약속찾기전에 앞서 우리는 작은 약속을 하나해야합니다. 사실 제가 임의로 정했기 때문에 여러분들이 원하시는대로 바꾸셔도 상관없습니다. 아래 그림에 표현된 명칭과 위치에 대한 약속입니다. 1. 4개의 면을 가진 큰 Face를 앞으로 Big Face라고 하고 그 안의 1개의 작은 면을 Small Face라고 하겠습니다.2. Top Right Near BigFace의 Index를 왼쪽과 같이 하고 Bottom Left Far BigFace는 회전했을 때 동일하도록 설정하였습니다. (진행하다보면 수정이 있을수도 있을 것 같습니다 ㅜ)

 

이 프로젝트의 작은 약속
1.5.1.2 Color 이름 설정Color를 탐색하기 전 각각의 Color면에 이름을 지정해 주어야 합니다. 저는 아래 Code와 같이 생성시에 각각의 Cube에 이름을 설정해 주었습니다.
Color 이름 설정

1.5.1.3 원하는 Color 탐색

이제 원하는 Color를 입력했을 때 어디에 위치해 있는지 찾아보도록 하겠습니다.

 

먼저 알고리즘을 글로 써보면

1. 6면의 Big Face 탐색

2. BigFace의 SmallFace에 해당하는 Object들 찾기

3. 해당 SmallFace Object의 Name이 원하는 Color인지 탐색

 

저희는 앞서 Cube를 만들때 입체적인 모습을 주기 위해서 작은 하나의 큐브를 총 7개의 Cube로 만들어주었기 때문에 2번 과정이 필요합니다.(Center, Top, Bottom, Right, Left, Far, Near) 아래 포스팅을 참고하시면 될 것 같습니다.

 

큐브 맞추는 기계 살 돈이 없어서 직접 만드는 글 #2

목차 1. 큐브가 없으니 큐브를 먼저 만들자   1.1 Unity로 1x1 큐브 만들기 1.1.1 Cube에 Color 입히기 1.2 Rotation 구현 1.3 2x2 큐브로 확장 1.4 Random Shuffle 구현 1.5 3x3 큐브로 확장 2. 큐브가 있..

mathmakeworld.tistory.com

 

먼저 BigFace들을 탐색해야하기 때문에 BigFace를 받아오는 것부터 구현해보겠습니다. 아래 Code는 입력으로 BigFace의 이름과 pos를 받아와 그에 해당하는 BigFace를 반환하는 Code입니다.

Get Big Face Code
이제 다음으로 받아온 BigFace에서 밖으로 나온 SmallFace를 찾아야합니다. SmallFace를 찾는 Code는 아래와 같으며 ComputeComparePos는 Top, Bottom일 때는 각 SmallFace의 y값, Right, Left일 때는 x값, Far, Near일 때는 z값을 받아옵니다. (맨 밑에 올려드린 전체Code에서 확인하시면 됩니다!)

 

Display된 SmallFace 탐색
이렇게 되면 BigFace에서 Display되고 있는 SmallFace를 찾게됩니다. 이제 이 SmallFace들의 name이 우리가 찾고 있는 color와 같다면 (BigFace의 이름, SmallFace의 Index)를 출력해주면 됩니다. 최종적으로 아래와 같이 구현하게 되면 우리는 원하는 color가 입력되었을 때 그 color를 가지는 SmallFace가 어디에 위치해 있는지 출력하게 됩니다.
Find Target Color in Bigface 함수
이제 이 함수를 f키에 맵핑하여 실행하게 되면! 아래와 같은 결과가 나오게 됩니다. 응용해서 지정한 Small Face에 Display 되고 있는 Color가 무엇인지 알려주는 Code도 위의 Code를 참고하여 충분히 구현해낼 수 있을 것 같습니다!

 

1.5.1.4 결과

그러면 이 Code를 가지고 흰색이 어디에 있는지 찾아보도록 하겠습니다. 아래 결과는 흰색이 전부 가까운 면에 위치해 있어서 Near 0~3까지 출력하였습니다.

Find Color 결과
그러면 조금 섞어보겠습니다. 이전에 구현해 두었던 R키 Random Suffle을 진행한 뒤 결과를 보면 보이지 않는 Left를 빼면 Top 3, Right 2, Near 2 가 나온것을 확인할 수 있는데 이 것은 저희가 앞에서 한 작은 약속에 해당하는 Index인 것을 확인할 수 있습니다.
RandomSuffle 후 Find Color 결과

 

다음 포스팅에서는 이렇게 찾은 Color를 가지고 한 스텝씩 맞춰나가도록 하겠습니다!

 

공지!

Code가 점점 길어지고 복잡해지고 있어서 이제는 Gitlab 주소를 남깁니다. 이곳에 Unity Project까지 함께 올려둘테니  다운 받으셔서 쓰시면 될 것 같습니다.

혹시 Git 사용이 어려우신 분들은 댓글을 남겨주시면 프로젝트 파일을 메일로 보내드리겠습니다.

 

Git 주소 : https://gitlab.com/bshong2850/rubikspuzzle/-/tree/master

 

Files · master · ByeongSun Hong / RubiksPuzzle

GitLab.com

gitlab.com

 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
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
글 보관함