Awake(): "Awake는 스크립트 인스턴스가 생성될 때 가장 먼저 호출됩니다.
OnEnable(): "OnEnable은 게임 오브젝트나 스크립트가 활성화될 때마다 호출됩니다.
Start(): "Start는 Awake가 모두 호출된 이후, 게임 오브젝트가 활성화되었을 때 호출됩니다.
FixedUpdate(): "FixedUpdate는 물리 연산을 위한 메서드로, 고정된 시간 간격마다 호출됩니다.
Rigidbody를 이용한 물리 계산이나 힘을 적용할 때 주로 사용합니다.
Update(): "Update는 매 프레임마다 호출되며, 게임 로직과 사용자 입력 처리에 사용됩니다.
프레임 속도에 따라 호출 빈도가 달라지기 때문에, 프레임에 종속적인 연산에는 Time.deltaTime을 곱해 속도를 보정해야 합니다.
LateUpdate(): "LateUpdate는 Update가 끝난 후 호출되기 때문에, 다른 오브젝트의 Update가 완료된 이후에 처리해야 하는 작업에 유용합니다.
OnDisable(): "게임 오브젝트나 스크립트가 비활성화될 때 호출됩니다.
이벤트 리스너 해제나 반복적으로 등록된 콜백을 제거할 때 주로 사용합니다.
OnDestroy(): "게임 오브젝트가 파괴될 때 호출되며, 메모리 해제나 파괴될 때 필요한 정리 작업을 수행합니다.
- Unity의 생명 주기(Lifecycle)에 대해 설명해 주세요.
답변: "Unity의 생명 주기(Lifecycle)는 게임 오브젝트와 스크립트가 특정 시점에 호출되는 메서드들로 이루어져 있습니다.
초기화 단계에서는 Awake()와 Start(), 활성화될 때마다 호출되는 OnEnable(), 매 프레임마다 호출되는 Update(),
물리 연산에 사용되는 FixedUpdate(), 업데이트가 끝난 후 호출되는 LateUpdate(), 비활성화 시 호출되는 OnDisable(),
오브젝트가 삭제될 때 호출되는 OnDestroy()가 있습니다.
이 생명 주기 메서드들을 잘 이해하고 사용하면 게임 오브젝트의 상태 관리와 게임 로직을 효율적으로 제어할 수 있습니다."
- Update 문 3가지(Regular, Fixed, Late)의 차이를 설명해 주세요.
답변: "Update에는 Regular Update, FixedUpdate, LateUpdate가 있습니다.
Regular Update는 매 프레임 호출되며 일반 게임 로직이나 사용자 입력 처리를 담당합니다.
FixedUpdate는 고정된 시간 간격으로 호출되며, 주로 물리 엔진 계산에 사용됩니다.
LateUpdate는 Update가 모두 완료된 후 호출되며, 다른 오브젝트의 상태 변화를 기반으로 후처리 작업을 수행할 때 유용합니다.
예를 들어, 카메라가 플레이어를 따라가도록 할 때 LateUpdate에서 플레이어의 위치를 기반으로 카메라를 이동시킵니다."
- Unity에서 Start()와 Awake()의 차이점을 설명해 주세요.
답변: "Awake()는 게임 오브젝트가 로드될 때 가장 먼저 호출되며,
스크립트 간의 참조 설정이나 초기화를 위해 사용됩니다.
반면, Start()는 Awake()가 호출된 이후 게임 오브젝트가 활성화될 때 호출되며,
초기화된 데이터나 다른 오브젝트와의 상호작용을 설정할 때 사용됩니다.
예를 들어, 게임 오브젝트 간의 참조를 Awake()에서 설정한 뒤, Start()에서는 이 참조를 활용해 초기 애니메이션이나 이벤트를 설정합니다."
- OnEnable()과 OnDisable()의 차이를 설명해 주세요.
답변: "OnEnable()은 게임 오브젝트나 스크립트가 활성화될 때 호출되며,
이벤트 리스너 등록이나 데이터 갱신 등을 수행할 때 사용합니다. 반대로,
OnDisable()은 오브젝트나 스크립트가 비활성화될 때 호출되며,
이벤트 리스너 해제나 데이터를 정리하는 데 사용됩니다.
예를 들어, UI 창이 열리고 닫힐 때 각각 OnEnable()과 OnDisable()을 사용해 이벤트 등록과 해제를 처리할 수 있습니다."
- Awake(), Start(), OnEnable() 호출 순서에 대해 설명해 주세요.
답변: "호출 순서는 Awake() → OnEnable() → Start()입니다.
Awake()는 게임 오브젝트의 인스턴스가 생성될 때 가장 먼저 호출되며,
초기화와 스크립트 간 참조를 설정합니다.
그 다음 OnEnable()이 호출되어 활성화 시 필요한 작업을 수행합니다.
마지막으로 Start()가 호출되며, Awake()와 OnEnable()에서 설정된 초기 데이터를 바탕으로 상호작용을 설정합니다."
- FixedUpdate는 어떤 상황에서 사용하나요? 게임 개발에서 중요한 이유는 무엇인가요?
답변: "FixedUpdate()는 고정된 시간 간격으로 호출되기 때문에,
물리 연산이 필요한 작업에 사용됩니다.
예를 들어, Rigidbody를 이용한 캐릭터의 이동이나 충돌 처리는 FixedUpdate에서 수행합니다.
이는 프레임 레이트에 상관없이 일정한 간격으로 물리 연산이 이루어지도록 보장하기 때문에,
게임의 물리적 일관성을 유지하는 데 중요합니다.
Update()에서는 물리 연산이 불규칙하게 호출될 수 있어 충돌 계산이 부정확할 수 있습니다."
- Unity에서 Time.deltaTime의 역할과 사용 이유를 설명해 주세요.
답변: "Time.deltaTime은 이전 프레임과 현재 프레임 간의 시간 차이를 의미하며,
프레임 독립적인 속도 제어를 위해 사용됩니다.
예를 들어, transform.Translate(Vector3.forward speed Time.deltaTime);와 같이 사용하면 프레임 속도에 상관없이
일정한 속도로 오브젝트를 이동시킬 수 있습니다.
이를 사용하지 않으면 프레임 레이트에 따라 이동 속도가 달라져, 게임의 일관성이 깨질 수 있습니다."
- Unity의 Instantiate와 Destroy 함수의 역할을 설명해 주세요.
답변: "Instantiate()는 게임 내에서 새로운 게임 오브젝트를 생성하는 함수입니다.
프리팹을 복제하거나 실시간으로 게임 오브젝트를 생성할 때 사용됩니다.
Destroy()는 게임 오브젝트를 삭제하는 함수로, 더 이상 필요하지 않은 오브젝트를 메모리에서 제거할 때 사용됩니다.
예를 들어, 총알을 발사할 때 Instantiate()로 총알을 생성하고,
일정 시간 후 Destroy()로 삭제하여 메모리 누수를 방지할 수 있습니다."
- MonoBehaviour의 역할과 기본적인 사용법을 설명해 주세요.
답변: "MonoBehaviour는 Unity에서 스크립트를 작성할 때 사용하는 기본 클래스입니다.
이 클래스를 상속받으면 Unity 생명 주기 메서드(Awake(), Start(), Update() 등)를 사용할 수 있으며,
이를 통해 게임 오브젝트의 행동을 제어할 수 있습니다. 예를 들어,
public class PlayerController : MonoBehaviour { void Update() { // 이동 로직 } }와 같이 사용하여,
Update에서 키 입력을 받아 플레이어를 이동시키는 로직을 작성할 수 있습니다."
- GameObject.SetActive()와 GameObject.Destroy()의 차이점을 설명해 주세요.
답변: "GameObject.SetActive()는 게임 오브젝트의 활성화 여부를 설정합니다.
SetActive(false)로 비활성화하면 게임 오브젝트는 씬에 남아 있지만, 렌더링과 업데이트가 중단됩니다.
반면, GameObject.Destroy()는 게임 오브젝트를 메모리에서 완전히 삭제합니다.
예를 들어, SetActive(false)로 오브젝트를 비활성화하여 일시적으로 보이지 않게 하거나,
Destroy()로 오브젝트를 삭제하여 메모리에서 제거할 수 있습니다."
https://docs.unity3d.com/kr/2019.4/uploads/Main/monobehaviour_flowchart.svg