전체 글 108

RAII, 스마트 포인터

C++에서 가장 흔한 버그 클래스는 new로 메모리를 할당 했을때 Delete가 누락되서 발생하는 메모리 누수라고 한다.이때 메모리 누수를 방지하기 위해 강조되는 원칙이 Resource Acquisition Is Initialization(RAII)라고 하는데,개체가 리소스를 소유하고 객체가 스코프를 벗어났을 때 할당된 자원을 반환하도록 하는 것이다. 비주얼 스튜디오의 성능 프로파일러를 사용하여 메모리를 반환하지 않았을 메모리 사용량을 체크해보았다.int main(){ for (int i = 0; i        int main(){ for (int i = 0; i   다음과 같이 메모리를 반환하지 않을 경우 arr에 int배열이 메모리에 쌓여 메모리 누수가 일어난다. 메모리 누수가 일어나면 ..

C++ 2024.10.02

유니티 오디오 클립 압축형식(Compression Format)

유니티에는 다음과 같이 압축형식(Compression Format)이 있다. PCM은 3가지 중에서 가장 고사양의 압축 형식으로, 다른 포맷의 경우 압축을 해서 크기를 줄이는데 PCM은 압축을 하지 않는다. PCM을 적용한 파일은 크기 때문에 짧은 음향효과에 적합하다, 효과음에는 PCM을 적용해서 음질을 더 높여주는게 좋다. Vorbis는 PCM보단 가볍지만 음질이 덜 좋은 형식으로 Quality 슬라이더를 조정하여 압축률을 조절할 수 있다.(압축률이 높아질수록 음질이 더 좋아짐) 중간크기의 음원에 적합하다. ADPCM은 PCM보다 3.5배 정도 압축비가 낮지만 CPU사용량이 PCM이나 Vorbis에 비해 훨씬 낮기 때문에 노이즈가 많거나 대용량의 음원에 적합하다. 압축률이 높아질수록 작은 파일크기를 가..

개인 공부 2024.01.05

디스크 골프 [#21] - URP프로젝트로 전환하기

프로젝트의 외적인 퀄리티를 높이기 위해서 URP파이프라인을 사용해보기로 했다. URP는 Universal Render Pipeline의 약자로 공식문서에 따르면 라고 한다. 기존프로젝트에서 URP로 전환하면 문제가 생겼을때 복구가 어려울수도 있기 때문에 새프로젝트에 기존프로젝트를 옮겨서 URP로 전환할 생각이다. 기존프로젝트의 에셋을 Export해서 새 프로젝트로 이식 해보자. 기존 프로젝트의 에셋이 유니티 패키지 파일로 받아 졌다. 새 3D URP 프로젝트를 파자. 그리고 다운받은 유니티패키지파일을 새 프로젝트에 임포트해주었다. 임포트된 파일을 까봤는데 메테리얼이 분홍색으로 변해 있었다.. 전에 이것에 대한 대처를 에셋을 구매한 사이트에서 확인했기 때문에 따라서 해보자. 대충 Built-in 프로젝트를..

VR 콘텐츠 제작 2024.01.04

디스크 골프 [#20] - 맵 새로 만들고 최적화하기

원래 맵을 터레인을 사용해서 만들었었는데 터레인을 사용하니 vr기기로 앱을 돌릴때 렉이 너무 많이 걸린다는 것을 깨달았다. 터레인은 메시자체가 무겁기도하고 아무래도 이번에 제작한 맵의 크기가 크다보니 기기가 감당할 정도의 성능으로 돌리기가 어려웠다. 결국 터레인의 해상도를 줄이고 최적화를 해서 프레임을 올렸지만 해상도를 낮추다보니 터레인의 퀄리티가 매우 안좋아졌다. 그래서 생각한게 터레인이 무거운 이유는 맵을 만들면서 터레인의 버텍스 수가 많아지기 때문인데 터레인을 평지로 맞추고, 원래 산맥이 있던 자리를 돌 프리펩으로 대체해서 사용하는 방법이다. 그래서 일단 만들어 놓은 터레인을 만일을 대비해 복사한 다음, Flatten 버튼을 눌러서 기존에 있던 터레인을 평지로 만들어주었다. 그리고 지금 사용하는 에..

VR 콘텐츠 제작 2023.12.29

디스크 골프 [#19] - 시네마틱 도입부 만들기2

저번에 Mountain맵에서 쓸 타임라인을 만들었기 때문에 이번에는 Island맵에서 쓸 타임라인을 만들어 볼 것이다. Island맵은 골프카가 아니라 보트를 타면서 등장하는 연출로 해보고자 한다. 그걸 위해서 보트 모델을 구해서 씬으로 가져와주었다. 저번 타임라인과 마찬가지로 애니메이션을 사용해서 보트를 움직여보자. 보트에 Animator 컴포넌트를 추가해주었다. 이제 애니메이션을 만들자 그런데 만들고보니 애니메이션만 있는게 너무 밋밋해서 보트가 움직일때 물보라가 치는 효과를 넣어 주고 싶었다. 검색을 하다 깃허브에 있는 Boat Attack 프로젝트를 한번 까보기로 했다. https://github.com/Unity-Technologies/BoatAttack GitHub - Unity-Technolo..

VR 콘텐츠 제작 2023.12.26

디스크 골프 [#18] - 빌드 시 화면 번지는 현상 고치기

앱을 빌드해서 메타 기기에서 실행해보았는데 화면이 검은색으로 나오는 동시에 스틱에서 나오는 빛이 잔상이 남으면서 여러개가 생기는 현상이 발생했다. 가장 먼저 의심가는건 그래픽인데 기존 vulkan만을 사용하던걸 OpenGL3.0을 추가해서 빌드해보았다. 빌드해보았더니 문제가 개선되지 않았다. 그래서 카메라 앞을 따라다니는 오브젝트가 영향을 줄 수 있다고 생각하여 TitleScene의 Fade오브젝트를 지우고 Title을 비활성화 하고 다시 빌드한 다음 실행해보았다 .그런데도 개선되지 않았고 이번에는 맵자체를 비활성화한다음 다시 실행시켜봤는데 이번에는 제대로 화면이 잘 나왔다. 그럼 맵이 문제라는 소린데 정작 맵이 없는 다른 씬도 화면이 이상하게 나왔다, 그래서 전에 빌드한 파일과 뭐가 달라졌을까 곰곰히 ..

VR 콘텐츠 제작 2023.12.26

디스크 골프 [#17] - 커스텀 핸드

Oculus의 공식 Document를 보면서 Disc Golf에 사용할 장갑 손을 VR핸드로 매핑해보자. https://developer.oculus.com/documentation/unity/unity-isdk-customize-hand-model/ Use Custom Hand Model | Oculus Developers developer.oculus.com 씬을 새로 하나 파주자. 공식 문서에서는 LocomotionRIng을 사용하는데 현재 프로젝트의 SDK는 57.0v라 LocomotionRing이 없기 때문에 새로 프로젝트를 파서 Oculus 60.0v을 다운 받고 메시를 만들어야 할 것 같다. 근데 All in one 60.0v와 mobile까지 깔아보았는데도 LocomotionRIng이 없었..

VR 콘텐츠 제작 2023.12.21

디스크 골프 [#16] - 시네마틱 도입부 만들기

저번에 만든 자동차를 활용해서 게임 도입부에 사용할 시네마틱한 도입부를 만들 생각이다. 카메라의 처리엔 시네머신을 사용하면 적합할 것이라고 생각했고 자동차의 움직임을 어떻게 다룰까 고민하다가, 코드를 짜서 이동하는 것보다 애니메이션을 써서 이동하는게 더 자연스러울 것이라 생각해서 애니메이션을 이용해서 자동차를 움직이기로 했다. https://www.youtube.com/watch?v=Gzvvt7JnGvE 자동차 애니메이션 구현엔 다음 영상을 참고했다. 먼저 Animation폴더를 만들고 Car애니메이터와 Cinema1애니메이션을 만들어줬다. 그리고 만든 자동차 애니메이션의 녹화 버튼을 클릭하고 위치와 로테이션을 변경해주면서 애니메이션을 생성했다. 자동차의 애니메이션을 만들었으니 Cinemachine을 사..

VR 콘텐츠 제작 2023.12.20