본문 바로가기

Unity

(28)
[Unity] 루빅스 큐브 층 회전 알고리즘 요약알고리즘 작성 전에 고려 사항으로 색상 블록을 합쳐 하나의 큐브를 완성한 것과 공전 시 이동 경로가 서로 다른 것을 확인하고 작성해야 한다. 코드를 보면 temp가 특이한 역할을 하고 있는 것이 보이는데, 이는 이전 루빅스 큐브 층 확인 알고리즘에서 마우스를 클릭하는 동안 회전하는 값을 활용하여 정렬 시 보정을 주는 역할을 한다.알고리즘알고리즘 작성 전에 몇 가지 고려해야 할 사항이 있다. 먼저 큐브 위치 확인 알고리즘으로 들어온 정보는 정확하게 해당 큐브가 아닌 큐브 색상을 가져오는 것이다. 위 그림을 보면 색상 블록을 합쳐 하나의 큐브를 완성한 것을 알 수 있다. 그렇기 때문에 정확한 층을 파악할 수 있는 것이지만, 큐브 위치를 이동시킬 때에는 해당 블록의 부모인 검은색 큐브를 움직여야 한다.검은..
[Unity] 루빅스 큐브 층 확인 알고리즘 요약클릭한 큐브가 어느 층인지 확인하기 위해 foreach 문으로 큐브 층마다 Contains()로 확인한다. 이후 해당 정보를 통해 루빅스 큐브 층 회전 알고리즘으로 전달된다.알고리즘루빅스 큐브 층을 회전 시키기 위해서 좌클릭한 곳이 어떤 층인지 확인할 필요가 있다.SelectFace.cspublic class SelectFace : MonoBehaviour{ private List activeSide; private Vector3 mouseRef; CubeMovement cubeMovement; CubeState cubeState; ReadCube readCube; Vector3 rotation; int layerMask = 1 (); cubeStat..
[Unity] 큐브 위치 확인 알고리즘 요약루빅스 큐브 층 회전 이론을 통해 Raycast 순서를 서로 다른 층에 다르게 적용하기 위해 서로 다른 좌표를 가진 배열 2개를 만들었다. 그 후 Raycast() 속성의 layerMask를 통해 불필요한 충돌을 방지했다. 충돌된 오브젝트는 cubeState.cs에 저장되어 활용된다.알고리즘 Ray를 그림과 같이 생성하기 위해 다음과 같은 코드를 작성하였다ReadCube.cspublic class ReadCube : MonoBehaviour{ // Ray의 위치를 할당 받을 변수 public Transform tUp; public Transform tDown; public Transform tLeft; public Transform tRight; public Trans..
[Unity] 루빅스 큐브 층 회전 이론 요약루빅스 큐브 층을 회전시킬 때는 삼각함수로 회전 공전과 자전을 적절히 해야 하는 것뿐만 아니라 큐브의 위치를 파악하는 Raycast의 방향도 신경 써야 한다. 특히 Raycast 방향이 회전하는 기준의 방향과 다른 층이라면 Raycast 순서를 바꾸거나 상대적으로 회전해야 한다. 하지만 하지만 이러한 복잡한 방법 말고 중심 큐브를 부모로 둔 주변 큐브를 활용한다면 더 간단히 해결된다. 해당 프로젝트는 Raycast의 순서를 바꿔 진행한다.층 회전루빅스 큐브 층을 회전시킨다는 것은 큐브의 위치를, 삼각함수를 통해 이동하는 것과 같다고 생각하였다.하지만 이러한 방법을 사용하면 각 큐브가 공전을 하는것 뿐만 아니라 자전도 같이 해야한다는 사실을 깨닭았다.하지만 이러한 방법을 사용하면 각 큐브가 공전을 하는..
[Unity] 루빅스 큐브 회전 요약루빅스 큐브가 어떻게 맞춰졌는지 보기 위해서는 큐브 전체를 회전하여 확인하여야 한다. 이를 위해 Target이라는 기준점을 활용하여 큐브를 전체 회전시키고 정렬하는 알고리즘을 작성하였다.루빅스 큐브 회전시작전에 알아야 할 사실은 루빅스 큐브에는 Target이 존재하는데 이는 루빅스 큐브를 회전한 수 정렬에 필요한 요소이다.RotateBigCube.cspublic class RotateBigCube : MonoBehaviour{ Vector2 firstPressPos; Vector2 secondPressPos; Vector2 currentSwipe; Vector3 previousMousePosition; Vector3 mouseDelta; public GameObject..
[Unity] 루빅스 큐브 오브젝트 만들기 루빅스 큐브를 만들기 위해서 특별히 3D오브젝트를 만드는 툴을 사용하진 않았다. 그 이유는 정육면체로 이루어진 루빅스 큐브를 구현하는 것은 유니티로도 충분히 가능하다.Hierarchy에서 우클릭하면 3D object를 생성할 수 있는데 그중 Cube를 선택하여 루빅스 큐브의 한 조각을 만들 수 있다.한 조각을 만들어 여러 3x3x3으로 만들게 되면 루빅스 큐브가 되는데 이 조각 상태로 만들게 되면 큐브가 돌아갈 때 안에 있는 색상이 보이므로 제거하였다.제거하면 이런 식으로 깔끔한 형태의 루빅스 큐브가 만들어진다.각 조각에는 특정 이름을 붙여서 오브젝트를 완성하였다.추가적으로는 Ray를 생성할 방향의 기준을 정하기 위해 Hierarchy에서 우클릭하면 Create Empty라고 Transform 컴포넌트만..
[Unity] 몬스터, 아이템 스포너 요약아이템과 몬스터를 소환하기 위한 스포너를 만들기 위한 알고리즘을 작성하였다. 아이템 스포너는 맵 전체에 랜덤으로 소환하므로 간단하였다. 몬스터는 소환할 때 맵 끝 쪽에 소환 구역을 지정하여 소환하는데 소환할 때 로봇과 겹치지 않기 위해 중복되지 않은 랜덤을 사용하였다.아이템 스포너공중 지원 아이템은 단순히 맵 전체에 랜덤으로 소환하는 방식이기 때문에 조건이 까다롭지 않고 코드가 단순하다.ItamSpawner.cspublic class ItamSpawner : MonoBehaviour{ bool start = false; int turnCount = 7; private void Update() { if(Instance.GameTurnCount % turnCount ==..
[Unity] 스킬 구현(4) : 공중 지원 스킬 알고리즘 요약공중 지원 스킬을 구현하기 위해 표지판 배치와 발사 알고리즘을 스킬에 맞게 새로 만들었다. 배치 알고리즘은 마우스 위치를 따라 다니며 원하는 위치를 지정할 수 있게 하였고, 발사 알고리즘은 전투기 그림자가 지나가면서 가짜 총알을 5구역에 랜덤으로 발사하며 데미지 판을 생성하게 하였다..표지판 배치 알고리즘공격 선택 표지판은 마우스를 따라가므로 그 주변에는 데미지 범위와 사거리 표기를 한다. 이후 마우스를 클릭하면 발사 알고리즘이 작동한다.발사 알고리즘공중 지원인 만큼 전투기가 기관총으로 지원하는 형태를 가지려고 한다. 그렇기에 전투기 그림자가 지나간 후 총알이 날아가는 형식으로 구현할 예정이다.1. 45도 기울어진 전투기 그림자를 생성한다.2. 전투기 그림자를 클릭한 좌표보다 아래에 위치하는 1차 함..