스파르타 23

[스파르타 ][TIL] 유니티 스파르타 7기 58일차 - UniTask

🔷 1. 왜 UniTask를 쓰는가?Unity는 기본적으로 Coroutine 기반의 비동기 처리를 제공하지만, 다음과 같은 단점이 있습니다:Coroutine의 단점UniTask의 장점반환값을 가질 수 없음UniTask로 반환값을 가짐예외처리가 번거로움 (try-catch 안됨)try-catch로 자연스럽게 예외처리 가능중첩 호출 시 복잡하고 유지보수 어려움await로 직관적인 비동기 흐름 가능GC 발생 없음(좋음)이지만 타입 제약 있음UniTask는 GC 거의 없음 + 제네릭 지원🔷 2. UniTask 기본 사용법✅ 단순 지연using Cysharp.Threading.Tasks;public async UniTaskVoid DelayExample(){ Debug.Log("Start"); aw..

[스파르타 ][TIL] 유니티 스파르타 7기 52일차 - 비트 연산

비트 연산은 정수 값을 이진수(0과 1)의 조합으로 보고, 이 비트들을 직접 조작하는 연산입니다. Unity에서 레이어 마스크 처리, 플래그 체크, 퍼포먼스 최적화 등에 자주 사용됩니다.✅ 1. 주요 비트 연산자연산자이름설명&AND두 비트가 모두 1이면 1``OR^XOR서로 다르면 1~NOT (반전)0 → 1, 1 → 0왼쪽 쉬프트비트를 왼쪽으로 밀기 (2의 제곱배 증가)>>오른쪽 쉬프트비트를 오른쪽으로 밀기 (2로 나누기 효과) ✅ 2. 예제: 기본 비트 연산int a = 5; // 00000101int b = 3; // 00000011int and = a & b; // 00000001 => 1int or = a | b; // 00000111 => 7int xor = a ^ b; /..

카테고리 없음 2025.04.23

[스파르타 ][TIL] 유니티 스파르타 7기 51일차 - 커맨드 패턴

🧠 TIL - 커맨드 패턴 (Command Pattern)📌 학습 내용커맨드 패턴은 요청을 객체로 캡슐화하여 서로 다른 요청, 큐잉, 로깅, 취소 등의 기능을 제공할 수 있는 디자인 패턴이다.**요청을 보낸 사람(Invoker)과 요청을 수행할 대상(Receiver)를 분리시켜, 실행 요청을 커맨드 객체로 전달한다.대표적인 구조는 다음과 같다:ICommand: 커맨드 인터페이스, Execute() 메서드 정의ConcreteCommand: 실제 실행 로직을 가진 커맨드 클래스Receiver: 실제 작업을 수행하는 클래스Invoker: 커맨드를 실행하는 주체 (예: 버튼, 메뉴 등)public interface ICommand{ void Execute();}public class MoveComman..

[스파르타 ][TIL] 유니티 스파르타 7기 50일차 - 인벤토리 UI 초기화 시 AddListener 중복 등록 이슈

🧩 문제 요약인벤토리 UI를 초기화하는 로직이 2번 호출되었음그 과정에서 Button.onClick.AddListener()도 두 번 호출결과적으로 버튼에 이벤트 리스너가 중복 등록되어, 버튼 클릭 시 메서드가 2번 실행됨특히 일괄 선택/해제 기능에서 비정상 동작(두 번 선택되거나 해제되는 현상)이 발생함✅ 해결 방법AddListener() 전에 기존 리스너 제거 필요→ button.onClick.RemoveAllListeners() 또는 특정 리스너 제거button.onClick.RemoveAllListeners();button.onClick.AddListener(OnClick);UI 초기화가 중복 호출되지 않도록 UI 초기화 위치를 명확하게 제어하거나 중복 호출 방지 조건 추가🤔 느낀점이벤트 등록..

[스파르타 ][TIL] 유니티 스파르타 7기 49일차 - Variant

✅ 1. Addressables의 Variant (유니티 기준)의미: Addressables에서의 Variant는 리소스의 다른 버전을 의미합니다.예를 들어, 같은 프리팹이지만 고해상도 버전과 저해상도 버전이 있을 수 있고, 이들을 Variant로 구분해서 빌드/로딩할 수 있습니다.Assets/└── Prefabs/ ├── Character.prefab ├── Character_HD.prefab ← 고화질 Variant └── Character_LD.prefab ← 저화질 Variant사용법 개념:어드레서블 그룹에서 "Character"라는 키로 여러 Variant를 등록하고, 런타임 시점에 필요한 Variant를 로드합니다.// 유니티 Addressables 예시Addressab..

[스파르타 ][TIL] 유니티 스파르타 7기 47일차 - 보상리워드

✅ IdleRewardManager 클래스 예시using System;using UnityEngine;public class IdleRewardManager : MonoBehaviour{ private const string LastLogoutKey = "LastLogoutTime"; private const float GoldPerSecond = 1f; // 초당 획득 골드량 public Action OnRewardCalculated; private void Start() { CalculateIdleReward(); } private void OnApplicationPause(bool pause) { if (pause) {..

[스파르타 ][TIL] 유니티 스파르타 7기 46일차 - Nullable

nullable 타입 두 개를 연산하거나 비교할 땐 다음을 조심해야 합니다:둘 다 null일 수 있다.하나는 null이고 하나는 값일 수 있다.둘 다 값일 수도 있다.📌 예제 1: 비교int? a = 5;int? b = null;if (a.HasValue && b.HasValue){ Console.WriteLine(a.Value + b.Value);}else{ Console.WriteLine("둘 중 하나가 null입니다.");}📌 예제 2: null 병합 연산자 ??int? a = null;int? b = 10;int sum = (a ?? 0) + (b ?? 0); // null이면 0으로 대체Console.WriteLine(sum); // 출력: 10📌 예제 3: ??로 우선순위 선택..

[스파르타 ][TIL] 유니티 스파르타 7기 42일차 - PointerEventData

1. 역할과 기능포인터 입력 데이터 캡슐화:PointerEventData는 포인터 이벤트가 발생했을 때 이벤트에 관련된 모든 정보를 한 곳에 모읍니다. 이를 통해 인터페이스 내 이벤트(클릭, 드래그, 터치 등)를 쉽고 일관되게 처리할 수 있습니다.이벤트 전파와 인터랙션:해당 데이터를 이벤트 핸들러(예: IPointerClickHandler, IDragHandler 등)에 전달하여, 사용자 입력에 따른 적절한 로직 실행을 가능하게 합니다.UI 시스템 및 게임 오브젝트 상호작용:UI 요소 외에도 3D 게임 오브젝트 등에서 포인터 이벤트를 사용하여 선택, 클릭, 드래그 등의 상호작용을 구현할 수 있습니다.2. 주요 속성과 변수PointerEventData 클래스는 다양한 속성을 제공하며, 각각의 속성은 특정 ..

[스파르타 ][TIL] 유니티 스파르타 7기 41일차 - MVP패턴

MVP 패턴은 Model-View-Presenter의 약자로, UI와 비즈니스 로직을 분리하여 코드의 재사용성과 유지보수성을 높이기 위한 아키텍처 패턴입니다. 특히 유니티, 안드로이드, 윈폼 등에서 자주 사용됩니다.🔷 MVP 구성요소구성요소역할Model데이터와 비즈니스 로직을 담당함ViewUI 요소를 담당하며, 사용자 입력을 Presenter로 전달함PresenterView와 Model 사이를 중재하며, 로직을 처리하고 View를 업데이트함 🔷 각 역할 설명✅ Model데이터 구조, 로직 처리예: 게임 점수 계산, 서버 통신, 저장 로직 등public class ScoreModel{ public int Score { get; private set; } public void AddScore(..

카테고리 없음 2025.04.07