World Space & Local Space
·
🧊Unity Basic/트랜스폼
월드 ( World ) 와 로컬 ( Local )게임 내에서 모든 오브젝트는 Transform 컴포넌트를 가진다.형체가 없는 오브젝트라고 할 지라도 , 위치를 지나고 있다는 의미이다.게임 환경 내에 절대 좌표와 상속 관계에서의 상대 좌표를 사용할 수 있다.이것을 월드 스페이스 ( World Space ) 와 로컬 스페이스 ( Local Space ) 라고 부른다.월드 스페이스 ( World Space ) 와 로컬 스페이스 ( Local Space )좌표계 ( Coordinate Space ) 개념이다즉, 기준점이 어디냐의 차이로 이해하면 된다 1. 월드 스페이스 ( World Space )월드 스페이스는 게임 환경 내의 고정된 글로벌 좌표계를 의미한다. 절대 좌표라고 표현할 수 있다.이 좌표계는 게임의..
짐벌락 ( Gimbal Lock )
·
🧊Unity Basic/트랜스폼
짐벌락 ( Gimbal Lock )짐벌락은 3D 회전 ( 특히 오일러 각 Euler angles ) 을 사용할 때 발생하는 회전 축 손신 문제이다.3D 공간에서 회전은 보통 3개의 축 ( X , Y , Z ) 을 중심으로 순서대로 회전시켜 표현한다.Unity 에서는 transform.rotation = Quaternion ( x , y , z ) 형태로 오일러 각을 사용한다. 하지만 이 방식에는 문제가 있다.어떤 특정한 회전 상태에 도달하면 , 두 개의 회전 축이 서로 겹쳐버리는 상황이 생긴다.그 순간 한 축의 자유도가 사라져서 , 원하는 방향으로 회전이 불가능해진다.이게 바로 짐벌락 ( Gimbal Lock ) 현상이다. ▼카메라 짐벌을 예시로 든다.카메라 짐벌에는 Pitch ( 상하 ) , Yaw (..
유니티 작업중 발생한 문제와 해결
·
📖TIL/🤔발생한 문제와 해결
1. Tank 에서 Bullet 발사시 포구에서 나오지 않는 문제▲하찮다..! 해결 :SpawnPoint 를 따로 만들어 포구 앞에 배치 2. Bullet 발사시 반동 / 포물선이거나 바닥에 내리꽂는 문제 해결 : 포구가 포신에 너무 가깝게 배치되어 Instantiate 할때 Bullet 이 포신을 때리면서 나아감그 영향으로 Tank 가 움찔거리게 되었고 , 포신에 맞고 날아간 Bullet 은 땅에 쳐박히게 되었다.SpawnPoint 를 조금 더 위쪽에 배치하여 해결 3. Bullet 이 일직선으로 나아가지 않고 자유분방하게 날아가는 현상▲의도한건 아니지만 뭔가 멋있기는 하다. 그런데 왜 이런 현상이 ? 해결 :Bullet 이 중력 영향을 받는 것 같아 처음에는 Is Kinematic 을 체크..
251016
·
📖TIL
물리 / 충돌Rigidbody / ColliderMass, Drag, Angular Drag, Use Gravity, Is Kinmatic , Interpolate , Collision Detection , Constraints Collider주의할 점
251015
·
📖TIL
트랜스폼모든 게임 오브젝트가 가지고 있는 기본 컴포넌트 Vector크기와 방향을 모두 가지는 물리적 / 수학적 개념 Vector3 ( x , y , z ) 쿼터니언 Quaternion 인스펙터 창에서 변경하는건 오일러인데 내부에서는 쿼터니언으로 변환 Position// Position을 직접적으로 변경하는 방법Transform.position = new Vector3(x, y, z);// Translate 함수를 이용한 축(x, y, z) 기준의 위치이동 방법Transform.Translate(Direction * Speed);// 선형 보간을 이용해 거리에 따라 빠르게 이동하며 천천히 감속하는 방법Transform.position = Vector3.Lerp(StartPosition, EndPositio..
라이프사이클 한줄 요약
·
🧊Unity Basic/라이프사이클
라이프사이클 ( Life Cycle )게임 오브젝트와 스크립트가 실행되는 순서와 흐름Awake : 오브젝트가 생성될 때 자기 자신 준비 ( 컴포넌트 캐싱 , 싱글톤 설정 )OnEnable : 오브젝트가 활성화될 때 이벤트 구독 / 초기 상태 세팅Start : 첫 프레임 전에 한 번 , 다른 오브젝트까지 모두 준비된 뒤 초기화Update : 매 프레임마다 입력 , 로직 , 타이머 등 일반 실행FixedUpdate : 고정 시간마다 물리 연산 / 이동 처리LateUpdate : 모든 Update 이후 카메라 추적 , 위치 보정 등 후처리OnDisable : 오브젝트가 비활성화될 때 이벤트 해제 , 코루틴 정리OnDestroy : 오브젝트가 파괴될 때 최종 정리 및 리소스 해제
메모리 사용량 체크
·
🧊Unity Basic/오브젝트풀링
메모리 사용량 체크유니티에서 메모리 사용량 ( 메모리 Alloc , GC 발생 , 텍스처 오브젝트 점유 등 ) 을 확인하려면Profiler 창을 사용해야 한다. Profiler 창을 여는 방법상단 메뉴에서 Window 클릭 → Analysis 클릭 → Profiler 클릭( 단축키 Ctrl + 7 ) Profiler 창 구성Profiler 창은 게임 실행 중 ( Play 모드 ) 실시간으로 CPU , GPU , Memory , GC 등의 정보를 보여준다.탭 이름기능CPU Usage어떤 스크립트나 함수가 CPU 를 얼마나 쓰는지 표시Memory전체 메모리 사용량 , 텍스처 / 오브젝터별 점유량 , GC Alloc 등RenderingDraw Call , Batching , GPU 부하Audio사운드 ..
GC 스파이크 ( GC Spike )
·
🧊Unity Basic/오브젝트풀링
GC 스파이크 ( Garbage Collection Spike )GC ( Garbage Collector ) 는 더 이상 사용되지 않는 객체를 자동으로 메모리에서 해제하는 시스템이다.그런데 GC가 작동하는 순간에는 모든 쓰레드가 멈추고 , GC 가 메모리 정리 작업을 수행하게 된다.이때 CPU 점유율이 급상승하거나 프레임 드랍 , 렉이 발생한다.이런 일시적인 성능 저하 현상을 바로 GC Spike 라고 부른다. 작동 과정프로그램이 계속 객체를 생성한다힙 ( Heap ) 에 메모리가 꽉 차면 GC 가 자동으로 실행GC 가 불필요한 객체를 제거이 과정 동안 메인 쓰레드도 일시 정지된다 ( 게임이 잠깐 멈춘 듯한 느낌 )GC 완료 후 다시 정상 실행 유니티에서는 GC 스파이크유니티의 Mono 나 IL2CP..
📌애트리뷰트 한줄 요약
·
🧊Unity Basic/애트리뷰트
애트리뷰트 ( Attribute )Attribute : 코드나 변수에 의도, 조건 , 메타데이터를 부여하는 주석형 명령어 ▼인스펙터 표시 제어 관련[SerializeField] : private 변수도 인스펙터에 표시하고 직렬화 가능[HideInInspector] : public 변수라도 인스펙터에 표시되지 않게 한다[Header("텍스트")] : 인스펙터에 제목을 표시 ( 섹션 구분용 )[Tooltip("설명문")] : 마우스 오버 시 도움말 문구 표시[Space(숫자)] : 인스펙터에서 항목 간 간격 추가[Range(min, max)] : 슬라이더 형태로 입력 제한[Multiline] : 여러 줄 텍스트 입력창 표시[TextArea(min, max)] : 인스펙터에서 지정된 크기의 텍스트박스 표시 ▼..