내일배움캠프 22일차 TIL - 라이프 사이클 경험

권태하·2024년 5월 16일
post-thumbnail

Unity 기초 입문 팀 프로젝트

첫 번째 트러블 슈팅

적 생성 주기 조절

문제 1.
적이 매 프레임 생성 됨

적을 n초마다 생성하고 싶음
Update에 그냥 함수를 넣어놨더니 매 프레임 생성.

Time변수를 이용해서 컨트롤 하기로 함.

private float time;
[SerializeField] private float spawnTime = 3;
    
    =======================
    
private void Awake()
{
    Time.timeScale = 1.0f;
}
    
    ======================
    
void Update()
{
	time += Time.deltaTime;

	if (time >= spawnTime)
	{
	  	SpawnEnemy();
 	  	time = 0;
    }
}

적 생성 위치 조절

public class EnemyController : MonoBehaviour
{
    private EnemySpawnController enemySpawnController;
    
    private float positionX;
    private float positionY;
    private float rotationZ;

    private void Awake()
    {   
        // 적 생성 위치 정해주기
        enemySpawnController = GetComponent<EnemySpawnController>();

        positionX = enemySpawnController.CallSpawnPointX();
        positionY = enemySpawnController.CallSpawnPointY();
        rotationZ = enemySpawnController.CallRotationZ();

        transform.position = new Vector3(positionX, positionY, 0);
        transform.rotation = Quaternion.Euler(0, 0, rotationZ);
    }
}

EnemySpawnController로 값이 나오긴 하는데 그 위치로 이동을 안한다.
-> 디버그를 찍어보니까 Controller로 값이 불러와 지는게 없다.

EnemySpawnController의 함수를 Start에서 Awake로 변경
-> 성공!
위치를 정해주는 함수가 Awake에서 모두 이뤄졌어야 했다.

함수의 life cycle상으로 Awake에서 호출 되는 것은 호출 받은 함수도 Awake에서 이뤄졌어야 했다.

A라는 스크립트에서 다른 스크립트를 가져와서 사용했을 때, Awake에서 불러왔을 때 그 스크립트의 모든 life cycle이 끝나고 돌아와서 A 스크립트가 이어서 life cycle이 돌아가는 줄 알았는데, 그게 아니었다. 생애주기 항상 생각하자.

profile
스터디 로그

0개의 댓글