728x90
반응형

Game Development, 게임개발/개발 98

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()를 사용하여 실행하고자 하는 "메서드에 대한 델..

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보..

Camera, 카메라에 대한 것들 [Unity]

카메라에 대해 한 번 모든 것들을 정리해보려고 노력 중이다. 알아보자 1. Perspective vs Isometric(Orthographic) **사실 뒤에 나오는 Projection Transform에서 다시 설명한다. 여기 gizmo가 있다. 바로 카메라를 보여주는 방식을 결정하는데 아래에 현 상태가 나와있다. 위 사진 상태는 Perspective 상태로 Toggle 기능을 가지고 있어서 한 번 누르면 다른 상태로 바뀐다. Isometric 상태로 바뀐다. ** Isometric is usful in combination with clicking one of the conical axis arms to get a front, top or side elevation. -> 2D라고 생각하면 gizmo..

게임 일시정지하기, 퍼즈, pause 만들기 [Unity]

간단하다. 하지만 응용은 무궁무진하다. 버튼을 눌러서 일시정지 상태를 조절할 수 있고 어떠한 조건에 걸리면 일시정지 후 어떤 행동을 할 수 있다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class Util : MonoBehaviour { bool isPause; //초기화 void Start () { IsPause = false; } void Update () { if (여기서 내가 원하는 조건이 들어갈 수 있다.) { //퍼즈 if (IsPause == false) { Time.timeScale = 0; IsPause = true; return; } // 퍼즈 풀기 if (IsPause =..

2진법 규칙에 맞춰서 출력하기 - C#

내가 돌려서 풀었을지도.. 다른 풀이가 있을 것 같긴하더라. 그래도 나랑 시간복잡도 차이는 크지 않을 것 같아 생략. https://www.codingame.com/ide/puzzle/chuck-norris 위의 규칙을 바탕으로 구현한다. #풀이 using System; using System.Linq; using System.IO; using System.Text; using System.Collections; using System.Collections.Generic; /** * Auto-generated code below aims at helping you parse * the standard input according to the problem statement. **/ class Soluti..

주어진 글자 디스플레이에 출력하기 - Unity

뭐 C#이다만 Unity에서도 응용가능하니까.. 솔직히 처음에 쉽다고 생각했지만 조금 시간이 걸렸고 정규표현식으로 더 완벽하게 하려고 시간 더 걸렸다. https://www.codingame.com/ide/puzzle/ascii-art 또한 '?' 가 Z 다음 아스키코드 문자가 아니기 때문에 예외처리를 해줬어야 했다. 이런 거지같은 ㅋㅋㅋㅋㅋ 아스키코드 값을 뭘로 주든 순서대로 준다면 모든 문자를 디스플레이에 표시할 수 있는 코드다. 물론 정규표현식이나 ToUpper() 같은 것은 조금 수정해야겠지만 아무튼 그렇다.

728x90
반응형