Void start(){
foreach( Transform hair in hairGroup ) {
myHairs.Add(hair.gameObject);
hair.gameObject.SetActive(false);
}
//foreach(찾을 데이터의 타입과 임시이름 + in + 배열이나 리스트 이름) {명령 어}
//for루프는 반복할 횟수를 정확하게 적어주어야 하지만, foreach구문은 그렇지 않다.
//myHairs 리스트에 변수 hairGroup에서 찾은 헤어의 트랜스폼으로부터 헤어의 게임 오브젝트를 찾아서
//리스트에 넣어주는 작업을 한다.(Add 명령어)
//찾은 게임 오브젝트들을 모두 비활성화 시켜준다.
foreach (Transform upper in upperGroup) {
myUppers.Add(upper.gameObject);
upper.gameObject.SetActive(false);
}
foreach ( Transform bottom in bottomGroup ) {
myBottom.Add(bottom.gameObject);
bottom.gameObject.SetActive(false);
}
}
위 코드를 보면 (리스트명, 임시이름을 제외한) foreach구문이 동일한 형태로 반복되는것을 볼 수 있다.
이 경우에는, 하나의 함수로 통합해서 사용하는것이 코드의 양을 줄이고, 관리하기도 쉬워진다.
MakeDresses 라는 함수를 만들어 코드를 간단하게 바꾸어보자.
void Start()
{
MakeDresses(hairGroup, myHairs);
MakeDresses(upperGroup, myUppers);
MakeDresses(bottomGroup, myBottom);
//MakeDresses함수를 이용하여 구문을 간단하게 변경함.
}
void MakeDresses(Transform dressGroup, List<GameObject> dressList)
//hairGroup과 같은 트랜스폼 데이터를를 받기위한 인자, 리스트 타입의 데이터를 받 도록 하는 인자를 설정
{
foreach (Transform dress in dressGroup) //기존 코드의 hairGroup를 dressGroup로 //임시이름도 dress로 바꿔주었다.
{
dressList.Add(dress.gameObject); //기존 코드의 myHairs를 dressList로
dress.gameObject.SetActive(false);
}
}
1번 코드와 같은 기능으로 작동하면서도 코드는 훨씬 짧고, 간편해졌다.
using UnityEngine;
using System.Collections.Generic;
//List를 사용하기 위한 네임스페이스
//게임을 만드는 과정에서 데이터 의 개수가 늘어나거나 줄어들 수 있으므로,
//몇 개의 데이터를 담아야 하는지 미리 알 수 없다.이 때는 사용하는것이 리스트이다.
public class Character : MonoBehaviour
{
List<GameObject> myHairs = new List<GameObject>();
List<GameObject> myUppers = new List<GameObject>();
List<GameObject> myBottom = new List<GameObject>();
Transform hairGroup;
Transform upperGroup;
Transform bottomGroup;
//트랜스폼 변수 선언 (Girl 오브젝트의 자식오브젝트들을 담기 위함이다)
void Awake()
{
hairGroup = transform.FindChild("hairGroup");
upperGroup = transform.FindChild("upbodyGroup");
bottomGroup = transform.FindChild("downBodyGroup");
//transform.FindChild("") 는 자식오브젝트 중에서 해당 이름을 가진 오브젝트의
//트랜스폼 컴포넌트를 찾아 반환하는 함수.
//유니티에서 부모-자식 관계는 트랜스폼 컴포넌트간의 관계이다.
//때문에, 위 변수선언도 GameObject가 아닌 Transform 데이터타입으로 선언해준 것이다.
}
// Use this for initialization
void Start()
{
MakeDresses(hairGroup, myHairs);
MakeDresses(upperGroup, myUppers);
MakeDresses(bottomGroup, myBottom);
//MakeDresses함수를 이용하여 구문을 간단하게 변경함.
}
void MakeDresses(Transform dressGroup, List<GameObject> dressList)
//hairGroup과 같은 트랜스폼 데이터를를 받기위한 인자, 리스트 타입의 데이터를 받 도록 하는 인자를 설정
{
foreach (Transform dress in dressGroup) //기존 코드의 hairGroup를 dressGroup로 //임시이름도 dress로 바꿔주었다.
{
dressList.Add(dress.gameObject); //기존 코드의 myHairs를 dressList로
dress.gameObject.SetActive(false);
}
}
// Update is called once per frame
void Update() {
}
}