Menu
CoddyTech

Awake와 Start

Coddy Unity 여정의 Unity 스크립팅 기초 섹션에 포함된 레슨. 67개 중 55번째.

Unity는 객체가 로드되는 즉시, 해당 객체의 Start()가 호출되기 전에 Awake()를 호출합니다. 이 기능이 유용한 이유는 객체 전반에 적용되는 규칙 때문입니다. 씬이 시작되면 모든 객체의 Awake()가 어떤 객체의 Start()보다도 먼저 실행됩니다. 각 단계에서 어떤 객체가 먼저 실행될지는 Unity가 결정하므로, 그 순서를 믿고 의존해서는 안 됩니다.

이 Player 스크립트는 두 플레이어 P1(startLives 3)과 P2(startLives 5)에 연결되어 있으며, 각 플레이어의 rival은 다른 플레이어입니다.

public int startLives = 3;
public GameObject rival;
int lives;

void Awake()
{
    lives = startLives;   // 이 객체를 설정합니다
}

void Start()
{
    int theirs = rival.GetComponent<Player>().Lives();   // 다른 객체에 물어봅니다
    Debug.Log(name + " sees a rival with " + theirs + " lives");
}

public int Lives()
{
    return lives;
}

첫 번째 버전에서는 Start()에서 lives를 설정했습니다. 먼저 시작한 플레이어는 상대 플레이어가 목숨 수를 설정하기 전에 상대에게 물어보게 되어 0을 기록했습니다. Awake()에서 설정하면 어느 한쪽의 Start()가 물어보기 전에 두 플레이어 모두 목숨 수를 설정하므로, P1은 5를, P2는 3을 기록합니다. 여기서 기억할 원칙은 다음과 같습니다. 객체 자신의 필드는 Awake()에서 설정하고, 다른 객체와는 Start()에서 상호작용하세요.

challenge icon

챌린지

중급

두 벌집인 HiveA와 HiveB는 같은 Hive 스크립트를 실행합니다. 각 벌집은 벌들을 (beeCount에서 가져온 3마리와 5마리) 목록에 생성한 다음, 상대 벌집의 벌 수를 기록합니다. 결과는 HiveA counts 5 rival bees와 HiveB counts 3 rival bees입니다.

플레이를 누르면 한 벌집에서 NullReferenceException이 발생하며 멈춥니다. 상대 벌집이 목록을 만들기도 전에 그 목록을 요청하기 때문입니다. 모든 벌집이 상대의 벌 수를 세기 전에 목록과 벌들을 갖도록 스크립트를 수정하세요. 세는 코드는 현재 위치에 그대로 두세요. 그런 다음 확인을 누르세요.

직접 해보기

using System.Collections.Generic;
using UnityEngine;

public class Hive : MonoBehaviour
{
    public GameObject beePrefab;
    public GameObject rival;
    public int beeCount = 3;
    List<GameObject> bees;

    void Start()
    {
        bees = new List<GameObject>();
        for (int i = 0; i < beeCount; i++)
        {
            Vector3 spot = transform.position + new Vector3(i * 0.6f - 1.2f, 1.5f, 0);
            bees.Add(Instantiate(beePrefab, spot, Quaternion.identity));
        }

        int theirs = rival.GetComponent<Hive>().BeeCount();
        Debug.Log(name + " counts " + theirs + " rival bees");
    }

    public int BeeCount()
    {
        return bees.Count;
    }
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

Unity 스크립팅 기초의 모든 레슨