728x90

분류 전체보기 336

[Unity][디자인 패턴] Component Pattern

*Component Pattern: 로직을 기능별로 컴포넌트 하는 것. 클래스를 분리하고 가독성을 높이고 Decoupling(독자적인 흐름을 보이는 것) 시키는 것은 협업하여 개발을 많이 해본 사람들에게는 자연히 녹아 있는 습관이다. 이런 구조적인 개선 작업을 선배 개발자들이 이미 컴포넌트 패턴으로 명명해 두었다. 특히 Unity 의 GameObject 는 Component 패턴이 잘 반영되어 설계된 클래스이다. GetComponet Method 로 각각의 Decoupling 된 하위 컴포넌트들을 불러서 사용할 수 있다. 유니티는 새로운 행동을 추가하는 컴포지션(composition: 합성) 구조를 채용한다. 이 점은 상속(Inheritance)를 통해 확장되는 오브젝트 지향 클래스 계층과는 위상을 달리..

[C#] Boxing, Unboxing -> Generic

https://learn.microsoft.com/ko-kr/dotnet/csharp/programming-guide/types/boxing-and-unboxing Boxing 및 Unboxing - C# 프로그래밍 가이드 - C# C# 프로그래밍의 boxing 및 unboxing에 대해 알아봅니다. 코드 예제를 살펴보고 사용 가능한 추가 리소스를 확인합니다. learn.microsoft.com https://yeko90.tistory.com/entry/c-%EB%B0%95%EC%8B%B1-%EC%96%B8%EB%B0%95%EC%8B%B1-%EA%B0%9C%EB%85%90 [c#] 박싱(boxing), 언박싱(unboxing) 개념과 사용 이유 기존에 타입을 변환하는것을 형변환(type casting)이..

🎮 Unity Study/C# 2023.09.08

[C#][Unity][디자인 패턴] Strategy Pattern(전략 패턴)

*Strategy Pattern: 여러 알고리즘을 하나의 추상적인 접근점(인터페이스)을 만들어서 접근점에서 알고리즘이 서로 교환 가능하도록 하는 패턴 *사용 예: 워드 문서에서 프린터, 폰트 사용. 어떤 기종의 프린트더라도 'Print' 버튼만 누르면 똑같이 동작함. 게임 캐릭터의 무기(교체 후) 사용. 어떤 무기라도 '공격' 버튼만 누르면 공격 동작을 수행함. public class MyWeapon { //접근점 private IWeapon weapon; //무기 체인지 public void SetWeapon(IWeapon weapon) { this.weapon = weapon; } //무기사용 public void Shoot() { weapon.Shoot(); } } IWeapon 인터페이스를 연결하..

[C#][Unity][디자인 패턴] Command 패턴

* Commnad 패턴: 메서드 호출을 실체화, 즉 객체로 감싼 것. : 함수 호출을 객체로 만든 이유는 디커플링으로 코드가 유연해지기 때문. ex) 입력키 변경, 실행취소/재실행 등의 기능을 만들 때 사용. 1. Command 패턴없이 만든 GetKey 기능 using System.Collections; using UnityEngine; public class Player : MonoBehaviour { [SerializeField] private GameObject shield; [SerializeField] private GameObject cannon; [SerializeField] private Transform firePos; void Update() { if (Input.GetKeyDown(..

[Unity][디자인 패턴] Observer Pattern

한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에게 연락이 가고 자동으로 내용이 갱신되는 방식. 주제와 옵저버가 느슨하게 결합되어 있는 객체 디자인. Subject가 Observer에 대해서 아는 것은 Observer가 특정 인터페이스(Observer 인터페이스)를 구현한다는 것 뿐. Observer는 언제든지 새로 추가할 수 있음. 새로운 형태의 Observer를 추가하려 해도 Subject를 전혀 변경할 필요가 없음. 새로운 클래스에서 Observer 인터페이스만 구현해주면 됨. Subject나 Observer가 바뀌더라도 서로에게 전혀 영향을 주지 않음. 그래서 Subject와 Observer는 서로 독립적으로 재사용할 수 있음. 1. 기본 호출 //옵저버 추상클래스 //: 옵저버들이 구현..

[Unity] Url to Image (RawImage, UnityWebRequest, Couroutine, Action<Texture>)

이미지 Url 를 다운로드해서 이미지 Texture를 변경하는 법을 알아보자. using System; using System.Collections; using TMPro; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI; namespace Main { public class MainCard : MonoBehaviour { [SerializeField] private TextMeshProUGUI titleText; [SerializeField] private TextMeshProUGUI contentText; [SerializeField] private TextMeshProUGUI dateText; [SerializeField]..

C# & Unity Code Convention

Unity 에서 Microsoft와 Google의 C# Code Convention을 기반으로 Unity 권장 Coding 규칙을 정리해준 문서를 제공한다. Create a C# style guide: Write cleaner code that scales Get tips from industry experts on how to create a C# code style guide. A style guide can help your team develop a codebase to support the growth of your project to a commercial-scale production. resources.unity.com 아래 링크에서 번역중 ~ C# Coding Convention C# C..

🎮 Unity Study/C# 2023.08.29

[Unity] Json 로컬 데이터 불러오기

JSON 직렬화 - Unity 매뉴얼 JsonUtility 클래스를 사용하여 Unity 오브젝트를 JSON 포맷으로 상호 전환할 수 있습니다. 예를 들어 JSON 직렬화를 사용하여 웹 서비스와 상호작용하거나, 데이터를 텍스트 기반 포맷으로 쉽게 패킹 docs.unity3d.com json, xml 등 다양한 형태의 데이터 포맷이 있다. 그 중 보기도 처리도 편한 Json 데이터 포맷으로 데이터를 처리하는 법을 알아보자. Json 포맷을 지원하는 라이브러리는 Unity 에서 기본으로 제공하는 JsonUtility 클래스, Newtonsoft의 Newtowsoft.json, Asset Store에서 다운받을 수 있는 JSON.NET(현재 지원종료) 등이 있다. 라이브러리 별로 지원하는 기능이 다른데, 간단한..

[Tistory] 코드블록 테마, 폰트 변경

설정 > 플러그인 > 코드문법강조 플러그인을 적용해주면 기본 테마는 바뀐다. (Visual Studio 테마, Github 테마, Xcode 테마 등) 근데 폰트는 안바껴서 이거 말구 html/css 코드를 custom 했다. 1. 코드 문법 강조 플러그인 설정 취소 코드 문법 강조 설정을 취소해주자. 2. 테마명 가져오기 https://highlightjs.org/examples Examples - highlight.js Language CategoryAll (190)Assembler (5)Common (37)Config (15)CSS (4)Database (2)Enterprise (9)Functional (14)Graphics (5)Lisp (5)Markup (3)Misc (59)Protocols (..

카테고리 없음 2023.08.22

[Unity] 병목현상과 메모리 관리

메모리 최적화가 왜 필요한지 근본적인 원인을 알아보자. #PC의 경우 Storage(HDD, SSD, SD)에 있는 데이터를 CPU 메모리로 올라가고 그 중에 렌더링이 필요한(Texture, Shader 등) 데이터면 GPU 메모리에 올라가게 된다. 이 때 PC는 64bit, 32bit가 존재하는데 64bit = 2^64 = 16EB(엑사바이트) 32bit = 2^32 = 4GB 의 메모리를 말한다. 즉, 물리적 PC 기계의 메모리는 10GB인데 게임에서 메모리를 12GB를 쓴다면, Storage의 일부공간을 가상메모리로 쓰는 Swap Paging 이 일어난다. (더 많은 공간을 쓸 수 있도록 지원하는 것) 이 Swap Paging이 많이 일어나면 병목현상이 일어나는 것이다. GPU Memory에서도 모..

728x90