250529

lililllilillll·2025년 5월 29일

개발 일지

목록 보기
186/350

✅ What I did today


  • LD Challenge : L001 : Day 1


📝 Things I Learned


🏷️ OnAudioFilterRead(float[] data, int channels)

  • 오디오 처리할 때 콜백 함수.
  • data에 샘플들 담겨있다. (샘플 : 소리 크기 숫자, 이것들을 다 이으면 오디오 된다.)
  • 채널 2개면 data에 번갈아가며 저장돼있다.
  • 메인 쓰레드와 별개의 쓰레드에서 호출된다.

🏷️ Managed Object

  • .NET 런타임(예: CLR, Common Language Runtime)의 관리 아래 존재하는 객체
  • 메모리 할당, 해제, 가비지 컬렉션 같은 작업을 개발자가 직접 신경 쓸 필요 없이 런타임이 자동 관리
    • new로 만든 C# 객체들 (예: new MyClass())
    • Unity의 MonoBehaviour, ScriptableObject 같은 컴포넌트 객체들
    • 배열, 리스트, 딕셔너리 등 .NET 기본 자료구조들
  • 이거 쓰면 Burst Compiler 못 씀

🏷️ Assembly Definition (asmdef)

  • 기본적으로 Unity 프로젝트의 모든 C# 스크립트는 UnityEngine.dll에 하나로 컴파일한다.
  • 이때 .asmdef 파일을 추가하면 해당 폴더와 하위 폴더의 스크립트들을 별도의 어셈블리로 컴파일하게 만들 수 있다.
  • 근데 의존성을 일일이 추가해줘야 한다. 불편하긴 하지만 의존성 관리에 용이.

🏷️ internal

private 같은 접근 제한자의 일종.
해당 코드(클래스, 메서드, 필드 등)가 같은 어셈블리 안에서만 접근 가능하도록 만듦.

🏷️ [StructLayout()]

  • .NET 런타임에서 구조체나 클래스의 메모리 배치를 지정할 때 사용
  • StructLayout(LayoutKind.Sequential) : 필드를 선언한 순서대로 메모리에 배치하라

🏷️ IDisposable을 자동으로 호출하는 using

using (var resource = new SomeResource())
{
    // 이 블록 안에서 resource 사용
}
// 블록 끝나면 resource.Dispose() 자동 호출됨

GC가 못 닫는 파일 핸들, 네트워크 소켓, 네이티브 메모리 같은 거 자동으로 Dispose()해주는게 using 문법
네임스페이스 using과는 다르다. Burst 컴파일하면 using으로 자동 Dispose 호출 안 해준다.



🕹️ LD Challenge : L001 : Day 1


  • 게임 기획 정리
  • Synth 만드는 방법 연구

OnAudioFilterRead 함수로 파형을 만든다. 그냥 작성하면 0.1ms나 걸림.
실행 속도를 높이기 위해 Burst Compiler를 쓰기 위해 custom data type을 넣기 위해 unsafe를 사용하기 위해 assembly definition를 생성.

profile
너 정말 **핵심**을 찔렀어

0개의 댓글