컨트롤 + 7을 누르면 프로파일러가 나옵니다. 혹은 Window > Analysls > Profiler로 접근하여도됩니다.
https://assetstore.unity.com/packages/vfx/particles/particle-pack-127325
에셋 다운로드 및 Import 이후에 이것이 맘에 든다고하면 프리팹을 찾습니다.
예전엔 Include dependencies를 true로 두면 이상하게 export되서 사용 잘 안했었는데,
프리팹에서 Export 누르면 자동으로 의존성 있는것까지 빼오기 때문에, 타에셋에서 가져올거 있을 때, 활용할듯합니다.
3D에서 내적을 구하게 되면 플레이어가 바라보는 시점을 기준으로, 정면은 1 이고 반대 방향은 -1입니다.
좌측 혹은 우측 방향은 0이 될 것입니다.
내적은 유니티에서 normalize하기 때문에 내적의 값은 코사인에 각도값입니다.
45도에 위치하면 해당 링크에 따르면 0.7071일 것입니다.
https://www.chip1stop.com/sp/knowledge/016_trigonometric-table_ko
코드 입니다. 밑은 결과입니다.
정면에 위치하는 친구는 1에 유사하게 나옵니다.
정면 기준 왼쪽 및 오른쪽에 위치하는 친구는 대략 45도쯤에 위치하므로 이정도 값이 나옵니다.
뒤쪽에 하므로 -1에 유사하게 나옵니다.
후방에 위치하므로 -0.7쯤 나옵니다.
완벽하게 x축에 존재하므로 0이 나옵니다.
그러면 이제 재밌는 것이 가능합니다.
플레이어의 정면에서 보기에 가장 가까운 적 탐색입니다!
최소값을 주고, 제일 큰 값은 정면에 가까운 곳에 위치한다는 의미이므로 해당 느낌으로 구성됩니다.
당연히 제일 정면에 있는 큐브에 그려질 것입니다.
그나마 정면에 가까운 각도이므로 왼쪽에 그려집니다.
양수의 값인 큐브가 없으므로 0의 값인 큐브로 그려집니다.
0의 값도 없으므로 -0.7 정도의 값이 제일 큰 값이므로 저런 형태로 그려집니다.
-0.9 정도가 제일 큰 값이므로 후방에 그려집니다!
이제 정면에서 가까이 보이는 대상을 바라볼 수 있습니다.
target의 방향으로 바라보도록하고, 오브젝트의 rotation에 *= 연산을 해줌으로써,
+연산한 것처럼 작동하게 됩니다.
예를들어 rotation이 현재 0 , 0, 0으로 가정하겠습니다.
rotation *= Quaternion.Euler(0, 45, 0);를 하게되면, y로 45도 추가한 값이됩니다.
rotation이 0,25,0이였다고 하여도 45만큼 추가한 값이 되는 것입니다.
실제로는 쿼터니언 연산을 통해 값이 세팅됩니다.
LocalID는 GUID와 달리 로컬 개념입니다.
Instrance ID는 GetHashCode에서 반환하는 값입니다. 유용하게 사용 가능합니다.
GUID는 글로벌 개념의 아이디입니다. Globally Unique Identifier입니다.
애니메이션에 수많은 이벤트가 있는 상태에서 한 개는 None 다른 한개는 무언가의 스크립트입니다.
이때 None은 0으로 나오고, 또 다른 이벤트에는 guid가 들어가있습니다.
이를 활용하면 메타데이터를 쉽게 바꿀 수 있습니다.
실제로 해당 스크립트의 guid값이 애니메이션 메타데이터에 들어간 모습입니다.
InstanceID는 고유 인스턴스 ID입니다.
추후 설명 추가 예정입니다.
Draw Call입니다. 인스턴싱과 연관되는 용어입니다.
Draw Call이 일어나는 동작이 곧 게임 퍼포먼스와 연관되어집니다.
다른 부분에서 고치는것도 좋지만, 이것이 최적화에 도움된다 싶다면 이쪽을 고치는 것이 효율적이게 되는 것입니다.
https://beankong-devlog.tistory.com/23
오브젝트 폴링을 통해 메모리의 단편화를 최소화 할 수 있지만, 인스턴싱을 통해 모양이 똑같은 물체를 20만개 그린다고 가정하겠습니다.
드로우 콜에서는 Mesh나 Material 당 1개 잡히므로, 별다른 최적화 기법을 쓰지 않은한은 1 /* 20만이 잡히게 되는 것입니다.
인스턴싱은 동일한 객체의 경우 저장되어있는 정보로 렌더링합니다.
정적인 객체의 경우는 Static Batching기법을 쓰면 되겠지만 동적인 경우에는 인스턴싱으로 드로우 콜을 줄일 수 있습니다.
추가로 객체화와 인스턴스화는 다른 개념입니다.
어떤 관점에서 보느냐의 차이입니다.
객체화는 인간의 관점, 인스턴스화는 컴퓨터의 관점입니다.
추후 추가로 다루겠습니다.
애니메이션 관련입니다.
Add Behaviour을 눌러서 스크립트를 생성하면 이런 형태로 생기게 됩니다.
애니메이션이 시작 됬을 때입니다.
애니메이션이 실행 중일 떄 입니다.
애니메이션이 끝났을 때 입니다.
두 동작은 애니메이션 동작과 관련되므로 추후 다룰 예정입니다.
애니메이션이 시작할떈 Begin_Equip라는 것을 호출하고 끝나면 End_Equip를 호출하는 동작입니다.
여기서 animator는 실행중인 애니메이터의 정보를 얻을 수 있습니다.
AnimatorStateInfo는 실행중인 애니메이션의 정보를 얻을 수 있습니다.
https://kwonriver.tistory.com/103
layerIndex는 현재 몇번째 레이어인지에 관한 정보입니다.
해당 모델에서 Y BotAvatar를 눌러보면 이런 창이 나옵니다.
구성을 보면 매핑이 어떤 식으로 되었는지 확인이 가능합니다.
Automap을 하면 매핑을 다시 해주게됩니다.
Enforce T-Pose를 하게되면 A Pose로 디자인 됬던 것을 T Pose로 구성해주게됩니다.
이것이 중요한 이유는 A포즈로 디자인된 모델은 언리얼 쪽에서 쓰이고..유니티는 T포즈이므로 변환되는 과정이 없다면 애니메이션이 꼬이게 됩니다.
리타겟팅이라는 것은 추후 다루겠습니다.
2D에서 드로우 콜을 줄이는 방법중 한개의 형태는 스프라이트 아틀란스인데, 이것은 조만간 직접 다뤄볼 예정입니다.
또 3D에서는 공유된 메테리얼을 써도 드로우 콜을 줄일 수 있습니다.
감사합니다.
'학원' 카테고리의 다른 글
54일차 - 2024-10-04 (2) | 2024.10.04 |
---|---|
53일차 - 2024-10-02 (0) | 2024.10.03 |
49일차 - 2024-09-25 (0) | 2024.09.25 |
46일차 - 2024-09-20 (0) | 2024.09.23 |
39일차 - 2024-09-13 (0) | 2024.09.13 |