[Unity]/[C#]

[C# 기초] #10 : 배열(Array)(feat.배열의 길이 변경)

극꼼 2021. 7. 15. 15:42
반응형


 

배열 : 같은 타입의 여러 변수를 하나로 묶어주는 묶음형 변수.

인덱스(index) : 배열의 각 데이터가 가진 일련의 번호. 0부터 시작.

 


[배열의 선언]

int[] Array_Name1 = new int[5];  //데이터타입[] 배열 이름 = new 데이터타입[배열의 길이(개수)]

int[] Array_Name2 = {1,2,3,4,5};  //배열을 초기화하면서 데이터 값을 바로 넣어주는 방식입니다.
//Array_Nave[0] = 1

배열의 index는 무조건 0부터 시작합니다. 

위의 예시에서 Array_Name2[0]에는 1이 들어가고, [1],[2],[3],[4]에는 2,3,4,5 데이터값이 순차적으로 들어갑니다. 

 

 

[배열의 길이 조절]

배열은 처음 선언할 때부터 길이가 정해져 있습니다.

배열의 길이는 일반적으로는 잘 바꾸지 않으며, 굳이 바꿔야 할때는 Resize코드로 변경 가능합니다.

int[] Array_Name = {1,2,3,4,5};위의 배열의 길이를 10으로 늘리기 위한 코드는 다음과 같습니다. System.Resize(ref Array_Name, 10);또는,Array_Name = (int[])ResizeArray(Array_Name, 10);

이때, 새로 생긴 index의 데이터에는 디폴트값으로 0이 들어가기 때문에,

배열 안의 데이터값은 {1,2,3,4,5,0,0,0,0,0}이 됩니다. 

 

 

[배열의 사용]

저는 배열을 리소스 파일 안의 데이터(주로 Sprite)를 받아오거나, 하이랄키 창에 있는 특정 Component를 가진 오브젝트들을 받아올 때 사용합니다. (그 외에는 길이 변동이 자유자재로 가능한 List를 쓸 때가 많습니다. )

글로만 보면 이해가 어려울 수 있으니 예시를 들어보겠습니다.

 

1. 리소스 데이터 받아오기

Assets/Resources 파일 안에 위와 같은 Sprite파일이 있습니다. 2개의 그림으로 잘라놓은 상태입니다.

 

Sprite[] PlayerSprite = Resources.LoadAll<Sprite>("APlayer1");

위와 같은 코드로 PlayerSprite[0]에는 Player_0 그림이, PlayerSprite[1]에는 Player_1 그림이 데이터값으로 들어갑니다. 

 

 

2. 특정 Component를 가진 오브젝트 받아오기

하이랄키 창에 있는 오브젝트들의 일부분입니다.

빨간색으로 표시된 Map1_Hall의 자식들은 모두 공통적으로 'BoxCollider' Component를 가지고 있습니다. 

public GameObject Map1;  //Map1_Hall을 연결했다고 가정...BoxCollider[] Map1_ChildBox = Map1.transform.GetComponentsInChildren();

이때, Map1_Hall오브젝트에도 'BoxCollider' Component가 있을 경우 이것도 함께 배열에 들어가게 됩니다.

Map1_ChildBox[0]에는 Elevator의 BoxCollider가, Map1_ChildBox[1]에는 Door의 BoxCollider, Map1_ChildBox[2]에는 Door(1)의 BoxCollider가 각각 연결됩니다.

반응형