본문 바로가기

전체 글

(26)
코루틴(Coroutine) 유니티에서 코루틴을 사용하면 다수의 작업을 분산시킬 수 있다.https://docs.unity3d.com/kr/2022.3/Manual/Coroutines.html 코루틴 - Unity 매뉴얼코루틴을 사용하면 작업을 다수의 프레임에 분산할 수 있습니다. Unity에서 코루틴은 실행을 일시 정지하고 제어를 Unity에 반환하지만 중단한 부분에서 다음 프레임을 계속할 수 있는 메서드입니docs.unity3d.com코루틴을 사용하면 비동기 작업을 처리 할 수 있다. 때문에 함수를 멈췄다가 유니티에게 제어권을 반환하지만 다음 프레임이나 특정 프레임에 함수를 다시 실행시킬 수 있다. 코루틴을 사용해 딜레이를 구현할 수 있다.※비동기 - 코드가 끝날때 까지 코드의 실행을 멈추지 않고 다음 코드를 먼저 실행하는 것 ..
Object Pooling 전에 학교에서 최적화 방법으로 총알 등을 구현할때 오브젝트 풀링 디자인패턴을 배워서 구현해서 사용해 본적이 있다. 하지만 후에 유니티에서 오브젝트 풀링을 제공한다는 것을 알고 그 방법으로 구현을 해볼려고 한다. 우선 풀매니저를 만들고 오브젝트가 어떤 풀에 들어가는지 알고 있어야 한다.ObjectPool()에 들어가는것은 (생성함수, Get이 될때 실행함수, Release될때 실행함수, Destroy될때 실행함수, maxSize - 최종적으로 풀에 몇개를 저장할것인지)Get이 실행될때 element가 parameter가 되고 Release가 실행될때 element가 실행한다. 다음은 오브젝트를 만들고 화면에 나가면 Release되게 만든다. 오브젝트가 화면에 나가면 꺼지고 다시 생성시 켜지는 것을 볼 수 ..
Stack과 Heap 스택과 힙에는 메모리들이 저장된다. 각각 저장되는 메모리들이 다르다. 스택에는 지역변수, 함수의 매개 변수 등이 저장되고 함수의 호출때 할당되고 호출이 종료되면 소멸한다.스택은 후입선출(LIFO)의 입출력 형태를 가지고 있는 자료구조다. 크기가 컴파일타임에 정해진다. ※ 컴파일타임(Compiletime), 런타임(Runtime)컴파일타임: 개발자가 작성한 코드를 컴파일(개발자의 코드를 컴퓨터가 이해할 수 있는 언어로 바꿔주는 과정)을 통해 프로그램이 실행가능하게 되는 과정런타임: 컴파일을 마친 프로그램이 사용자에 의해 실행되어 동작할 때 힙에는 동적할당 메모리가 저장된다. C++에서 new로 할당하면 힙영역에 할당되는 것이다. 하지만 C#에서는 Garbage Collection이 있어 자동으로 메모리가 ..
Garbage Collection, GC Garbage Callection이란 자동으로 메모리를 관리를 해준다.https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/fundamentals 가비지 컬렉션 기본 사항 - .NET가비지 수집기의 작동 원리와 최적 성능으로 구성하는 방법에 대해 알아봅니다.learn.microsoft.com그렇기 때문에 개발자가 수동으로 메모리를 관리해주지 않아도 된다. 유니티에서도 GC로 자동으로 메모리를 회수한다. 힙 영역에 메모리가 부족하면 유니티에서 GC를 실행시켜 사용하지 않는 오브젝트를 삭제해 메모리를 확보한다. https://docs.unity3d.com/kr/2021.3/Manual/performance-garbage-collector...
포인터 https://learn.microsoft.com/ko-kr/cpp/cpp/pointers-cpp?view=msvc-170 포인터(C++)Microsoft C++의 원시 포인터 및 스마트 포인터 정보입니다.learn.microsoft.com포인터는 개체의 메모리 주소를 저장하는 변수이다.변수 같이 어떤 데이터를 저장하기 위해 메모리에서 저장할 공간을 할당받는다. 이때 데이터가 저장된 메모리 시작주소를 주소 값이라고 한다.  * 참조연산자를 붙여 포인터 변수를 선언한다. 포인터에 저장된 주소에 저장되어 있는 값을 반환한다.& 주소연산자는 해당 변수의 주소값을 반환한다.  ptr 포인터 변수를 변수 a의 주소값으로 초기화해서 출력해보면 ptr은 a를 참조하기 때문에 3이 출력된다. 참조연산자 없이 그냥 출력..
Class 아이템들 사용에 필요한 변수들을 미리 Item클래스에 만들어 상속 받을 수 있게끔 구현했다.  아이템 사용 스크립트, 코루틴에 사용하는 WaitForSeconds를 매번 new로 힙에 할당하면 가비지가 생기므로 이 부분을 최소화 하기 위해서 아이템을 사용할때 딜레이를 주기 위해 사용될 WaitForSeconds를 미리 클래스에서 선언했다.이러면 한번만 선언해 사용하기 때문에 비교적 최적화에 도움이 될거 같다고 생각했다.각 아이템들 정보를 담는 스크립트, 공통으로 사용할 변수들을 클래스에 미리 선언해 상속받았다.
Interface 인터페이스를 사용하여 아이템들의 공통된 기능을 구현하고 한꺼번에 관리를 해보려고 한다. 참고- 인터페이스 속성 - C# 프로그래밍 가이드 - C# | Microsoft Learn 인터페이스 속성 - C# 프로그래밍 가이드 - C# C#의 인터페이스에 속성을 선언할 수 있습니다. 이 예제에서는 인터페이스 속성 접근자를 선언합니다. learn.microsoft.com 인터페이스를 선언하여 아이템의 종류를 구분할 indexNum, value, 아이템 획득시 구현할 함수 GetItem, 아이템 획득시 아이템 갯수를 증가시킬 ItemCharge함수를 선언했다. IItem을 상속받은 Coin아이템 스크립트다. 안에서 다시 변수랑 함수를 선언하여 만들었다. Player.cs의 OnTriggerEnter함수다. 충돌된..
JSON으로 세이브/ 로드 구현(작성중) Json에 데이터를 저장해서 세이브/로드를 구현해 볼려고 한다. 먼저 DataManager.cs를 만들고 싱글톤을 사용했다. 저장할때 필요한 데이터를 저장시킬 SaveData클래스를 만들었다. Json을 사용하기 위해서 System.IO를 선언했다. SaveData 클래스를 Serializable로 데이터 직렬화를 시켰다. 공부를 하다보니 스크립트 직렬화의 필요성을 알게되었다. Unity Documentation 참고-스크립트 직렬화 - Unity 매뉴얼 (unity3d.com) 스크립트 직렬화 - Unity 매뉴얼 직렬화는 데이터 구조나 오브젝트 상태를 Unity 에디터가 저장하고 나중에 재구성할 수 있는 포맷으로 자동으로 변환하는 프로세스를 말합니다. Unity 에디터에서는 저장 및 로딩, 인스펙터 ..