일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- build
- 이펙티브 씨샵
- Android
- 서평
- 개발
- Unity
- Effective C#
- 독후감
- 유니티
- 일본음식
- 정렬
- C#
- HackerRank
- 독서
- 알고리즘
- 문제풀이
- javascript
- 책 정리
- 자유여행
- 이펙티브 C#
- 책리뷰
- 프로그래밍
- IOS
- 프로그래밍도서
- 알고리즘 문제풀이
- 해커랭크
- 해커랭크 문제풀이
- 코토리
- 방학여행
- 빌드
- Today
- Total
Console.Log
C# Extensions Method를 Unity에 활용하기 본문
C# Extensions Method
C# 3.0부터 추가된 기능입니다. 이 기능을 사용하게 되면 기존 형식을 확장, 수정하지 않고도 메소드를 추가할 수 있습니다. Microsoft .NET 문서 에선 일반 메서드를 호출하나 Extensions Method를 호출하나 명백한 차이가 없다고 서술하고 있습니다.
사용용도
사용방법
확장 메소드의 사용방법은 생각보다 간단합니다. String 클래스에 단어갯수를 확인하는 확장 메소드를 만들어보겠습니다.
1 2 3 4 5 6 7 8 9 10 11 | namespace ExtensionMethods { public static class MyExtensions { public static int WordCount(this String str) { return str.Split(new char[] { ' ', '.', '?' }, StringSplitOptions.RemoveEmptyEntries).Length; } } } | cs |
이렇게 static 클래스를 만들고 정의해주게 되면, string 객체를 사용하면서 추가로 WordCount라는 함수가 생기게 되고,
일반 string 내장 함수처럼 사용할 수 있게됩니다.
++ Extensions Method의 생성 조건
1. 클래스는 static으로 선언해줍니다. ( 자동으로 함수도 static )
2. 매개변수의 첫 번째는 this와 해당 메소드가 들어갈 타입을 적어줍니다.
기타 설명
더 자세한건 [Microsoft .NET 문서](https://docs.microsoft.com/ko-kr/dotnet/csharp/programming-guide/classes-and-structs/extension-methods#general-guidelines) 를 참고하길 바랍니다~
Unity + Extensions Method
이 기능을 유니티에 가져와 적용해본다면 기존에 불필요하게 했던 작업을 함수 하나로 보기 좋게 정리할 수 있게 됩니다!! ( WOW )
기존에 유니티 기능으로만 사용했을 때 불편한 작업이 있었습니다..
+ transform.position의 x값만 바꾸고 싶을 때
+ Sprite의 Color중 Alpha 값만 바꾸고 싶을 때
+ 배열에서 랜덤을 뽑고 싶을 때 ( 물론 이건 C#이지만..ㅋ )
등등 상황에 따라 더 있겠지만 저런 상황에 Extensions Method 기능을 사용하면 매우 편리합니다.
첫 번째 경우를 가지고 설명하자면 Unity의 Transform 클래스에 Extensions Method를 추가하면 좀 더 코드가 깔끔해지고 보기 편해집니다.
TransformExtensions.cs
1 2 3 4 5 6 7 8 9 10 | using UnityEngine; public static class TransformExtensions { public static void SetPositionX(this Transform transform, float x) { var newPosition = new Vector3(x, transform.position.y, transform.position.z); transform.position = newPosition; } } | cs |
Test.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | using UnityEngine; public class Test : MonoBehaviour { private void Start() { // 이전의 X값 변경 방법 transform.position = Vector3.zero; Debug.Log("[Basic] Prev: " + transform.position); transform.position = new Vector3(20, transform.position.y, transform.position.z); Debug.Log("[Basic] Curr: " + transform.position); // Extensions Method transform.position = Vector3.zero; Debug.Log("[Extensions] Prev: " + transform.position); transform.SetPositionX(20); Debug.Log("[Extensions] Curr: " + transform.position); } } | cs |
마무리
Extensions Method는 클래스의 수정이 불가능한 부분들에 의한 반복적인 일들을 줄여줄 수 있는 매우 좋은 기능 입니다.
유니티로 개발을 하면서 어쩔 수 없이 반복적이고 불필요한 코드들이 늘어난다면 이 기능을 이용해 리팩토링하는 것도 좋을 것 같습니다.
'프로그래밍 > Unity' 카테고리의 다른 글
[Xcode] Xcode 때문에 생기는 맥 용량 부족 해결 (0) | 2020.08.29 |
---|---|
[Unity] 유니티 안드로이드 Gradle 빌드 오류 상세보기 (3) | 2019.12.26 |
[Unity] 2D 게임개발하면서 여러가지 에셋을 써본 후기 (0) | 2017.07.21 |
[Unity] IronSource - 게임에 다양한 광고를 달아보자 (9) | 2017.04.15 |
[Unity] ugui에서 멀티터치를 막고싶을때 (0) | 2017.03.03 |