목록면접 질문 정리/Unity (5)
Deff_Dev
1. 오일러 각의 한계점에 대해 설명해주세요 오일러 각강체가 놓인 방향을 3차원 공간에 표시하기 위해 레온하르트 오일러가 도입한 세 개의 각도로 3개의 서로 수직인 X,Y,Z 축 각도로 표현하는 일반적이고 직관적인 방법이다.오일러 각도는 회전한 축을 기준으로 삼아 순차적으로 회전한다.오일러 각은 회전을 세 번(X, Y, Z)에 나눠서 순차적으로 계산하기 때문에 종속적이다. 한계점짐벌락세 개의 회전 축 중 두 개가 겹쳐서 하나의 회전 자유도가 상실되는 현상을 말하고, 특정 각도에서 두 개의 축이 동일한 평면에 놓이면서 발생한다.보간 문제3축에 대해 회전이 종속적이므로 2개의 오일러 각도 사이를 보간할 때, 어느 방향으로 돌아갈지 중간 값을 결정할 수 없는 문제가 생긴다.2. 쿼터니언을 사용하는 이유에 대..
1. 아래와 같이 코드를 작성하고 오브젝트에 작성한 스크립트 컴포넌트를 추가했습니다.public class SomeClass : MonoBehaviour{ [SerializeField] private int intValue = 2; private void Start() { Debug.Log(intValue); }} 인스펙터에서 intValue의 값을 3으로 변경하고, intValue 앞에 선언된 [SerializeField]를 제거했습니다.private int intValue = 2; 이 때 Debug.Log(intValue);의 출력 결과는 어떻게 될까요? 2가 출력된다.SerializeField는 직렬화되지 않은 해당 private 변수를 직렬화하여 인스펙터 창에 표시하..
1. 유니티 최적화 기법은 어떤 것들이 있나요?최적화를 해본 적이 있나요? 없다면 어떤 최적화가 있는지 설명해주세요.GetComponent 및 객체 생성 최적화문제: GetComponent는 비용이 높은 연산이며, new로 객체를 생성하면 힙 메모리에 계속 할당된다.해결: 자주 사용되는 컴포넌트는 캐싱하고, 객체 풀링(Object Pooling)을 사용해 객체 재사용한다.Coroutine 최적화문제: StartCoroutine은 메모리 할당을 동반하므로 자주 시작/중단하는 것은 비효율적이다.해결: 시작/중단을 자주하는 기능은 코루틴이 아닌 다른 방법을 사용한다.ex) UniTask문자열 최적화문제: 문자열 비교와 연결은 새로운 문자열을 생성하며, 이는 메모리 상으로 비효율적이다.해결: 문자열 비교는 변수..
1. 코루틴의 동작원리에 대해 설명해주세요.Coroutine은 IEnumerator를 이용하여 함수를 작성하고 yield return을 사용하여 특정 조건이 충족될 때까지 실행을 일시 중단하고, 그 후에 실행한다.StartCoroutine을 이용하여 해당 Coroutine을 실행할 수 있고, Unity의 메인 스레드에서 동기적으로 처리된다. YieldInstructions 키워드더보기FixedUpdate 이후yield return new WaitForFixedUpdate()모든 스크립트의 FixedUpdate 함수가 실행이 끝난 후에 yield return new WaitForFixedUpdate() 이후 내용을 실행합니다.Update 이후yield return null현재 프레임의 모든 Update 함..
1. Time.timeScale을 0으로 하면 Update와 FixedUpdate는 모두 호출이 되지 않을까요? 그 이유는 무엇일까요?Update와 FixedUpdate는 timeScale에 영향을 받기 때문에 호출되지 않는다.Time.timeScale을 0으로 설정하면 게임의 시간 흐름이 멈추게 되어, 시간에 의존하는 Update와 FixedUpdate는 실행되지 않는다.2. Update의 호출주기에 영향을 주는 것은 무엇일까요?컴퓨터의 프레임에 영향을 받는다. (프레임 당 Update 호출)즉, 프레임 당 한 번씩 호출되기 때문에, FPS가 높은 컴퓨터에서는 Update가 더 자주 호출되고, FPS가 낮은 컴퓨터에서는 Update가 덜 자주 호출된다.이를 보정하기 위해 Time.deltaTime을 사..