분류 전체보기 102

Python으로 알고리즘 공부 01. 병합정렬 (Merge Sort)

병합정렬 (Merge Sort) 파이썬으로 구현병합정렬은 분할정복 알고리즘의 가장 좋은 예이다.정렬할 리스트를 반으로 나누어 두 부분을 따로 정렬하여 다시 조합하는 과정이다.시간복잡도는 O(n*log n) def merge_sorted(arr): if len(arr)>1: mid = len(arr)//2 left = arr[:mid] right = arr[mid:] ​ l = merge_sorted(left) r = merge_sorted(right) return merge(l, r) else: return arr def merge(left, right): i = 0 j = 0 arr = [] while (i

아카이빙 2017.07.02

[C#] 유니티에서 foreach 성능은 개선되었을까

예전에 잠깐 이슈가 되었던 유니티에서 foreach 성능문제를 다뤄보려고한다. 나도 그냥 foreach는 안좋구나 정도로만 알고 있었는데 이번 NDC 2017에서 오지현 에반젤리스트님의 강연에서 잠깐 지나가는 말로 유니티 5.2~3버전 쯤에서 foreach 성능이 개선되었다는 얘기를 들었다. 나는 foreach문이 코드가 훨씬 간결해서 선호하는 편인데, 성능 개선이 되었다니..! 이제 맘놓고 써도 되는걸까하는 기대를 가지고 한번 테스트를 해보기로 마음먹었다. 테스트는 GeekCoders님의 블로그 글을 참고하여 진행했다.​[Unity] 유니티 프로그래머가 알아야 할 최적화 스크립트 코드 작성법GeekCoder님은 유니티 4.6.1 기준으로 테스트했고, 그 결과 For문이 2.2배이상 빠른 것으로 나타났고..

아카이빙/C# 2017.05.06

[C#] FieldInfo와 PropertyInfo

[C#] FieldInfo, PropertyInfo제네릭 타입의 클래스의 필드 혹은 프로퍼티에 접근해야할 때가 있다.그러나 타입을 정확히 모르기 때문에 직접 접근할 수는 없는데 이를 해결하는 것이 FieldInfo와 PropertyInfo이다.재사용성이 높은 코드를 작성하기에 유용하며, 본 포스팅의 예제 외에도 다양한 용도로 활용될 수 있을 것 같다.다른 설명 필요없이 코드로 직접 확인하는 게 가장 이해하기 쉽다. GetFieldspublic void GetFields(T obj){ System.Reflection.FieldInfo[] fields = typeof(T).GetFields(); ​ foreach(var field in fields){ Debug.Log (string.Format ("{0}...

아카이빙/C# 2017.05.06

[Unity3D] JsonUtility 사용법 익히기

Unity3D - JsonUtility 사용법 익히기유니티 5.3버전부터 JSON 포맷의 데이터를 파싱할 수 있는 API가 추가되었다. 플러그인을 추가하지않고, 내장된 API로만 구현을 하는 게 좋겠다싶어 조금 알아봤지만 만족스럽진 않았다.일단 예제를 만들어서 테스트해보자. 준비1Serialize할 수 있는 간단한 데이터 포맷 클래스를 만든다.[Serializable] public class PlayerInfo { public string name; public int lives; public float strength; } 준비2JsonHelper 클래스를 따로 만들어준다. JsonUtility의 가장 큰 단점이 배열을 받을 수 없다는 것인데 다음과 같이 JsonObject를 감싸는(JsonObject..

[Unity3D] Singleton 클래스 구현

Unity3D에서 Singleton 클래스 구현게임개발에서 활용되는 디자인 패턴중 가장 흔하게 볼 수 있는 게 Singleton 패턴이다. Singleton 클래스란 단 하나의 인스턴스만이 존재해야하는 클래스라고 정의할 수 있으며, 게임개발에서는 흔히 Manager클래스들을 구현할 때 활용된다. 구글링하면 프로그래밍 언어별로 Singleton 클래스 정의하는 법은 쉽게 찾아볼 수 있다. C#을 주 언어로 활용하는 Unity3D에서는 C#으로 구현된 Singleton클래스를 구현하면 되는데 조금 독특한 점이 있다. 컴포넌트 기반의 개발방법론을 채택한 Unity3D는 모든 GameObject가 MonoBehaviour 클래스를 상속한다. 단 하나의 오브젝트만을 생성해야하는 클래스를 구현해야 하는데, 이때는 ..

[C#] Activator.CreateInstance와 new 차이

Activator.CreateInstance와 new 차이C#에서 Singleton 패턴을 구현할 때 Generic type을 받아 구현하려면 System.Activator.CreateInstance 메소드를 사용하게된다. //example instance = System.Activator.CreateInstance (typeof(T)) as T;여기서 CreateInstance()와 new T()의 차이가 궁금해졌다.CreateInstance()는 Singleton 예제를 찾다가 발견했는데 이게 뭔지도 모르고 쓰기엔 찝찝함이 느껴진다.완벽히 이해했는지는 자신없지만 Microsoft Documentation과 Stackoverflow를 계속 찾아보면서 어느정도 결론을 내렸다. CreateInstance(..

아카이빙/C# 2017.04.15

[Unity3D] 커스텀 에디터 - 반복문으로 오브젝트 생성 쉽게하기

유니티 커스텀 에디터 - 반복문으로 오브젝트 생성 쉽게하기이제 에디터를 커스터마이징하기 위한 매우 기본적인 내용들은 하나씩 다뤄본 것 같다. 새로운 건 앞으로 진행하면서 발견할때마다 공부해보기로 하고 그동안 배운걸 응용해서 간단한 예제 하나를 만들어보자.커스텀 에디터의 가장 큰 장점 중 하나가 오브젝트 생성의 자동화이다.에디터를 익히지 못했을 때는 그리드(Grid)식 오브젝트 배치를 하기위해서는 일일이 하나씩 좌표를 정해주고 생성하거나, 그냥 에디터에서 확인하는 걸 포기하고 게임이 실행되었을 때 동적으로 생성하는 방법으로 진행했었다. (ㅠㅠ 무식하면 몸이 고생이라더니...)이제 에디터 버튼과 반복문으로 쉽게 생성할 수 있다. 준비다음 스크립트를 실행하기 위해서는 Resources 폴더에 "Square" ..

[Unity3D] 커스텀 에디터(5) - EditorStyles

유니티 커스텀 에디터(5) - EditorStylesEditorStyles를 알아보려고한다. 여러 옵션들이 많았는데 주로 Label이나 Font에 대한 옵션들이다.toolbarButton, toolbarDropDown, toolbarPopup, toolbarTextField의 쓰임새는 아직 잘 모르겠으나 관련 예제를 찾을 수 없었고, 구글링해도 안나오는 걸 보니 그닥 쓰임새가 유용한 것 같지는 않다.가볍게 이런게 있다 정도로만 알고 넘어가는 게 좋은듯. 예제using UnityEngine; using UnityEditor; ​ public class EditorStyleWindow : EditorWindow { ​ [MenuItem("Window/Editor Styles")] static void Ini..

[Unity3D] 커스텀 에디터(4) - GUILayout

유니티 커스텀 에디터(4) - GUILayout원래는 EditorWindow에 이어서 EditorStyles를 다루려 했었지만, 직접 예제를 다뤄보니 EditorStyles보다는 GUILayout을 먼저 익히고 넘어가는 게 좋을 것 같아 급 변경함.본 포스팅에서는 EditorWindow에서 GUILayout를 활용하는 예제를 소개하려 한다. 예제는 Unity - Scripting API를 참조해서 작성했으며, 자주 쓰일 것 같은 레이아웃을 다룬다. 예제using UnityEngine; using UnityEditor; ​ public class GUILayoutWindow : EditorWindow { ​ //포스팅을 위해 편의상 줄바꿈. string myString = "La La Land is a 2..

[Unity3D] 커스텀 에디터(3) - EditorWindow

유니티 커스텀 에디터 공부 세번째 - EditorWindow에디터 윈도우는 인스펙터 창이아닌 Sprite Editor나 Animation처럼 새로운 윈도우를 띄울 수 있는 기능이다. 컴포넌트를 넣지 않아도 사용할 수 있기 떄문에 인스펙터 창을 커스터마이징 하는 것 보다 범용성이 높다고 볼 수 있다. 맵 툴, 혹은 데이터 관리 에디터를 만들 때 유용해보인다. 참고로 유니티 커스텀 에디터 포스팅 예제는 대부분 Unity Scripting API를 참조하였다. 1. EditorWindow 예제using UnityEngine; using UnityEditor; public class MyWindow : EditorWindow { string myString = "Hello World"; bool groupEna..