본문 바로가기

Study

[Unity] ScriptableObject Unity를 이용한 카드게임 개발과정을 보면, 거의 대부분이 사용하는 것이 바로 'Scriptable Object'다. Scriptable Object는 게임 개발에서 데이터 중심 설계를 지원하기 위해 제공되는 특별한 유형의 객체다. 일반적으로 MonoBehaviour와 함께 사용되는 게임 객체와 달리, ScriptableObject는 데이터 저장을 주 목적으로 하며 메모리 및 성능 최적화를 위해 설계되었다.즉, ScriptableObject를 사용하면 데이터를 효율적으로 관리하고, 복잡한 데이터 구조를 공유하거나 독립적으로 유지할 수 있다. 현재 객체지향에서 지향하는 디자인 패턴은 로직의 분리에 초점을 두고 있다.https://waterglass0105.tistory.com/112 MVC / MVVM .. 더보기
MVC / MVVM 패턴 SOLID 원칙은 유연하고 유지보수가 용이한 객체지향 소프트웨어를 설계하는 것이다.그리고 디자인 패턴 중 하나인 MVC와 MVVM 패턴은 이러한 SOLID 원칙을 지향하며, 유니티와 언리얼 엔진에서 주로 사용하는 패턴이다. 1. MVC 패턴구조Model: 데이터와 비즈니스 로직을 처리하는 부분.View: 사용자 인터페이스를 담당하며 Model의 데이터를 시각적으로 표시.Controller: 사용자 입력을 받아 Model과 View를 연결.이를 SOLID 원칙의 관점에서 보면 다음과 같이 정리할 수 있다.S (단일 책임 원칙)각 컴포넌트(Model, View, Controller)는 명확한 책임을 가짐.예: Model은 데이터 관리만, View는 UI 렌더링만, Controller는 입력 처리만 담당.O .. 더보기
[Unity] Layer https://docs.unity3d.com/kr/560/Manual/Layers.html 레이어 - Unity 매뉴얼레이어(Layers) 는 카메라 가 씬의 일부만 렌더링하고 광원 이 씬의 일부만 비추기 위해 가장 많이 사용됩니다. 그 외에도 콜라이더를 선별적으로 무시하거나 충돌을 생성하기 위해 레이캐스팅에docs.unity3d.com  Unity의 Layer는 게임 오브젝트를 그룹화하여 특정 작업이나 연산에 대해 선택적으로 처리할 수 있도록 하는 기능이다.Layer는 보통 물리 연산, 카메라 렌더링, 레이캐스트, 컬링(culling) 등의 작업에서 활용된다.기본개념Unity의 Layer는 게임 오브젝트를 논리적으로 그룹화하는 시스템이다. Tag와 마찬가지로, 각 게임 오브젝트는 하나의 Layer에 할.. 더보기
[Unity] Tag Unity에서 Tag는 게임 오브젝트를 식별하고 분류하기 위한 문자열 라벨이다. Tag를 사용하면 특정 오브젝트 그룹에 쉽게 접근하거나 필터링할 수 있다.예를 들어, 적 오브젝트는 "Enemy" 태그를, 플레이어는 "Player" 태그를 지정하고, Enemy/Player에 해당하는 오브젝트 전체를 쉽게 접근 및 필터링이 가능하다.Tag의 특징각 게임 오브젝트는 하나의 Tag만 가질 수 있다.Tag는 프로젝트 설정에서 사전에 정의해야한다.Tag는 문자열 비교를 통해 특정 오브젝트를 식별하는 데 사용된다.Tag는 대소문자를 구분한다.Tag와 관련된 주요 함수GameObject.CompareTag오브젝트가 특정 태그를 가지고 있는지 확인한다.if (gameObject.CompareTag("Enemy")){ .. 더보기
[Unreal] Socket Attach/Detach UE은 소켓을 붙일 때, component 단위로 붙인다.이는 Unreal Engine의 Actor는 좌표를 가지지 않기 때문이다. 그럼 우선, Component에 대해 알아야한다. Hierarchy 구성은 더 복잡하지만, 중요한 클래스만 정리해보면 위 그림과 같이 구성할 수 있다.1. Actor와 SceneComponent다음 Blueprint Class로 생성한 Actor를 보게 되면, Details에 좌표를 결정하는 Transform이 없는 것을 확인할 수 있다.  하지만 이 액터는 아래와 같이 레벨에 바로 배치가 가능하다.상식적으로 생각해보면, 좌표 정보를 가지지 않았으므로, 레벨에 올리는 것이 불가능해야한다.그렇다면 어떻게 배치가 가능한 것일까? 바로 다음 그림에서 알 수 있다. 블루프린트에서 .. 더보기
[Unreal] PDA, Bundle PDAPDA는 DataAsset의 발전된 형태로, ID를 사용하여 데이터를 관리한다. 즉, 데이터를 ID로 구분하여 불러오며 이 ID를 통해 데이터를 읽을 수 있다. 이때, unload시, 더 이상 사용하는 곳이 없다면 자동으로 garbage collection을 통해 메모리를 정리한다. 즉, Shared Pointer 또한 가지고 있는 것이다.이러한 PDA는 Asset Manager에 미리 등록해서 사용해야 한다. 추가 > 타입 동일하게 > 베이스클래스 설정 > 물리적 디렉토리 설정 가령, PDA를 다음과 같이 구성하였다면// Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "Co.. 더보기
네트워크 기초 허브: 반이중/수신충돌/현재사용안함스위치: 전이중/충돌없음/현재사용함 라우터: 네트워크간 통신/데이터전송/경로탐색(라우팅 테이블)IP주소: 어떤 네트워크의 어떤 컴퓨터인지 구분하는 주소  ISP에서 공인 IP 주소 발급 -> 라우터를 통해 사설 IP 주소로 변환 -> 각 컴퓨터 연결IP 주소는 호스트 IP와 네트워크 IP로 구분된다.클래스의 구분은 네트워크 ID와 호스트 ID의 영역 차이다.Network ID는 소속을 나타내고, Host ID는 개인 주소를 나타낸다.이를 나누는 기준은, 대규모의 경우 소속된 개인 컴퓨터에 할당될 IP가 많을 것이며, 반대로 소규모의 경우 개인 컴퓨터에 할당될 IP가 적을것이다. 따라서 클래스별로 구역을 나누어 사용하는 것이 효율적이다. 하지만 IP 주소 클래스 할당은 브.. 더보기
[Unreal] 언리얼 엔진과 네트워크 언리얼 엔진의 네트워크 시스템을 공부하면서, 언리얼 엔진은 과연 TCP일까 UDP일까 문득 궁금해졌다.찾아보며 다음과 같은 내용들을 찾았다. 우선 언리얼의 NetDriver.h의 내용은 다음과 같다.// Copyright Epic Games, Inc. All Rights Reserved.//// Base class of a network driver attached to an active or pending level.#pragma once#include "CoreMinimal.h"#include "Engine/EngineBaseTypes.h"#include "Engine/EngineTypes.h"#include "Net/NetworkMetricsDatabase.h"#include "HAL/IConsol.. 더보기