2017-03-26 2 views
0

유니티와 C#을 처음 접했습니다. 그러나 나는 Block이라는 객체의 프리 패브를 만든 간단한 2D 플랫폼 게임을 만들려고 노력 중이다. 내가 할 수 있기를 원하는 것은 0과 1을 가진 배열 타일 맵을 만드는 것이다. 1은 블록이고 0은 아무것도 아니다. 또한 타일 맵이 무작위가되는 것을 원하지 않습니다. 블록을 GameController라는 다른 객체에서 인스턴스화하고 싶습니다. 내가 성취하고자하는 완벽한 예는 이와 같습니다.유니티 2D 배열 타일 맵

enter image description here

하지만 난 정말 배열이 작업을 수행하는 방법을 모르겠어요. 나는 화합과 C#이 어떻게 작동하는지 배우려고 노력하고 있기 때문에 일을 단순하게하고 싶습니다. 어떤 도움을 주시면 감사하겠습니다.

답변

0

따라서 자산 저장소의 일부 자산 (예 : https://www.assetstore.unity3d.com/en/#!/list/2965-procedural-generation)을 사용할 수 있습니다. 이는 매우 어려운 문제입니다. 나는이 비디오를 권장합니다 : https://www.youtube.com/watch?v=k1pWpYEt2UE,하지만 당신이 달성하기를 원하는 것 중 가장 가까운 것이이 것입니다 : https://www.youtube.com/watch?v=gIUVRYViG_g 희망을 얻었습니다.

+0

이 비디오는 확실히 도움이되지만, 타일 맵이 무작위 인 것을 원하지 않는다는 것을 잊었다 고 생각합니다. 타일이 0s 및 1s, 1s를 사용하여 배열을 통해 지정되었는지 지정할 수 있기를 원합니다. 블록의 경우 0, 아무 것도없는 경우 0입니다. –

+0

나는 이것이 당신의 목표와 비슷한 것이라고 생각한다 : https://www.youtube.com/watch?v=93o_Ad5C5Ds 그가 작품을 준비하는 방법은 당신이 당신의 타이틀을 넣고 싶은대로, 유일한 차이점은 그의 배열이 간다는 것이다. 10101010 그리고 다음 행보다 – pasotee

0

예를 들어 2 차원 배열을 만들 수 있습니다. int [40,100]을 두 번 반복하고 배열의 숫자가 하나 인 경우 배열의 위치에 블록의 길이 또는 너비를 각각 곱하십시오. 예를 들어 :

int[,] positions = new int[40,100]; 

for (int i = 0; i < 41; i++) { 
    for (int j = 0; j < 100; j++) { 
     if (positions[i,j] = 1) { 
      GameObject temp = Instantiate(block, new Vector3(j * blockWidth, i * blockHeight, 0), Quaternion.identity) as GameObject; 
     } 
    } 
} 

그것은이 큰 배열의 좌표를 모두 설정하는 데 오랜 시간이 걸릴 것입니다,하지만 당신은 매개 변수를 사용하여 전체 순환 수, 또는이 작은 경우 그냥 어려운 방법을한다. 그렇지 않으면, 나는 스크립트없이 그것을 시도 할 것이다.

+0

바로 제가하고 싶은 일입니다. 고마워요. 하지만 배열을 0과 1로 정확히 지정하려면 어떻게해야합니까? 제 질문이 어리 석다면 미안 해요. –

+0

@ nico.user, 그리드를 만드는 한 가지 방법은 그리드의 공간을 클릭하면 거기에 블록을 추가하는 것입니다. 그런 다음 런타임에 그리드를 저장하십시오. 이것은 쉬운 일이 아니지만 수동으로 모든 1과 0을 넣는 것보다 쉽습니다. 나는 더 좋은 방법을 생각할 수 없다. – Ultimat0