본문 바로가기
반응형

C#10

유니티 C# - 비교 함수를 이용하여 리스트 정렬하기 (List Sorting with Compare) Unity 전체 링크 먼저 List를 출력하는 함수를 만들자. void printList(List list) { string text = string.Empty; foreach (T l in list) text += l.ToString() + ", "; Debug.Log(text); } 기본적으로 int 타입의 List에서 Sort()를 실행하면 오름차순 정렬이 된다. List listInt = new List(); listInt.Add(5); listInt.Add(7); listInt.Add(3); listInt.Add(7); listInt.Add(-2); listInt.Add(-4); listInt.Sort(); printList(listInt); 실행결과는 아래와 같다. 하지만 만약에 벡터를 정렬한.. 2022. 11. 22.
유니티 C# - 튜플로 여러 값 반환하기 (Returning Multiple Values Using Tuple) Unity 전체 링크 참고 - C++ 튜플로 여러 값 반환하기 여러 개의 값을 리턴 받고 싶은 경우가 있다. 배열을 이용하면 아래와 같이 사용할 수 있다. public int[] returnArray() { int[] array = new int[3]; array[0] = 0; array[1] = 1; array[2] = 2; return array; } void Start() { int[] arr = returnArray(); foreach (int a in arr) Debug.Log(a); // 0 1 2 } 하지만 전혀 다른 타입의 여러 변수를 return 받고 싶은 경우는 배열을 사용할 수 없다. ref나 out을 쓰면 함수가 길어져 보기 싫어진다. 구조체를 선언해서 리턴하는 방법도 있지만, 다른.. 2022. 10. 7.
유니티 C# - 하위 폴더의 모든 파일 통합하기 (Recursive Folder Merger) Unity 전체 링크 Window Visual Studio에서 폴더의 모든 파일 통합하기는 C, C++을 이용하여 하위 파일을 통합하였다. 여기서는 유니티 C#을 활용하여 만들어보자. C, C++에서 사용된 함수는 C#에서는 아래와 같이 사용된다. isDirectory - 폴더 / 파일 체크 함수 → C# 불필요 getAllFilePath - 해당 경로를 모두 읽어오는 함수 → C# Directory.GetFiles() / GetDirectories() 제공 deleteDirectoryFiles - 폴더, 파일 삭제 함수 → FileInfo.Delete() 제공 deleteAllDirectoryFiles - 모든 폴더, 파일 삭제 함수 fileCopy - 파일 복사 함수 → File.Copy() 제공 n.. 2022. 8. 25.
유니티 C# - 문자열 합치기 Unity 전체 링크 string name과 job을 합쳐서 introduce 하는 문자열을 만들어보자. 아래의 introduce1 ~ 7은 모두 같은 결과가 나온다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class StringTest : MonoBehaviour { void Start() { string name = "bloodstrawberry"; string job = "unemployed"; string introduce1 = "My Name is " + name + " and job is " + job; string introduce2 = $"My Name is {name} and.. 2022. 8. 1.
유니티 C# - Switch Expression (스위치 표현식) Unity 전체 링크 방향을 Enum으로 0, 1, 2, 3, 4, 5로 아래와 같이 정의하자. enum DIRECTION { FORWARD, BACK, RIGHT, LEFT, UP, DOWN, } 이렇게 하면 for 루프로 순회가 가능하다. for (DIRECTION i = DIRECTION.FORWARD; i < DIRECTION.DOWN; i++) //Do Something 그런데 방향에 대한 실제 Vector가 필요하다고 가정하자. (FORWARD라면 Vector.forward) 그러면 아래의 함수가 필요하다. Vector3 getDirection(DIRECTION dir) { if (dir == DIRECTION.FORWARD) return Vector3.forward; if (dir == DI.. 2022. 7. 8.
유니티 C# - 확장 메서드 (Extension Method) / static method 의 this parameter Unity 전체 링크 C#에는 확장 메서드(Extension Method) 기능을 지원한다. 미리 정의된 형식에 사용자 정의 함수를 추가할 수 있다. MyMath.cs를 만들고 아래와 같이 작성한다. 이때 static class인 MyMath의 static 메서드에서 parameter에 this가 있는 MySquared가 확장 메서드가 된다. using System; public static class MyMath { /* 확장 메서드 */ public static int MySquared(this int value) { return value * value; } /* 정적 메서드 */ public static float MySafeDivide(float value, float divider) { if .. 2022. 5. 30.
프로퍼티로 readonly 변수 만들기 (get; private set;) Unity 전체 링크 프로퍼티로 외부에서는 접근 불가능한 readonly 변수를 만들어보자. 이 변수는 다른 스크립트에서 읽을 수는 있지만 변경할 수는 없다. 빈 오브젝트를 만들고 TestScript1.cs와 TestScript2.cs를 추가한다. TestScript1.cs 는 아래와 같다. using System.Collections; using System.Collections.Generic; using UnityEngine; public class TestScript1 : MonoBehaviour { public int readOnlyInteger { get; set; } static TestScript1 instance = null; public static TestScript1 Instance .. 2022. 5. 17.
유니티 C# Dictionary와 delegate를 이용한 함수 포인터 Unity 전체 링크 C, C++에서의 함수 포인터를 C#에서는 delegate를 이용한다. 심플 이벤트 핸들러에서 event 변경에 따라 함수를 실행하고 싶다고 하자. 함수 포인터를 사용하지 않는다면 CURRENT_EVENT를 if/else로 매번 처리해서 이벤트를 실행해야 한다. string currentEvent { set { if (CURRENT_EVENT == value) return; CURRENT_EVENT = value; if (CURRENT_EVENT == "이벤트 시작") startEvent(); else if (CURRENT_EVENT == "이벤트 종료") endEvent(); /* ... */ } get { return CURRENT_EVENT; } } Dictionary와 del.. 2022. 3. 18.
유니티 - 변수 변경시 이벤트 발생 (Simple Event Handler) Unity 전체 링크 참고 - 퍼블릭 변수 변경시 이벤트 발생 (Public Value Event Handler) C#의 프로퍼티를 이용하면 변수가 변경될 때, 이벤트를 발생할 수 있다. property는 C#에서 제공하는 간단한 get, set 메서드이다. currentEvent의 변경이 감지된다면 (currentEvent != value) CURRENT_EVENT의 값을 변경하고 원하는 함수를 실행하면 된다. string CURRENT_EVENT = ""; string currentEvent { set { if (CURRENT_EVENT == value) return; CURRENT_EVENT = value; Debug.Log(CURRENT_EVENT); } get { return CURRENT_EV.. 2022. 3. 18.
반응형