Development Report : 360도 실시간 원격 VR 스트리밍 시스템 개발
·
Development/Development Report
개발 과정 - 티스토리개발 결과 - 깃허브 1. Insta 360 SDK 1.2 GPU 기반 하드웨어 가속   Insta360 카메라로부터 비디오 데이터를 스트리밍하고, FFmpeg을 활용해 하드웨어 가속을 통한 H.264 디코딩을 수행하며, NVIDIA의 CUDA 기반 디코딩을 지원한다. 또한, 디코딩된 데이터를 BMP 이미지로 저장하거나 원본 H.264 데이터를 파일로 저장하는 기능을 포함하고 있다. 더보기주요 라이브러리 및 헤더#include "Unity/IUnityGraphics.h"#include #include "camera/camera.h"#include "camera/device_discovery.h"extern "C"{#include #include #include #include } U..
Unity Development [1] : 게임 매니저 (Game Manager)
·
Development/3D Engine Development
Unity에서 게임매니저(GameManager)는 게임의 전반적인 흐름과 상태를 중앙에서 관리하는 역할을 한다. 일반적으로 싱글턴(Singleton) 패턴을 사용하여 하나의 인스턴스만 유지하도록 설계되며, 게임의 주요 시스템을 통합적으로 제어하는 기능을 수행한다. 게임매니저는 먼저 게임 상태를 관리하는 역할을 한다. 게임의 시작, 일시 정지, 종료 등의 흐름을 제어하며, 특정 이벤트(예: 플레이어 사망, 레벨 클리어)가 발생하면 적절한 동작을 수행하도록 한다. 또한, 점수, 플레이어 진행 상황, 설정 등의 데이터를 저장하고 불러오는 기능도 포함될 수 있으며, JSON 파일, PlayerPrefs, ScriptableObject 등을 이용하여 데이터를 관리한다. 씬 관리 역시 중요한 기능 중 하나이다. U..
Unity Programming [5] : 유니티 소프트웨어 설계 (Attribute, Gizmos)
·
Development/3D Engine Programming
Unity의 Attribute는 스크립트의 동작이나 Inspector의 표시 방식을 제어하기 위해 제공되는 메타데이터이다. 이들은 클래스, 필드, 메서드에 부여되어 Unity 에디터와 런타임에서 특정 동작을 수행하거나 사용자 경험을 개선하는 데 사용된다. 이를 통해 스크립트의 실행 순서를 조정하거나, Inspector에서 필드를 숨기거나 표시하고, 데이터 직렬화를 제어하거나, 개발 도구를 확장할 수 있다. 아래는 주요 Unity Attribute를 코드 예제와 함께 정리한 것이다.  [ExecuteAlways] [ExecuteAlways]는 스크립트를 Play 모드와 에디터 모드 모두에서 실행되도록 설정한다. 이를 통해 Unity 에디터에서 작업 자동화, 실시간 업데이트, 또는 상태 동기화 기능을 구현할..
AI Programming [0] : AI 환경 세팅 (Environment Settings for AI)
·
Development/Artificial Intelligence Models
1. MiniConda   Anaconda는 데이터 분석과 AI 학습에 필요한 다양한 패키지를 한 번에 설치하고 관리할 수 있는 프로그램 관리 도구로, 창고와 같은 역할을 한다. 이를 통해 사용자는 필요한 도구들을 쉽게 설치하고 업데이트할 수 있다. 여러 프로젝트를 진행하다 보면 각 프로젝트마다 다른 버전의 라이브러리나 파이썬을 요구할 때가 많다. 이런 경우, 가상 환경이 유용하다. 가상 환경은 컴퓨터의 독립적인 가상 폴더와 같아서 각 프로젝트가 독립적인 공간을 가지며, 서로 다른 버전의 패키지들을 설치하고 사용할 수 있다. 예를 들어, 프로젝트 A에서 numpy 1.21이 필요하고 프로젝트 B에서 numpy 1.23이 필요할 때, 같은 환경에서 작업하면 버전 충돌이 일어날 수 있지만, 가상 환경을 사용..
Unity Programming [4] : AI 통합 게임 엔진 (AI-Integrated Game Engine)
·
Development/3D Engine Programming
유니티(Unity)는 실시간 3D 시뮬레이션 환경을 제공하여 AI 모델의 훈련과 테스트를 효과적으로 지원한다. 특히, 물리 기반 시뮬레이션을 통해 로봇 제어, 자율주행차, 가상 환경에서의 사용자 행동 예측과 같은 다양한 AI 응용 사례를 개발할 수 있다. 이를 통해 유니티는 높은 확장성과 유연성을 바탕으로 AI 기술과의 통합을 가능하게 한다. 유니티에서 인공지능 모델을 활용할 수 있는 방법은 센티스, 바라쿠다, ML Agent 등이 있다. 센티스(Sentas)는 유니티 내에서 AI 및 머신러닝 모델의 실행을 지원하는 도구로, TensorFlow, PyTorch와 같은 프레임워크로 학습된 모델을 가져와 유니티 환경에서 빠르게 추론을 실행할 수 있다. 바라쿠다(Barracuda)는 유니티에서 제공하는 경량화..
Unity Development [4] : 애니메이션 (Animation)
·
Development/3D Engine Development
유니티(Unity)에서 애니메이션은 캐릭터, 객체, UI 요소 등의 움직임을 제어하고 시각적 효과를 추가하는 데 사용된다. 유니티는 기본적으로 애니메이터 컨트롤러(Animator Controller)와 애니메이션 클립(Animation Clip)이라는 두 가지 주요 요소를 통해 애니메이션 시스템을 관리한다. 애니메이터 컨트롤러는 각 애니메이션 클립 간의 전환을 설정하고, 복잡한 상태 전환 논리를 구성할 수 있도록 돕는다. 애니메이터 컨트롤러는 상태 머신(state machine) 기반으로 동작하며, 각 상태는 특정 애니메이션 클립을 나타낸다. 예를 들어, 게임 캐릭터라면 '대기', '걷기', '달리기', '점프' 등의 상태가 있을 수 있고, 각 상태에 해당하는 애니메이션 클립을 연결할 수 있다. 이를 통..
Unity Programming [3] : 시스템 로직 (Unity System Logics)
·
Development/3D Engine Programming
1. 유니티 이벤트 프로그램에서 이벤트(Event)는 시스템 내에서 발생하는 특정 동작이나 상태 변화를 처리하는 메커니즘이다. 예를 들어, 사용자가 웹 페이지에서 버튼을 클릭하거나 화면을 터치하는 것과 같은 행동이 이벤트로 간주된다. 이벤트 시스템에서 "제공자"는 이와 같은 사용자 행동을 감지하고, 이를 구독자에게 알리는 역할을 한다. 제공자는 버튼 클릭, 마우스 이동, 키보드 입력 등 다양한 이벤트를 발생시키며, 구독자는 이러한 이벤트를 미리 "구독"하고 있다가, 이벤트가 발생할 때마다 반응을 한다. 예를 들어, 자바스크립트에서 addEventListener 메서드는 구독자 역할을 하며, 버튼 클릭 이벤트를 처리할 때마다 제공자가 발생시킨 클릭 정보를 받아서 지정된 함수를 실행한다.  using Uni..
Unity Programming [2] : C# 입출력 연산 (Input/Output (I/O) operations)
·
Development/3D Engine Programming
1. 파일다루기 2. 네트워크 프로그래밍 3. 데이터베이스 연동 3.1 DBMS의 이해와 MYSQL 설치하기  데이터베이스(Database)는 데이터를 체계적으로 저장, 관리, 그리고 검색할 수 있도록 구조화한 데이터의 집합이다. 이는 데이터의 중복을 최소화하고 효율적인 액세스를 보장하며, 여러 사용자와 애플리케이션이 데이터를 공유할 수 있도록 설계된다. 데이터베이스는 일반적으로 데이터의 저장, 수정, 삭제, 검색을 처리하는 데이터베이스 관리 시스템(DBMS)에 의해 관리되며, 관계형 데이터베이스, NoSQL 데이터베이스 등 다양한 유형으로 분류될 수 있다. 이를 통해 데이터 무결성과 보안이 유지되며, 대량의 데이터를 효율적으로 처리하는 데 필수적인 역할을 한다. 데이터베이스의 특징은 다음과 같다.  데..
Unity Programming [1]: 병행성 추상화 프레임워크 (Concurrency Abstraction Framework)
·
Development/3D Engine Programming
1. 스레드와 태스크 2. 플러그인 모듈화 (Plug-in Modularity) Unity에서 관리되는 플러그인(Managed Plugin)은 .NET 언어(C#, VB.NET 등)로 작성된 외부 라이브러리를 Unity 프로젝트에 통합하여 활용할 수 있는 방식이다. 이러한 플러그인은 Visual Studio와 같은 외부 도구를 사용하여 작성되며, .dll 형식의 어셈블리로 컴파일된다. 관리되는 플러그인은 Unity의 스크립팅 환경과 직접적으로 호환되므로, 복잡한 기능을 모듈화하거나 타사 코드나 외부 라이브러리를 손쉽게 통합하는 데 유용하다.관리되는 플러그인을 사용하는 첫 단계는 플러그인으로 사용할 .dll 파일을 생성하거나 다운로드받는 것이다. 직접 작성하려면 Visual Studio에서 Class Li..
Unity Development [3] : 컴포넌트 기반 아키텍처
·
Development/3D Engine Development
프리팹 (Prefab) 태그와 레이어 (Tag and Layer)유니티에서 사용하는 게임 오브젝트는 각각의 이름이 존재하고, 이를 분류하기 위해 Tag, Layer라는 두 가지 요소를 사용한다. 두 요소가 정확히 무슨 차이이고, 어떻게 사용되는지 알아보자. 아무 게임 오브젝트나 선택한 후 인스펙터 창에서 Tag나 Layer를 클릭하고 하단 [Add Tag] 또는 [Add Layer]를 클릭하면 Tag & Layers 창으로 이동되며, 이곳에서 태그와 레이어를 관리할 수 있다.Tag유니티에서 태그 (Tags)는 게임 오브젝트를 구분하고 분류하는 데 사용되는 간단한 문자열 레이블이다. 주요 기능은 다음과 같다. 오브젝트 분류: 태그를 사용하여 오브젝트를 그룹화할 수 있다. 예를 들어, 모든 적 캐릭터에 "E..