[Unity] 게임 만들기 챕터 복습

Gee·2025년 2월 9일

강의 정리

목록 보기
10/10

빗물받는 르탄이 게임

public GameObject rain;

void Srart()
{
	InvokeRepeating("MakeRain", 0f, 1f) // 반복적으로 Rain 생성
}

void MakeRain()
{
	instantiate(rain) // 만든 객체를 넣어서 실행할 수 있도록 해줌
}

풍선을 지켜라 게임

		public GameObject endPanel;
        public Text timeTxt;
        public Text nowScore;
        public Text bestScore;
		public Animator anim;
		bool isPlay = true;
		float time = 0.0f;
        
		public void GameOver()
        {
            isPlay = false;
            anim.Setbool("isDie", true);
            invoke("TimeStop", 0.5f);
            nowScore.text = time.ToString("N2");
            
            // 최고 점수가 있다면 (PlayerPrefs에 bestScore라는 키 값이 있는지 찾기. 있다면 true -> 중괄호로 넘어감)
            if (PlayerPrefs.HasKey("bestScore"))
            {
                // Get float을 통해 bestScore 가져오기 -> best 변수에 저장
                float best = PlayerPrefs.GetFloat("bestScore");
                
                // 최고 점수가 현재 점수보다 작다면
                if (best < time)
                {
                    // 현재 점수를 최고 점수에 저장한다 (bestScore라는 키 값 입력, 넣어줄 값은 time)
                    PlayerPrefs.SetFloat("bestScore", time);
                    bestScore.text = time.ToString("N2");
                }
                // 최고 점수가 현재 점수보다 크다면
                else
                {
                    // best의 값이 그대로 bestScore.text에 들어간다
                    bestScore.text = best.ToString("N2"); 
                }
            }
            // 최고 점수가 없다면
            else
            {	
            	// 현재 점수를 최고 점수에 넣는다
                PlayerPrefs.SetFloat("bestScore", time);
                bestScore.text = time.ToString("N2");
            }
            endPanel.SetAcive(true);
        }
        
        void TimeStop()
        {
      		Time.timeScale = 0.0f;
        }
  • 게임 종료 시 현재 점수와 최고 점수를 나타낼 때, 데이터를 보관하는 기능인 PlayerPrefs를 사용한다.
  • SetFloat는 float 자료형을 세팅, SetString은 string 자료형을 세팅
  • HasKey는 찾아올 키값이 있는지 없는지 확인하는 기능. 있다면 true 없다면 false가 됨

고양이 밥주기 게임

public GameObject food;

void Srart()
{
	InvokeRepeating("MakeFood", 0f, 0.5f) // 반복적으로 Rain 생성
}

void MakeFood()
{
	// 밥을 생성할 위치(강아지의 x, y값)
	float x = transform.position.x;
    float y = transform.position.y + 2.0f;
    
    // 만든 객체를 넣어서 실행할 수 있도록 해줌
	instantiate(food, new Vector(x, y), Quaternion.identity); 
}
  • 추가로 instantiate를 써줄 때 어떤 위치에서 생성할지까지 정해줄 수 있음.
  • 그래서 x, y를 추가해 줌. Dog 스크립트니까 Dog x, y 기준으로 생성될 것
  • Quaternion.identity는 별도의 회전값을 주지 않겠다는 뜻. 회전값 없이 생성한다는 뜻

카드 맞추기 게임

public GameObject card;

void Srart()
{
    for(int i = 0; i < 16; i++)
    {
    	// 반복적으로 card 생성, 보드 스크립트니 보드(this) 트랜스폼에 배치
    	instantiate(card, this.transform);
    }
}

void Update()
{

}
  • 카드 16장을 보드에 생성하기
    for(int i = 0; i < 16; i++)
    {
    	GameObject go = instantiate(card, this.transform);
        
        go.transform.position = new Vector2()
    }
}

void Update()
{

}
  • 카드 16장을 보드에 4x4로 배치하기
  • 배치를 위해 instantiate를 go 변수에 담음
  • go의 Vector2 (x, y)에는 배치에 필요한 원하는 값을 넣어주면 됨
  • for문을 통해서 증가하고 있는 i값을 4로 나눴을 때, 나머지 값을 x, 몫 값을 y에 넣어주면 된다.
    for(int i = 0; i < 16; i++)
    {
    	GameObject go = instantiate(card, this.transform);
        
        float x = (i % 4) * 1.4f;	// 나머지 값
        float y = (i / 4) * 1.4f;	// 몫 값
        
        go.transform.position = new Vector2(x, y)
    }
}
  • 1.4f는 카드의 거리. Scale 1.3에 간격 0.1이 추가된 값
// 16장 카드의 배열
int[] arr = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 };
// 그걸 섞어서 정렬
arr = arr.OrderBy(x => Random.Range(0f, 7f)).ToArray();
  • int arr은 정수 배열
  • 배열을 OrderBy(정렬)할 건데 어떻게 정렬할 건지 소괄호 안에 조건이 들어감
  • => 이 화살표는 해당 배열을 순서대로 한 번씩 순회한다는 뜻. 그걸 랜덤하게 0부터 7까지.
  • ToArray는 그냥 기존의 배열 Array 자료형으로 다시 맞춰준 것
  • 이러면 16장의 카드들이 섞여서 재배열 된다.
// Card 스크립트: 랜덤으로 섞인 값을 각각의 카드에다가 넣어주기

// 값을 받아올 수 있는 변수 생성
int idx = 0;

// 인덱스 번호를 세팅할 수 있는 함수 생성
public void Setting(int number)
{
	// numberfmf idx라고 하는 변수에다가 넣어줌
    idx = number;
}
  • Setting 함수 안에 int number라는 매개변수를 써서 외부에서 이 함수를 호출할 때 어떤 값을 넣어줄 수 있게 됨
  • 첫 번째 생성 카드가 i[7]이라고 하면, 첫 번째로 생성된 카드에다가 Setting 함수에 7을 넣어주고 그 7이 첫 번째 카드의 idx에 들어가게 됨
// Board 스크립트

public GameObject card;

void Start()
{
	int[] arr = { 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7 };
	arr = arr.OrderBy(x => Random.Range(0f, 7f)).ToArray();

    for(int i = 0; i < 16; i++)
    {
    	GameObject go = instantiate(card, this.transform);
        
        float x = (i % 4) * 1.4f;
        float y = (i / 4) * 1.4f;	
        
        go.transform.position = new Vector2(x, y)
        // <Card> 스크립트를 가져오고 그 안 Setting에 i값 넣어주기
        go.GetComponent<Card>.Setting(arr[i]); 
    }
}
  • <Card> 스크립트의 Card 컴포넌트 안에 있는 Setting이라는 함수를 불러오게 하는 것
  • 거기에다 배열의 i번째에 있는 데이터를 넘겨준다
profile
...

0개의 댓글