// Unity의 C# 6.0지원으로 가능해진 기능을 빠르게 살펴보기 // Edit > Project Settings > Player > Scripting Runtime Version을 .Net 4.6으로 변경해야함 using System; using System.Threading; using System.Threading.Tasks; using System.Collections; using System.Collections.Generic; using UnityEngine; using static System.Math; //< using static 지지자로 특정 클래스의 정적 멤버를 접근자 없이 바로 사용 가능 public class Test : MonoBehaviour { // 자동 속성의 초기화 처리 public string Key { get; set; } = Guid.NewGuid().ToString("N"); // set을 지정하지 않으면, 생성자를 제외한 모든곳에서 값 수정이 불가능한 readonly속성을 가진다. public string OnlyGetter { get; } = "Get"; void Start() { // 가독성 좋은 문자열 보간 기능 지원 var age = 10; Debug.Log($"age is {age}, pi is {Math.PI}"); // 로그찍을떄 편리한 nameof 연산자 지원 Debug.Log($"var name : {nameof(age)}"); // 코드를 심플하고 안전하게, null 조건부 연산자 (Objective-C느낌) string str1 = null; string str2 = str1?.Trim()?.Substring(3); Debug.Log("str2 : " + (null == str2 ? "null" : str2)); // System.Math클래스의 Pow Static함수를 바로 접근(using static 효과) Debug.Log($"call pow : {Pow(10, 2)}"); // 예외 필터처리(when 지시자) try { throw new ArgumentException("Invalid x argument"); } catch (ArgumentException ex) when (ex.Message == "Invalid x argument") { Debug.Log("do filters exceptions!"); } // 보기 좋은 새로운 방식의 컬렉션 객체 초기화 방법, var dic = new Dictionary<string, string> { ["Name"] = "Noh Hwigyeom", ["Country"] = "Republic of Korea", ["City"] = "Seoul", ["Gender"] = "Male" }; // async와 awake의 사용 DoTask(); } async Task DoTask() { Debug.Log($"start DoTask, main thread id : {Thread.CurrentThread.ManagedThreadId}"); await Task.Delay(1); // 쓰레드에서 동작 var workTask = Task<int>.Run(() => { Debug.Log($"workTask thread id : {Thread.CurrentThread.ManagedThreadId}"); Task.Delay(1); return 999; }); Debug.Log("finish workTask, return value : " + await workTask); // 순차적인 쓰레드 처리(string으로 리턴값 순차적으로 전달) var workTask2 = Task<string>.Factory.StartNew(() => { Debug.Log($"StartNew thread id : {Thread.CurrentThread.ManagedThreadId}"); return "red"; }) .ContinueWith(prevTask => { Debug.Log($"ContinueWith, prevTask.Result : {prevTask.Result}"); return "blue"; }) .ContinueWith(prevTask => { Debug.Log($"ContinueWith, prevTask.Result : {prevTask.Result}"); return "white"; }); workTask2.Wait(); Debug.Log("finish workTask, return value : " + workTask2.Result); } // 간단한 로직의 함수는 람다식을 이용해서 심플하게 구현 public void DLog(string str) => Debug.Log(str); }
2017년 12월 1일 금요일
Unity의 C# 6.0지원으로 가능해진 기능을 빠르게 살펴보기
// Unity의 C# 6.0지원으로 가능해진 기능을 빠르게 살펴보기 // Edit > Project Settings > Player > Scripting Runtime Version을 .Net 4.6으로 변경해야함 using System; using System.Threading; using System.Threading.Tasks; using System.Collections; using System.Collections.Generic; using UnityEngine; using static System.Math; //< using static 지지자로 특정 클래스의 정적 멤버를 접근자 없이 바로 사용 가능 public class Test : MonoBehaviour { // 자동 속성의 초기화 처리 public string Key { get; set; } = Guid.NewGuid().ToString("N"); // set을 지정하지 않으면, 생성자를 제외한 모든곳에서 값 수정이 불가능한 readonly속성을 가진다. public string OnlyGetter { get; } = "Get"; void Start() { // 가독성 좋은 문자열 보간 기능 지원 var age = 10; Debug.Log($"age is {age}, pi is {Math.PI}"); // 로그찍을떄 편리한 nameof 연산자 지원 Debug.Log($"var name : {nameof(age)}"); // 코드를 심플하고 안전하게, null 조건부 연산자 (Objective-C느낌) string str1 = null; string str2 = str1?.Trim()?.Substring(3); Debug.Log("str2 : " + (null == str2 ? "null" : str2)); // System.Math클래스의 Pow Static함수를 바로 접근(using static 효과) Debug.Log($"call pow : {Pow(10, 2)}"); // 예외 필터처리(when 지시자) try { throw new ArgumentException("Invalid x argument"); } catch (ArgumentException ex) when (ex.Message == "Invalid x argument") { Debug.Log("do filters exceptions!"); } // 보기 좋은 새로운 방식의 컬렉션 객체 초기화 방법, var dic = new Dictionary<string, string> { ["Name"] = "Noh Hwigyeom", ["Country"] = "Republic of Korea", ["City"] = "Seoul", ["Gender"] = "Male" }; // async와 awake의 사용 DoTask(); } async Task DoTask() { Debug.Log($"start DoTask, main thread id : {Thread.CurrentThread.ManagedThreadId}"); await Task.Delay(1); // 쓰레드에서 동작 var workTask = Task<int>.Run(() => { Debug.Log($"workTask thread id : {Thread.CurrentThread.ManagedThreadId}"); Task.Delay(1); return 999; }); Debug.Log("finish workTask, return value : " + await workTask); // 순차적인 쓰레드 처리(string으로 리턴값 순차적으로 전달) var workTask2 = Task<string>.Factory.StartNew(() => { Debug.Log($"StartNew thread id : {Thread.CurrentThread.ManagedThreadId}"); return "red"; }) .ContinueWith(prevTask => { Debug.Log($"ContinueWith, prevTask.Result : {prevTask.Result}"); return "blue"; }) .ContinueWith(prevTask => { Debug.Log($"ContinueWith, prevTask.Result : {prevTask.Result}"); return "white"; }); workTask2.Wait(); Debug.Log("finish workTask, return value : " + workTask2.Result); } // 간단한 로직의 함수는 람다식을 이용해서 심플하게 구현 public void DLog(string str) => Debug.Log(str); }
피드 구독하기:
댓글 (Atom)
-
대상이 되는 이미지를 SVG(Scalable Vector Graphics) 이미지로 변환 - 각종 툴이나 웹상에서 바로 바꿔주는 다양한 방법이 있음(검색 검색~) - 찾은거 하나 : http://image.online-convert.com/c...
-
MQTT mosquitto 서버 설치와 간이 테스트 https://mosquitto.org 모스키토 설치 brew install mosquitto 모스키토 서비스 실행 brew services start mosquitto 모스키...
-
Unity3d에서 Rust 라이브러리를 생성하여 rust함수를 호출해 보기 Rust를 사용하여 라이브러리를 생성/빌드 한 뒤 유니티에서 Plugin으로 dll import하여 함수 사용 -- Rust -- 숫자 2개를 더해 리턴하는 간단한 ...
댓글 없음:
댓글 쓰기