본문 바로가기

유니티 개발 정보/프로그래밍

Reactive Extenstion(Rx) - 2 언제 Rx를 사용해야하는가 Rx의 장점 전통적인 방법으로 데스크탑 혹은 웹 기반 프로그램을 작성할 때, 가끔씩은 비동기 프로그래밍을 해야하는 경우가 있다. 데스크탑 어플리케이션은 입출력 또는 다른 활동적인 쓰레드를 블럭시킬 수 있는 UI 쓰레드를 가지고 있다. 실버라이트는 그 어떤 블럭도 허용하지 않으며 오직 비동기 프로그래밍만 가능하다. 그러나 요즘의 비동기 프로그래밍 모델의 사용자들은 수동으로 예외와 이벤트들의 취소를 관리해야만 한다. 이벤트를 더하고 빼기 위해, 사용자는 해독하기 어렵고 유지보수하기 힘든 코드를 작성해야만 한다. 게다가, 어플리케이션이 여러 곳의 데이터들과 상호작용한다면, 전통적인 방법으로는 각 데이터 스트림마다 이벤트 핸들러를 구현해야한다. 예를 들어, 사용자가 문자를 입력하자마자.. 더보기
Reactive Exntenstion(Rx) - 1 Reactive Extensions(Rx)란 무엇인가? Reactive Extensions (이하 Rx)는 observable sequence와 LINQ형식의 쿼리문, 비동기 이벤트-기반 프로그래밍으로 구성된 라이브러리다.Data sequences는 파일, 웹 서비스, 웹 서비스 요청, 시스템 알림 또는 유저 입력같은 일련의 이벤트들 처럼 많은 형식을 취할 수 있다. Rx는 위에서 언급된 모든 데이터들을 observable sequence로 나타낼 수 있다.새로운 데이터가 도착할 때 비동기적으로 알림을 받기 위해, 어플리케이션들은 observable sequence들을 구독한다. Pulling vs. Pushing Data 인터랙티브 프로그래밍에서, 어플리케이션은 순서대로 나열된 데이터에서, 활발히 데이.. 더보기
Singleton VS Static Class 유니티에서 스크립트를 작성하다보면, 어디서든지 접근할 수 있는, 그리고 오직 하나의 인스턴스만 필요로 하는 Manager Class 혹은 Helper Class를 만들어야 하는 일이 발생할 것이다. 이 경우 보통 싱글톤 패턴이나, 정적 클래스로 많이 제작을 한다. 하지만 둘의 차이점을 제대로 인지 하지 못하고 사용하게되면 어떨땐 싱클톤으로 어떨땐 정적클래스로 만들어 코드의 일관성을 훼손 시킬 수 있다. 그래서 이번 글에서는 싱글톤과 정적클래스를 표로 간단히 비교해 보았다. 싱글톤 정적 클래스 인스턴스 생성 가능 인스턴스 생성 불가능 힙에 저장 스택에 저장 OOP(객체 지향 프로그래밍)규칙을 준수한다. OOP규칙을 준수하지 않는다. 상속 가능 상속 불가능 인터페이스 구현 가능 인터페이스 구현 불가능 느슨하.. 더보기
New Unity Messaging System 메시징 시스템 이번 유니티 4.6에서, 새로운 UI시스템은 기존의 SendMessage를 대체하기위해 메시징 시스템을 사용한다. 이 시스템은 순수하게 C#으로 만들어졌고, SendMessage를 사용하는데 있어 발생했던 문제들을 해결하는것을 목표로 하고 있다. 이 시스템은 메시징 시스템으로부터 콜백을 받을 수 있다는 것을 나타내기 위해, MonoBehaviour에 커스텀 인터페이스를 사용하여 작동한다. 명시된 타켓 오브젝트의 콜백함수가 호출될 때, 해당 호출에 대한 특정 인터페이스가 구현된 모든 컴포넌트에 호출된다. 메시징 시스템은 게임 오브젝트의 계층구조에서 얼마나 멀던간에 커스텀 유저 데이터를 전달한다.이는 반드시 특정 게임 오브젝트 또는 자식 그리고 부모에서 반드시 실행되어야 한다. 이뿐만 아니라,.. 더보기
유니티에서 정적(static) 변수 사용하기 원문 보기 유니티에서 정적(static) 변수 사용하기이 글은 유니티3D 엔진에서 스크립트를 작성할 때, 정적 변수를 사용하는 방법에 대해서 설명하는 글이다. 이 글에 나와있는 예제 스크립트는 C#으로 작성되었지만, 똑같은 가이드라인을 자바스크립트에서도 적용할 수 있다.이 주제에 대해서 본격적으로 이야기하기 전에, 인터넷에서 손쉽게 찾을 수 있는 "정적 변수는 무슨 수를 써서라도 피해야 한다"는 여러 이유에 대한 부분은 말하지 않을 것이다. 대부분의 경우에 있어서, 싱글톤 패턴을 사용하는 것이 더 낫다. 이 점을 염두해 두고, 여기 정적 변수에 대한 간단한 정의를 소개하겠다. 이들은 클래스에 속해 있는 변수이며, 클래스가 생성하는 객체에는 존재하지 않는다. 이것은 정적 변수가 특정 클래스의 객체에 상관없.. 더보기
유니티에서 Static IEnumerator 호출하기 원문보기 유니티에서 Static IEnumerator 호출하기 모든 프로그래머들이 작업을 하다보면, 장소에 구애받지 않고 원하는 곳에 자신이 필요한 함수를 호출하고 싶은 순간이 반드시 올 것이다. 이를 해결하기 위한 멋진 방법은 static 함수를 사용하는 것이다. 우리가 매일 사용하는 MonoBehaviour에서 볼 수 있는, Input.GetButton 또는 이와 유사한 모든 변종은 손쉽게 어디서나 사용할 수 있는 static 함수의 좋은 예라고 볼 수 있다. 당신이 만들어야 하는 인스턴스들 있고, 이 인스턴스들 중에서 몇몇 인스턴스는 IEnumerator타입이 될 수도 있을 것이다. 예를 들어, 플래쉬 라이트를 만드는 스크립트를 만들었고, 여러 다른 스크립트에서 플래쉬 라이트를 호출해야할 필요가 있.. 더보기
C#의 Virtual과 Abstract 속성(Property)에 대해서 원문 보기 C# Virtaul & Abstract 속성에 대해서 최근 C#입문자들에게 C#의 Virtual과 Abstract 속성에 관한 질문을 받았다. 이에 대해서 한번 자세하게 살펴 보자. Abstract와 Virtual 속성의 차이점 Abstract 속성은 Abstract 클래스를 만들도록 강요하지만, Virtual 속성은 이러한 제약이 없다. Virtaul은 하위 클래스가 오버라이드(Override)를 가능하게 해준다. Abstract 속성은 구현을 하위 클래스로 미룬다. Virtual 속성은 기본적인 구현이 가능하다. Virtaul 속성 Virtual 속성에 대해서 좀 더 자세하게 알아 보자. 쓰기 전용 속성(프로퍼티)을 만들기 위해서 옵션 1 : getter을 private속성으로 한다.ex).. 더보기
유니티에서 싱글톤을 만드는 4가지 방법 원문 보기 유니티에서 싱글톤을 만드는 4가지 방법여기 유니티에서 싱글톤(Singleton)을 사용하는 여러가지 방법이 있다. 1) 일반적인 방법, 2) "자체 포함" 방법, 3) 빠르지만 지저분한 방법, 4) C#을 사용하는 사람들을 위한, 접근자 방법 1. 일반적인 방법 일반적인 방법은, GameObject에 첨부된 클래스에 정적 "GetInstance()" 함수를 만드는 것이다. 그리고 instance변수에 대해서 확인을 한다. 만약 instance가 null이 아니면 instance값을 반환하고, null인 경우, 클래스(여기서는 MyClass)를 첨부한 게임오브젝트를 하나 추가해야된다는 경고 메시지를 출력한다.public class MyClass { private static MyClass ins.. 더보기
C# ""이 String.Empty보다 나은가? 원문은 이곳에서 보실수 있습니다.C# ""이 String.Empty보다 나은가?나는 최근에 ""이 String.Empty보다 나은지에 대한 논쟁의 글을 읽었다. 이 논쟁은, string.Empty는 모든 상황에서 작동하지 않기때문에, 이것을 사용해서는 안된다라는 것이다. 그는 컴파일러는 string.Empty를 사용한 코드를 최적화 시키지 못하기 때문에, 최적화의 부족으로 성능의 이득을 얻지 못지 못할 것이라고 주장하는데, 이는 반드시 string.Empty를 사용하지 않아도 된다라는 주장을 더 지지해준다. 그렇다면 이게 무슨 가치가 있는가? 첫번째, 그가 String.Empty가 발생하는 성능저하를 측정했다는 것이 인상적이다. 나는 그의 비교문안에서의 String.Empty사용에 대한 평가는 오직 St.. 더보기
간단한 Observer Pattern for Unity 4.2 원문은 이곳에서 보실수 있습니다. 유니티 4.2버전에 대한 Simple Observer Pattern 이 글에 대한 유니티 패키지는 여기서 다운로드 가능하다.만약 얼마동안 유니티로 개발을 했다면, 자신이 작성한 코드에서 다음과 같은 부분을 발견할 수 있을 것이다.GameObject.Find("BigBoss").GetComponent().AddHealth(-20F); 이와 같은 코드는 완전히 실용적임에도 불구하고, 나는 당신에게 이렇게 사용하지 말라고 제안할 것이다. 여기 그에 대한 몇가지 이유가 있다:만약 BigBoss의 BossManager 스크립트를 일반적인 EnemyManager 스크립트로 교체한다면, BossManager스크립트를 참조하는 모든 스크립트는 깨질 것이다.(심지어 EnemyManage.. 더보기