
문제 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이 돌아가는 줄 알았는데, 그게 아니었다. 생애주기 항상 생각하자.
