행복한 연어의 이야기

(Unity) 유니티 알고 있으면 좋은 정보 본문

IT/Unity

(Unity) 유니티 알고 있으면 좋은 정보

해피살몬 2020. 1. 28. 20:52

안녕하세요.
예전에 유니티 매뉴얼을 정독하면서 정리 해 놓은게 있어 한 번 올려봅니다.
분명 제가 정리 했던건데 까먹은 것도 있더라구요.ㅋㅋ
한 번 읽어보시면 도움 되실듯 합니다!

정리

  1. Constraints 를 사용해서 각도, 위치 등 일정 수치 이상으로 못 넘어가게 막아 놓을 수 있다.
  2. 쿼터니언은 720 도를 0 도로 인식한다. 오일러 각은 720도 인식
  3. 프로젝트 창에서 기즈모를 설정하여 특정 스크립트가 장착된 오브젝트를 찾을 수 있다.
  4. 프리셋을 이용하여 특정 컴포넌트를 프리팹처럼 사용할 수 있다. 사전 설정 관리자에서 기본으로 해놓을 수 도 있다.
  5. 프리팹화 시킨 프리셋은 에니메이터 창에서도 사용할수 있다.
  6. profilor 창을 이용하면 함수 호출 시기등을 알 수 있다.
  7. ScriptableObject 를 사용하면 정보들을 저장할 수 있다.(참조 형식으로 되어 있어 데이터 크기를 줄일 수 있다.)
  8. JSON 과 ScriptableObject 는 취향 차이라고 한다.
  9. Scene A -> Scene B 로 넘어갈때(씬이 변경될때) 필요없는 에셋번들을 지워주는 함수인
    Resources.UnloadUnusedAssets() 을 실행하는데
    A 로드 -> B 로드 -> A제거(함수실행) 순서로 되기 때문에(메모리에 무거운 A,B 씬이 상주) 가벼운 로딩 씬 같은 C 씬을 만들어
    A 로드 -> C 로드 -> A제거 -> B로드 -> C 제거 식으로 중간에 가벼운 씬을 넣어주는게 좋다.
  10. 에셋 번들은 AssetBundle.Unload(bool)중 true 로 지워주는 게 좋다.(false 는 가비지 생성 확률이 높다)
  11. 캐시서버를 이용하면 (하나의 메인, 나머지 호스트) 에셋을 불러오는 시간을 감소시킬수있다.
    캐시서버 컴퓨터는 충분한 RAM 필요 하지만 CPU사용량은 낮음
  12. IMGUI는 코드 기반 GUI 시스템 (스크립트 된 UI)
  13. treeView는 IMGUI 만 제공된다. 런타임 내에서는 사용할 수 없다.
  14. 애니메이션을 일부 부위만 가져와서 실행시킬수 있다. (아바타 마스크 활용)
  15. 애니메이션 각 값의 변화값을 Curve를 사용해서 시각화 해서 볼 수 있다.
  16. realtime Light 는 실시간으로 움직이는 불빛 (그림자 O)
    mixed Light 는 움직이지 않는 불빛 (그림자 O)
    baked Light 는 미리 불빛을 세팅해 놓는 것 (그림자 X 그림자를 사용하려면 라이트 프로브 사용해야한다.)
  17. Light 를 사용할 때 주의해야할 2가지 문제
    1) 직접 조명의 섀도우를 계산할 때 발생하는 성능 저하를 줄이는 방법
    2) 간접 조명을 처리하는 방법
  18. realtime 조명 CPU 관리 방법 2가지
    1) 라이트맵 해상도를 줄인다.
    2) CPU 사용설정량 을 높인다.(다른 곳에서 줄이고 - 상황에 따라 좋은 선택이 된다.)
  19. 혼합 조명 종류 3가지
    1) Baked Indirect mode - 실시간 조명 과 동일안 시각 효과 , 높은 품질 but 높은 사양을 요구힌디.
    2) Shadowmask mode - 실시간 조명을 제공한다. 중급 품질 and 중저급 사양의 개발을 하는데 용이하다.
    3) Subtractive mode - 실시간 조명 제공하지 않는다.
  20. 전역 조명(GI)은 직접 표면에 닿는 광원(직접광)뿐만 아니라 다른 표면에 부딪혀 반사되는 광원(간접광)을 모델링하는 시스템
    움직이지 않는 정적 오브젝트의 간접광을 미리 baked 해서 계산하는 방식, 그래서 정적은 계산하지 않는다.
    정적 오브젝트를 계산하고 싶으면 라이트 프로브(정적오브젝트에 맞춰 미리 baked 해놓은 텍스쳐)를 사용해야 한다.
  21. 조명을 받고 렌더링되는 아이템을 일컫는 콘텐츠 (콘텐츠의 형상은 조명 컨텍스트가 오브젝트에 적용된 머티리얼에 작용한 결과) (조명을 받는 오브젝트에 영향을 미치는) 씬에 있는 조명을 일컫는 컨텍스트
  22. materials 렌더링 모드 4가지
    1) Opaque - 디폴트. 투명한 영역이 없는 일반 솔리드 오브젝트
    2) Cutout - 나뭇잎이나 구멍과 찢어진 부분이 있는 옷감 같은 투명 영역과 불투명 영역 사이에 하드 에지가 있는 오브젝트
    3) Transparent - 투명한 플라스틱이나 유리처럼 투명한 머티리얼 반사 및 조명 도 계속 투명
    4) Fade - 스페큘러 하이라이트 또는 반사를 포함하여 오브젝트를 완전히 페이드 아웃할 수 있다
  23. 알베도 텍스처에 조명,그림자가 포함되면 안 된다 (조명 받을때 계산되기 때문에 포함되어 있으면 2중으로 들어간다.)
  24. 머테리얼 파라미터
    1) 스페큘러 모드 - 얼마나 거울 같은지
    2) 메탈릭 모드 - 얼마나 금속 같은지
    3) smothness - 얼마나 울퉁불퉁한가 (0에 가까울 수록 울퉁불퉁)
    3) Nomal map(Bump mapping) - 살짝 튀어나온 효과를 줄때 사용
    4) Occlusion Map - 모델의 어느 영역에 높거나 낮은 간접 조명을 비춰야 하는지에 대한 정보를 제공하는 데 사용
    5) Emission - 표면에서 방출되는 광원의 컬러와 강도를 제어(마치 자체 발광하는 것 처럼 보인다.)
    6) Secondary Maps(Detail Maps) - 두 번째 알베도 컬러 맵과 두 번째 노멀 맵을 적용할 수 있습니다.
    7) Fresnel Effect - 지표각에서 반사광 (가장자리 주변에만 나타난다.)
  25. 범프 맵(Bump Maps), 노멀 맵(Normal Maps), 높이 맵(Height Maps)의 차이점
    1) 노멀 맵(Normal Maps), 높이 맵(Height Maps) 은 모두 범프 맵(Bump Maps) 타입이다.
    2) 표면에 표시되는 디테일을 나타내는 데 필요한 데이터가 있지만, 데이터가 각기 다른 방법으로 저장된다.
    3) 최신 실시간 3D 그래픽스 하드웨어는 노멀 맵을 사용한다.
    광원이 어떻게 표면에서 바운스되는 것처럼 표시되는지를 수정하는 데 필요한 벡터가 노멀 맵에 포함되어 있기 때문
    4) 보통 노멀맵만 사용하거나 좀더 사실적인 효과를 주기 위해 노멀맵, 하이트맵 같이 사용한다.
  26. 반딧불 효과를 주기위해서는 블룸 효과를 사용한다.
  27. 공포효과를 주려면 그레인 효과를 사용한다. (사진 필름 효과)
  28. 렌즈 효과 or 중앙 집중 효과를 주려면 비네트 효과를 사용한다. (모서리가 어두워짐)
  29. 텍스처 관련
    1) UV 매핑 - 2D 텍스처를 3D 모델에 매핑하는 경우, 3D 모델링 애플리케이션에서 UV 매핑을 실행
    2) 밉맵(Mip maps) - 카메라에서 멀리 떨어진 오브젝트에 더 작은 Texture 버전이 사용
    3) 노멀 맵(Normal maps) - 모델에 디테일이 더 많이 포함된 것처럼 보이게 하는 데 사용
    4) 세부 맵(Detail maps) - 풀, 바위 및 모래 같은 터레인 영역을 표시
    5) 비등방성 필터링(Anisotropic filtering) - 텍스처 품질을 향상 하지만 그래픽 카드 리소스가 많이 사용
  30. 리지드바디가 적용된 오브젝트는 스크립트에서 포지션과 회전 같은 트랜스폼 프로퍼티를 변경하여 오브젝트를 이동하려고 하면 안된다 (Forces 를 가하여 게임 오브젝트를 밀고 물리 엔진이 결과를 계산하도록 해야 한다.)
  31. 리지드바디를 연결하되, 물리 엔진으로 모션이 제어되는 것을 원치 않는 경우(보통 캐릭터) Is Kinematic 를 체크
  32. 두 오브젝트가 모두 키네마틱 리지드바디이면( Is Kinematic ON이면) OnCollisionEnter 등의 함수가 호출되지 않는다. (하지만 트리거 충돌의 경우 이 제약이 적용되지 않는다.)
  33. Colliders 종류
    1) 정적 콜라이더 - 씬의 바닥, 벽, 다른 고정된 요소를 만들기 위해 Rigidbody 컴포넌트 없는 오브젝트
    collider 는 있다. 트랜스 폼을 수정하면 안된다.
    2) 리지드바디 콜라이더 - 콜라이더와 비키네마틱 리지드바디가 있는(IsKinematic OFF) 오브젝트
    보통의 오브젝트가 여기 해당한다.
    3) 키네마틱 리지드바디 콜라이더 - 콜라이더와 키네마틱 리지드바디가 있는(IsKinematic ON) 오브젝트
    상황에 따라 움직이거나 활성화/비활성화되는 오브젝트 ex) door
    4) 캐릭터 컨트롤러 - Rigidbody 물리를 활용하지 않는 3 인 또는 1 인 플레이어
    플레이어 캐릭터가 물리에 의해 영향을 받도록 하고 싶을 경우 Rigidbody를 사용하는 것이 좋다.
    5) 조인트 - Joint 를 사용하여 하나의 리지드바디 오브젝트를 다른 리지드바디 오브젝트에 붙이거나 공간의 고정 지점에 붙일 수 있다. 레그돌 효과를 줄때 사용된다.

tip) Rigidbody 컴포넌트는 IsKinematic 프로퍼티를 사용하여 언제든 노멀 동작 또는 키네마틱 동작으로 변경할 수 있다.
래그돌 효과 - 캐릭터의 팔다리에 각각 Rigidbody 컴포넌트 IsKinematic ON 한 후 충돌,폭발시 IsKinematic OFF

  1. Fixed Joints 는 오브젝트의 이동을 제한하여 다른 오브젝트에 의존한다.
    부서져서 쉽게 떨어질 수 있는 오브젝트를 구현하거나 부모-자식 관계를 설정하지 않고 두 오브젝트의 이동을 연결할때 사용
  2. Hinge Joint 는 두 개의 리지드바디를 묶어서 힌지에 연결된 것과 같이 움직이도록 제약을 둔다. 문을 표현하는 데 사용
  3. Spring Joint 는 두 개의 리지드바디를 결합하지만 마치 스프링으로 연결되어 있는 듯 둘 사이의 거리가 달라지게 할 수 있다.
  4. animation 진행중 캐릭터의 손이나 발이 특정 지점에 특정 순간에 닿는 방식으로 움직여야 하는 상황에는 Animator.MatchTarget 함수 사용한다.
Comments