728x90
반응형

Game Development, 게임개발 182

Unity에게 MonoBehaviour란..? [Unity]

유니티에서 New Sciript로 뭐만 만들면 항상 기본적으로 상속되는 클래스 중 하나인데 뭐하는 애일까?? 알아보자 MonoBehaviour 클래스는 유니티에서 미리 만들어져서 제공되며 컴포넌트에 필요한 기본 기능을 제공한다. 줄여서 말하자면 MonoBehaviour에는 컴포넌트에 필요한 필수 기능들이 들어가있다. 다시 말하면 MonoBehaviour를 상속받아야만 컴포넌트 기능을 쓸 수 있는 것이다. **유니티의 모든 컴포넌트는 MonoBehaviour를 상속한다. 컴포넌트를 이해하기 위해 컴포넌트 패턴이 어떻게 작동하는 지를 알아보자. 컴포넌트들은 서로 관심이 없다. -> 어떤 컴포넌트는 다른 컴포넌트에 의해서 "의도하고 찾아내기"전 까지 알 수가 없다. 마찬가지로 유니티 엔진에서도 해당 컴포넌트가..

UnityEvent, UnityAction - 유니티 이벤트, 유니티 액션[Unity]

오늘 나의 무능함을 느끼고.. 공부를 다시 시작해본다. 너무 우울하다. 서론이 길었다. 알아보자 UnityEvent란 무엇인지 먼저 알아보자 ** using UnityEngine.Events 를 해야 쓸 수 있다. ** UnityEvent는 MonoBehavior를 상속받는 모든 클래스에 사용가능하다. 유니티는 수많은 콜백함수를 제공하는데 마지 옵저버 패턴과 같이 이벤트가 일어나길 기다리고 있다가 특정한 이벤트가 일어났을 때 수행하게 된다. **우리가 UI의 버튼을 만들면 onClick에 수행할 함수나 객체를 등록해서 함수를 실행시키거나 객체 활성화 등을 할 수 있는 것과 같은 이치다. ??그럼 그냥 Inspector에서나 추가하면 되는 것이지.. 뭣하러 스크립트에서 추가한대유??? 에셋과 스크립트 충돌..

Async , Await 키워드, 비동기 프로그래밍(Asynchronous Programming) [Unity]

기존에도 비동기 프로그래밍 방법이 있었지만 Async와 Await은 C# 5.0부터 더 나은 비동기 프로그래밍을 지원하기 위해 나온 키워드이다. 알아보자 우선 Docs의 정의는 await 연산자는 피연산자가 나타내는 비동기 작업이 완료될 때까지 바깥쪽 await 메서드의 평가를 일시 중단합니다. async 한정자를 사용하여 메서드, async 또는 무명 메서드를 비동기로 지정합니다. 메서드 또는 식에 이 한정자를 사용하면 비동기 메서드라고 합니다. **참고로 C# 7.0 에서는 이러한 3가지 async 리턴타입에 대한 제약을 넘어 커스텀 리턴 타입을 허용하게 되었다. -> Custom 리턴 타입의 하나로 .NET Framework에서 ValueTask 라는 타입이 제공되고 있는데, Nuget 패키지에서 ..

Task, Task<TResult> 클래스 , 비동기 프로그래밍 [Unity]

일반적으로 System.Threading.Tasks 네임스페이스 안에 2가지 클래스가 대표적으로 들어있는데 1. Task -> 비동기 작업을 나타냄 2. Task -> 값을 반환할 수 있는 비동기 작업 위 2개의 클래스들의 역할은 간단하게 말하자면 쓰레드풀로부터 쓰레드를 가져와 비동기 작업을 실행한다. ** Task 관련 클래스들과 Parallel 클래스들을 합쳐 Task Parallel Library(TPL)이라 부르는데 기본적으로 다중 CPU 병렬 처리를 염두해서 만들었다. ???뭔지 모르겠다고?? 알아보자 먼저 1번 Task부터 살펴보자 Task클래스 사용을 위해 흔히 사용되는 방법은 두 가지가 있다. 첫번째로 Task.Factory.StartNew()를 사용하여 실행하고자 하는 "메서드에 대한 델..

Reactive Programming이란, Rx란?

반응형 프로그래밍이라고 직역되는 말인데 이렇게 해야 성능을 제대로 이끌어낼 수 있다고 사람들이 말하곤 하는데 정확히 무엇인지 모르는게 다수다. 알아보자 우선 깔고 가야할 것이 있다. 우리가 지금까지 배운 개발 방식은 전혀 반응형 프로그래밍 방식이 아니다. 우리는 절차적, 함수형, 객체지향 등의 방식을 통해서 프로그래밍을 배웠다. 하지만 진짜 알기 위해선 새로운 모드를 우리의 머리에 추가시켜야 한다. 바로 Reactive 모드이다. ?? 아니 Reactive가 뭔지 알아야 모드를 만들든지 말든지 하지...? 줄여서 말하면 Reactive programming 은 비동기 데이터 스트림으로 프로그래밍을 하는 것이다. ???아는 단어로 설명해줘야지.. 새로운 단어가 나온 것 같은데?? 비동기 데이터 스트림이 뭔..

