unity 10

Unity Design Pattern - Object Pool

Object Pool 방식의 디자인 패턴은 비단 Unity에서만 사용하는 패턴은 아니지만 Unity에서도 유용하게 쓸 수 있는 디자인 패턴이다 Object Pooling은 많은 GameObject들을 생성하고 파괴하는데 CPU를 최적화 시키는 방법으로 GameObject를 다 사용하고 난 후 GameObject를 파괴시키지 않고 비활성화 시킨 후 pool로 되돌리는 방식이다. 이는 GC(Garbage Collector)로 인한 버벅거리는 현상을 줄여주는 효과가 있다. 1. 간단한 Object Pooling 예시 [ObjectPool.cs]public class ObjectPool : MonoBehaviour{ [SerializeField] private uint initPoolSize; [Se..

Unity 2024.06.03

유니티 3D Model 파괴 효과 만들기

Unity로 건물이나 3D Model이 부서져 무너지는 효과를 만드는 방법 Probuilder Package를 이용해 건물이 부서졌을때 조각나는 부위의 GameObject들을 만들고 건물이 부서지면 미리 조각해놓은 오브젝트로 대체해버리는 방식 Probuilder Package로 건물을 조각낼때 조각낼 부위를 Cube GameObject를 사용해 범위를 지정해줄수 있음 건물이 무너지며 폭발하는 효과 - Probuilder 설치 Unity Package Manager에 가서 Probuilder를 설치, 필자의 경우 Probuilder 5.0.7 version을 사용 부서질 모델 오브젝트에 Probuilder MeshFilter Component를 추가할 예정 - Probuilder MeshFilter 추가 ..

Unity 2024.02.26

Unity Android Plugin 만들기

Unity에서 기본으로 지원해주지 않는 기능을 지원하기 위해서나 Native에 내가 구현해놓은 기능을 Unity에 사용하기 위해선 Plugin을 만들어야 함. 필자도 Native에 만들어놓은 기능을 Unity에서 사용하기 위해 Plugin 제작을 하는데 매번 만들때마다 어떻게 만들었는지 까먹어 내가 필요할 때 참고 하기 위해 블로그에 정리함. 개발 환경 PC: Mac Android Studio: Hedgehog | 2023.1.1 Unity: 2021.3.11f1 - Android Project 생성 먼저 Android Project를 생성해 준다. 본인이 만들고자 하는 Plugin의 성격에 따라 원하는 Template를 설정한다. 필자의 경우 "No Activity"를 많이 사용. - Android M..

Unity 2024.01.28

UAAL android.content.res.Resources$NotFoundException: String resource ID #0x0

Android에서 Unity를 Library로 사용하기 위해 UAAL(Unity as a Library) 기능을 사용해보려고 하였다. Unity를 사용하면 내가 구현하고자 하는 기능을 손쉽게 구현할 수 있기 때문이었는데 사용하다가 아래와 같은 에러가 생겼다. android.content.res.Resources$NotFoundException: String resource ID #0x0 Android Resource쪽에 뭔가를 쓰려고 하는데 그것이 없어서 발생하는 문제로 보였는데 역시나 Android UAAL에서 기본으로 참조하는 resource가 있었다. 해당 에러는 안드로이드에 values/string.xml 파일에 아래의 것들을 추가해주면 해결되는 문제이다 Settings Game view

Issue Tracking 2021.12.20

[Unity][ERR_STREAM_DESTROYED]: Cannot call write after a stream was destroyed

Unity로 프로젝트를 만들고 열다가 문제가 발생하면서 에디터가 열리지 않는 문제가 발생 했습니다. 그땐 프로젝트의 최상단 경로에서 Library 디렉토리로 이동하여 ScriptMapper 파일을 찾아 삭제한 후 다시 프로젝트를 열면 문제가 해결되었습니다. ScriptMapper가 어떤 파일인지 잘 모르겠지만 생성 시간이 과거로 되어 있던데 지웠다가 다시 프로젝트를 여니 새로 생성되는걸로 봐선 과거에 설정되어 있는 값을 가져와서 문제가 되는것 같습니다. 다시 생성되게 하면 해결되네요

Issue Tracking 2021.10.30

[Unity] Animator Animation 재시작 방법

Unity에서 Animation을 다시 시작하고 싶은 경우가 있다. 그냥 loop 속성을 주면 다시 시작은 할 수 있지만 문제는 특정한 경우에 다시 시작하고 싶은 경우이다. loop 처럼 계속 다시 시작하는 것이 아닌 특정 버튼을 누른다던가 하는 경우. 제일 쉬운 방법은 Animator Component가 포함된 Object을 비활성화 했다가 활성화 하면 되게 해결되는 경우가 많다. 하지만 문제는 Animator Component가 포함된 Object를 비활성화 하면 안되는 경우!!!, 이런 경우 Animator Component를 비활성화하고 활성화 하면 될 줄 알았지만 되지 않았다. ㅠㅠㅠㅠ 그냥 Animator Component를 비활성화 -> 활성화만 하는 것이 아닌 'Rebind()'라고 하는 ..

Unity 2021.10.29

[Unity] unity android multidex problem

Unity에서 Android 빌드시 빌드는 됐는데 앱을 실행하자마자 앱이 죽어버리는 문제가 발생했다. 로그를 확인하니 아래와 같은 RunTime Exception이 발생하였다. Unable to instantiate application androidx.multidex.MultiDexApplication: java.lang.ClassNotFoundException: Didnt find class "androidx.multidex.MultiDexApplication" on path ..... 찾아보니 해당문제는 multidex 설정만 해주면 해결되는 문제였다. 1. 문제가 발생하는 유니티 프로젝트에서 Assets/Plugins/Android/mainTemplate.gradle 파일을 고쳐준다 위의 이미지에..

Issue Tracking 2021.10.23

The type or namespace name 'UI' does not exist in the namespace 'UnityEngine'

Unity에서 작업 하다 갑자기 에러가 발생! 에디터도 한동안 계속 열리지 않아 당황했는데 자세히는 모르겠으나 유니티에서 사용하는 내부 코드가 꼬인듯 해결책은 의외로 간단한데 프로젝트 폴더로 들어가 "Visual Studio C# Project"와 "Visual Studio Solution" 파일을 삭제 후 다시 프로젝트를 열면 해결된다. 해당 파일들에서 뭔가가 꼬였을때 발생하는 문제인거 같은데 프로젝트를 열때마다 다시 생성되는 파일들이다.

Issue Tracking 2021.10.22

[Unity] Touch for Mobile - Part1

Unity 개발 타겟을 모바일로 했을 때는 PC로 개발했을때와 달리 키보드 입력등을 받는 구조가 아니기에 모바일용 컨트롤을 위한 개발을 따로 해야만 한다. 관련해서 도움이 될만한 내용을 정리해 보도록 하겠습니다. 모바일은 키보드 입력을 Default로 받는 구조가 아니기에 화면 터치를 이용해야 합니다. 화면 터치의 단계는 총 5개의 단계가 있습니다. 1. Began: 손가락으로 처음 화면을 터치 했을때 나타나는 단계 2. Moved: 손가락이 화면과의 접촉을 끊지 않고 위치를 이동했을때의 단계 3. Stationary: 손가락이 화면과의 접촉을 끊지 않고 아무런 이동없이 한곳에 머무를때의 단계 4. Ended: 손가락이 화면을 더 이상 터치하지 않을 때 5. Cancelled: 손가락의 화면 터치 tra..

Unity 2021.09.21

[Unity Issue] mainTemplate.gradle file is using the old aaptOptions noCompress property definition which does not include types defined by unityStreamingAssets constant.

Unity 버전을 올리고 Android로 Build하는 와중 아래와 같은 이슈가 발생하였다. mainTemplate.gradle file is using the old aaptOptions noCompress property definition which does not include types defined by unityStreamingAssets constant. launcherTemplate.gradle file is using the old aaptOptions noCompress property definition which does not include types defined by unityStreamingAssets constant. 이슈는 말 그대로 noCompress Property라..

Issue Tracking 2021.09.07