코루틴을 누군가에게 설명하라고 하면 비동기적인 기능을 만들 때 주로 사용한다고 말할 것이다. 하지만 코루틴은 사실 비동기인 것 처럼 보이는 것이지 동기적으로 진행된다고 알고있다. 그래서 이 애매한 지식을 확실하게 파악하기 위하여 코루틴의 대한 개념을 정리하고자한다. 1. 코루틴이 뭐야? 코루틴이란 순차적인 방식으로 비동기식 코드를 작성할 수 있도록 하는 함수다. 코루틴을 사용할 때는 IEnumerator형으로 메서드를 선언하고 yield return문을 사용하여 비동기적 기능을 제작할 수 있다. 주로 특정 기간동안 실행을 중지할 수 있는 yield return new WaitForSeconds를 사용하거나 한 프레임동안 실행을 중지할 수 있는 yield return null을 사용한다. 이렇게 메서드를 ..
TIL/Unity
유니티에서 콜백기능이라고 하면 딱 떠오르는 대표적인 개념이 하나 있는데 그것이 바로 델리게이트다. 실제로 델리게이트를 사용해본 경험도 있고 사용하는 이유도 어느정도 알고 있지만 정확하게 개념을 파악하진 못했다. 그래서 이번에 확실하게 이해를 하고 넘어가고 싶어 델리게이트에 대해 정리해 보려 한다. 1. Delegate란 뭘까? Delegate를 한국어로 번역하면 대리자, 대표자 라는 뜻이 나오는데 말 그대로 대리자의 역할을 하는 것이 Delagete다. 따라서 Delegate는 메서드에 대한 참조를 나타내며 이를 통해 메서드를 매개변수로 전달하거나 변수에 저장할 수 있는 실체로 처리할 수 있는 대리자다. 근데 메서드에 대한 참조, 메서드를 매개변수로 전달.. 뭔가 말이 되게 복잡하다. 그래서 코드 예시와..
사실 프로퍼티에 대한 개념은 어느정도 알고있다. 하지만 사용법과 개념만 알고있지 이 기능이 무엇이며 왜 사용하는지 깊게 생각해본적이 없다. 그렇기에 누군가에게 프로퍼티를 설명해보라고 하면 어중간한 답변을 할 수 밖에 없을 것 같다. 그래서 프로퍼티를 공부하며 생긴 질문들을 적고 답하며 자세히 알아보려고한다. 1. 프로퍼티가 뭐야? 프로퍼티는 getter와 setter을 이용하여 전용 필드의 값을 읽고 쓰거나 계산하는 등 유연한 방법들을 제공하는 클래스의 멤버다. 프로퍼티는 위 사진과 같이 변수의 값을 얻어낼 수 있는 get과 설정할 수 있는 set으로 선언된다. 2. 프로퍼티를 왜 쓰는거야? 일반적인 변수는 public과 private 등을 이용하여 접근제한을 하는데 public은 어디에서든 접근이 가능..
최종프로젝트를 진행하면서 관련된 데이터 스프레드 시트 파일을 Json화 하는 작업을 Tool이용하여 진행했었다. 하지만 Loading을 하면서 자동적으로 스프레드시트 데이터를 불러오는 방법을 채택했고 그와 관련된 기능을 구현했다. 그곳에서 async와 await를 주로 사용하며 작업을 진행했는데 이 개념에 대해 오늘 정리하고자 한다. async란? Asynchronous의 줄임말로 비동기 처리 구현을 가능하게 해주는 기능이다. 주로 Task와 같이 async Task ~~의 형태로 사용된다. Task -> 작업의 단위를 반환해주는 변수 await란? 작업을 기다린다는 의미로 async와 같이 쓰이는 기능이다. 아무리 비동기 작업이라 한들 async 기능들이 모두 완료되지 않고 함수가 종료될 수 있는 문제..
컴포지션 패턴이란? 단일객체와 복합객체를 동일하게 다룰 수 있게해주는 디자인 패턴 컴포지션 패턴의 구조는 Component - 컴포넌트 Leaf - 단일객체 (Component 상속) Composite - 복합객체 (Component 상속) 이런 구조로 이루어져 있다. 이 개념을 처음 봤을 때는 복합객체? 단일객체? 이게 무슨 소린지 한번에 감이 안잡힐 수 있다. 본인도 확실하게 개념을 잡고 싶어서 글을 찾아 보던 중 좋은 예시를 찾게됐는데 이를 토대로 설명하고자 한다. 우리는 전국의 모든 메뉴들이 사용할 수 있는 메뉴 컴포넌트를 제작한다고 가정하자. 그럼 메뉴판과 메뉴가 하는 기능이 각각 다를 것이다. 그럼 우선 메뉴와 메뉴판이 하는 기능을 메뉴 컴포넌트에 공통 기능으로 제작 후 메뉴와 메뉴판이 각각 ..
유니티에서는 정말로 편리한 기능들을 제공하곤 하는데 그 중에서 내 기준으로 가장 편리했던 기능은 Find 기능이었다. 그래서 유니티를 전문적으로 배우지않고 취미 생활이나 간단한 포트폴리오 제작을 하는 과정에 있다면 Find를 엄청나게 난사하여 사용하는 경우가 있을 것이다. 그래서 오늘은 이러한 기능을 무분별하게 사용할 시 어떤 문제가 발생하는지 알아보고자 한다. Find Find는 내가 원하는 오브젝트를 string으로 검색하여 값을 반환해주는 기능이다. Find의 단점 오브젝트가 어디에 있든 찾아오는 정말 편리한 기능이라고 생각한다. 하지만 Find가 편리하고 성능도 좋다고 생각해보면 싱글톤이란 디자인패턴의 존재 이유, 연관된 기능들로 구성되있는 구조적 설계 등 이러한 것들의 의미가 거의 사라지게 된다..
프로젝트를 하다보면 본인이 설정해 놓은 데이터를 효율적으로 저장하고 받아오고 싶은 경우가 생기곤한다. 하지만 개인 프로젝트를 진행할 때 Json 파일을 연동해서 받아오는 것도 좋지만 Json을 처음부터 쓰지 않는 게임일 수 도 있고 Json을 사용하기엔 애매한 데이터가 있을 수 도 있다. 오늘은 이러한 문제를 해결하기 위해서 사용되는 Scriptable Object라는 기술에 대해 설명하고자 한다. Scriptable Object란? 클래스 인스턴스와는 별도로 대량의 데이터를 저장할 수 있는 데이터 컨테이너다. 다시 말해 본인이 만드는 게임의 기초가 되는 데이터들을 미리 저장하여 원할 때 불러와서 사용할 수 있다. 사용하는 이유 스크립터블 오브젝트의 개념을 보면 이런 생각이 문득 들 수 도 있다. 그냥 ..
유니티 프로젝트를 진행하다보면 오브젝트를 움직이기 위해 스크립트 상에서 코드를 작성해본 경험이 한 번씩 있을 것이다. 근데 Transform에 포지션과 관련된 기능을 본다 가정하면 Transform.position과 Transform.localposition이 존재하는 것을 확인할 수 있다. 로컬과 월드의 개념을 모르고 사용했다면 그냥 내가 원하는 위치에 갈 때 까지 좌표를 계속 바꿔가면서 사용해야 할 것이다. 그렇기 때문에 오늘은 로컬 좌표와 월드 좌표에 대한 개념을 알아보고자 한다. 로컬 좌표 오브젝트를 기준으로 하는 좌표다. 그럼 오브젝트를 기준으로 하는 좌표가 무엇인지 살펴보면 우선 처음에 Square라는 스프라이트를 하나 생성 해주고 그 위치를 (2, 0, 0)으로 설정 해줬다. 그 다음 자식 ..