Unity 47

유니티 코루틴

유니티에서 개발자가 작업하게 되는 환경은 대게 단일 쓰레드이다. C# 잡 시스템을 통해 멀티스레드 코드를 작성할 수 있지만 기본적으로는 단일 스레드라고 생각하면 된다. 이런 환경에서 일정 시간 이후에 작업이 실행된다던가 반복적으로 실행된다던가 하는 상황, 비동기 작업을 하기 힘들다. 코루틴은 이러한 작업을 수행할 때 사용된다. IEnumerator를 반환하는 함수에 yield 키워드를 사용하여 일시 중단할 수 있다.  이때 null을 반환하면 1프레임, new WaitForSeconds(n)을 반환하면 n초 이후에 다음 코드가 실행된다. 반복문을 통해 반복적으로 코드를 실행하게 하는것 또한 가능하다. IEnumerator를 반환하므로 foreach문을 돌리는것도 가능하다. 코루틴은 일정시간 이후에 작업을..

Unity 2024.12.16

유니티 생명주기

유니티 공식문서에서 지원하는 생명주기는 아래와 같다. 자주쓰는 함수들을 살펴보면 아래와 같다.Awake, OnEnable, Start,FixedUpdate, OnTrigger, OnCollision,Update, yeild null, yield waitforseconds, LateUpdate,OnDisable Awake는 항상 Start 이전에 호출되며 프리팹이 인스턴스화 된 직후에 호출된다. 게임오브젝트가 시작하는 동안 비활성 상태인경우 활성화될때까지 호출되지 않는다.Start는 첫번째 프레임 업데이트 이전에 스크립트 인스턴스가 활성화된 경우에만 첫 번째 프레임 업데이트 전에 호출된다.루프상으로 보면 Start는 Enable보다 늦게 실행된다. 하지만 해당 스크립트에서 한번만 발생되는 함수로 반복해서 ..

Unity 2024.12.13

리플렉션

리플렉션은 어셈블리, 형식, 메서드, 프로퍼티 등을 런타임에서 동적으로 가져올 수 있다. 필요한 네임스페이스using System;using System.Reflection; GetType() 함수// Using GetType to obtain type information:int i = 42;Type type = i.GetType();Console.WriteLine(type);이를 출력하면 int의 타입을 그대로 가져오기때문에 System.Int32가 출력된다.이렇게 타입을 가져오기때문에 이를 이용하여 타입을 불러올 수 있고 메서드를 받아올 수 있다.Type type = typeof(Console);MethodInfo method = type.GetMethod("WriteLine", new[] { ty..

Unity 2024.12.12

가비지 콜렉터

가비지 컬렉터(Garbage Collector, GC)는 메모리를 자동으로 정리해주는 프로그램입니다.생성된 객체 중 참조되지 않는 객체를 찾아 정리하여 개발자가 직접 메모리를 할당하고 해제해야하는 부담을 줄여줍니다. 장점 메모리 관리 자동화프로그래머가 메모리 해제를 직접 처리하지 않는다.관리되는 힙에 효율적으로 개체 할당메모리 누수 감소사용하지 않는 객체를 정리하기때문에 메모리의 낭비를 막습니다.안정성잘못된 메모리 해제나 이중 해제 문제 방지 단점성능저하GC가 실행되는 동안 프로그램이 일시적으로 멈출 수 있습니다.비효율적인 메모리 사용객체를 정리할 때까지 불필요한 메모리를 사용하게 됩니다.예측 불가한 타이밍GC의 실행 시점은 제어할 수 없습니다. 가비지 컬렉터의 세대개념은 객체의 수명주기에 따라 메모리를..

Unity 2024.12.11

흑마법: 리플렉션

여기에 초록NPC와 파란NPC가 있다.초록NPC는 상호작용시 강화UI를 열어준다.파란NPC는 상호작용시 옵션추출UI를 열어준다.UI 여는 함수 :         Managers.UI.Show(); 위처럼 제네릭 형식으로 되어있어서 UI 타입을 제네릭에 넣어주어 UI를 연다.  방법1. 스크립트를 따로따로 만들어서 각각 Interact함수에 UI를 열게끔 한다. public void Interact() { Managers.UI.Show(); }그러면 모든 NPC마다 새롭게 스크립트를 작성해줘야하나? 사실 npc마다 다르게 행동하거나 보여주는게 워낙 다양하니까 그렇게 해도 상관없지만 이번에 나는 단 하나의 스크립트에서 처리하게 하고싶었다. 방법2. 클래스 이름을 인스펙터창에서 미..

Unity 2024.12.04

UI를 잡아서 마음대로 움직여보자.

UI를 움직이고 싶을때가 있다.이때 유니티에서 제공하는 IDragHandler를 사용하면 마우스 버튼으로 드래그가 일어나는 지점을 알려준다. 그럼 단순히 transform의 position에 넣으면? piviot을 중심으로 이동하기때문에 우리가 원하는 그림이 나오지 않습니다. 그래서 다음과 같은 코드를 통해 우리가 평소에 봐왔던 UI의 움직임을 구현할 수 있습니다. using UnityEngine;using UnityEngine.EventSystems;public class UIMovableHeader : MonoBehaviour, IDragHandler, IPointerDownHandler{ [SerializeField] private Transform targetTransform; priv..

Unity 2024.12.03

인벤토리 MVP로 도전만 해보기

mvp : 데이터를 저장한 model과 이걸 보여주는 viewer, 그리고 model과 viewer를 연결시켜주는 중재자인 presenter로 나뉜다. ui는 데이터를 보여주는데 충실하고 model은 저장만 해두고 로직은 presenter가 하기때문에 로직이 분리되어 좀더 객체지향적인 UI가 될 수 있다. 인벤토리를 만드는데 이 MVP 디자인 패턴을 사용해보도록 하자. 1. Viewerpublic class UIEquipInventory : UIPopUp{ [SerializeField] private EquipSlot slotPrefab; [SerializeField] Image equipWeaponIcon; [SerializeField] TextMeshProUGUI equipWeapon..

Unity 2024.12.02

슬라임 타워 디펜스

https://www.youtube.com/watch?v=cO-EnkSZA8k일주일간의 팀 프로젝트가 또하나 끝이났다.오늘은 복습 및 해야할 것들, 앞으로 내가 알아야 할 것들을 TIL로써 정리해보고자 한다.  1.Enemy 클래스나는 Enemy클래스를 만들면서 2가지 고민을 했었다. - 움직임에 상태패턴을 적용해야 하는가? - Enemy 추상클래스를 만들고 이를 상속시켜야 하는가?  첫째로 상태패턴을 적용하지 않았던 이유는 몬스터의 상태가 1개밖에 없다고 생각했다. 움직이다가 맞는 모션정도? 그래서 굳이 상태패턴을 적용하지 않았었다.그런데 게임제작 후반부 혼자 생각한 아이디어가 스턴과 플레이어에게 공격이였다. 만약 내가 상태패턴으로 만들었더라면 좀더 간단하게 추가할 수 있었겠지만 그러지 못했다. 이래서..

Unity 2024.11.22