• 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    해결됨

유니티 콘솔화면에 나타난 내용 문의

21.04.05 16:58 작성 조회수 226

1

안녕하세요.

클래스와 객체의 개념을 어느 정도? 이해는 하고 있는데요.

오늘 강의의 콘솔 출력창 값에 질문이 있습니다.

먼저 이 앞장 강의에서 만들었던 Player object도 있고 이번 강의에서 만들었던 Enemy1, Enemy2 도 유니티에 존재하는 상황입니다.

콘솔창을 캡쳐해 보면,

위 세가지 모든 오브젝트에 대한 출력값이 나타나는데요.

그런데 출력되는 순서가 Enemy2 -> Enemy1 -> Player -> Enemy Script의 Update함수 안에 있는 발사

이런 순서인데 이게 정상인가요?

아님 다른 이유가 있는지 설명 부탁드립니다.

답변 1

답변을 작성해보세요.

2

안녕하세요. 정상입니다. 위의 세줄의 경우 Start 에서 실행되는 문장이고요. 

발사의 경우 EnemyScript 에서 실행되는 문장입니다. 

이전장의 "유니티와 함수" 부분에서 "Update 이벤트 함수" 라는 곳에서 나온 게임루프가 동작하는데요.

각각의 객체가 Start 가 있고 Update 가 있습니다. 어떤 것이 먼저 실행될지는  정해져 있지 않지만 Start 가 실행이 먼저 되고 Update 는 그 후에 계속 프레임마다 실행됩니다. 

아래 그림에서 보시면요.

1 이 실행될때 현재 1-1이 실행되고 1-2 이 실행되고 1-3 이 실행됩니다. 자세히 보시면 플레이어가 제일 먼저 그려져 있는데 순서가 플레이어가 먼저 실행되지 않고 적이 먼저 실행됩니다. (그리고 다른 모든 오브벡트의 Start 도 실행됩니다. 어느것이 먼저 실행될지는 유니티가 정합니다. 그런데 이것이 문제가 되지 않습니다. 정 저희가 원하는 경우는 옵션에서 스크립트의 순서를 실행해줄수는 있습니다.  나중의 강의에 나옵니다.)

스타트가 다 실행되고 나면 2번의 업데이트가 실행됩니다. 이때도 실행되는 순서는 유니티가 정합니다. 예를 들어서 첫번째 업데이트의 프레임에서 2-1, 2-2, 2-3 이 실행됩니다. 

계속해서 다음프레임에서 다시 2-1,2-2, 2-3이 또 실행됩니다. 이제 업데이트는 계속 연속적으로 실행됩니다. 

그러므로 저 콘솔의 동작이 맞습니다. 혹시 궁금하시면 적과 플레이어에서 print(Time.timeSinceLevelLoad); 라는 항목을 출력해보셔도 됩니다. 현재 게임이 실행되고 나서의 프레임의 시간입니다. 

그래서 한프레임에서 순서대로 업데이트가 다 출력되고 나서 다음 프레임으로 넘어갑니다. 

콘솔 그림과 비교해보면 다음과 같습니다.

답변이 되었기를 바랍니다. 감사합니다. ^^