UniRx, Reactive Extension for Unity - 개념 2

UniRx에 중요한 키워드가 몇 가지 있다. 그것에 대해서 충분히 알아보자. 알지 못하면 그냥 코드를 따라쓰는 것 뿐이 안된다. Subject 실제로 우리가 UniRx를 쓰는데 모든 기초가 되는 객체이다. 뒤에 나올 ReactiveProperty도 다른 스트림 생성하는 객체의 베이스는 Subject를 따른다. IObserver이기도 하면서 IObservable의 대상이다. 즉, 스트림을 발행도 할 수 있고 스트림을 받는 주체이기도 하다. UniRx를 쓰려면 스트림을 생성해야 하는데 스트림을 생성하는 것이 바로 Subject이다.줄여서 말하자면 우리가 Reactive Programming을 하기 위해서어떤 값의 변화를 관찰하고 싶다..?해당 값을 Subject화 시키는 것이다.그리고 해당 Subject가 ..

C#/Unity Event - 개념

Event에서 간단하게 정리하려고 한다. 알아보자 무엇이냐??? Event는 C#이 지원하는 하나의 기능으로 특정한 일(event)이 있어났음을 외부의 이벤트 가입자(subscriber)들에게 알려주는 기능을 한다. 즉, 외부와의 커플링, Coupling을 줄이기 위한 도구 중 하나이다. 왜쓰냐?? 위에서 말했다시피 Coupling을 줄여줌은 물론 Event가 발생했을 때만 Subscriber된 함수가 실행됨으로 Update로 항상 지켜보지 않아도 된다는 장점이 있다. -> 하지만 해당 Event를 발생시키는 것은 Update로 봐야한다는 단점도 존재한다. 결국 Event의 Event도 어차피 누군가는 감지를 해야 발행할 수 있으니까..? 어떻게 사용하는 지를 보면서 더 감을 잡도록 하자. 어떻게 쓰냐?..

UniRx, Reactive Extension for Unity - 개념

UniRx가 무엇이길래 요즘에 엄청 많이쓰나?? 알아보자 무엇이냐?? UGUI, GameObject 등의 유니티의 시스템으로도 쉽게 Reactive Programming 의 사용을 가능하게 한다. 즉, 비동기적 처리를 더 효율적으로 하기 위한 도구 중 하나라는 말이다. 기존에는 그렇다면 비동기처리 도구가 없었느냐? 있다면 기존의 것은 뭐가 안좋은데?? 없었던 것은 아니었다. 닷넷에는 .NET Rx이라는 것이 있었다. 하지만 Unity에 최적화된 것은 아니었다. 즉, UniRx는 Unity C#에 최적화되어 만들어져있다. 때문에 Unity 개발에 유용한 기능이나 오퍼레이터가 추가적으로 구현되어 있다. 게다가 ReactiveProperty 등이 추가되어 있다. 그래서 UniRx가 기존의 닷넷에서 쓰던 Rx보..

Scroll, 스크롤에 대한 것

비교적 간단한 2D게임은 한 화면에 들어가지만 복잡한 2D 게임은 한 화면 안에 모든 것을 보여주기 그럴 때가 있다. 스크롤에도 여러가지가 있는데 알아보자 **여기서 코드는 의사코드로 표현했다. 어차피 다 자기 플랫폼에 맞춰서 짜면 된다. -단일 축 스크롤 단일 축 스크롤 게임은 대표적으로 슈팅게임이 많이 있다. 횡스크롤, 종스크롤이 바로 그것을 말하는 것인데 1945나 텐가이 같은 게임이 종, 횡 스크롤 게임이다. 단일 축에 대해 구현하는 것은 그렇게 어렵지는 않다. 만약 모든 배경이미지를 한꺼번에 메모리로 로드할 수 있다면 간단한 알고리즘으로 구현이 가능하다. 제일 쉬운 방법이 화면 크기대로 배경을 나누는 것이다. 그래놓고 순서대로 Load하면 그만이다. //의사 코드에 가깝게 그냥 쓰면 const ..

게임의 시간과 현실의 시간의 차이에 대해서

이것은 정말 많은 차이가 있으면서도 비슷하다. 게임 루프와 관계가 정말 많이 되어있다. [Game Developer, 게임개발자] - 게임의 근간인 게임 루프, Game Loop에 대해서 게임의 시간은 어떻게 판단될까? 가 문제다. 우리는 FPS라는 것을 가지고 있고 30FPS의 게임이라면 우 리는 프레임 당 약 0.0333333s을 가지고 있는 것을 안다. 하지만 60 FPS에서는 프레임 당 0.0166666666s을 가지고 있다는 것도 안다. 즉, 프레임과 현실 시간과 무엇인가 관계가 되어있을 것 같다는 생각도 든다. 그리고 게임을 일시정지 시키면 real time으로 1분이 흘러도 게임 시간은 흐르지 않는다. 무엇인가 비슷하면서도 다른 느낌이 확연히 든다. 가장 게임 시간과 현실 시간의 차이를 잘 ..

728x90
반응형