유니티에서 여러가지 연습을 하려고 생각하고 있었을 때, 나만의 tween을 만들어 보고싶다고 생각했다. DoTween을 사용할 때 여러 함수들이 transform, image 등에서 부터 바로 DoTween 함수를 사용할 수 있었던 것이 기억에 남았다.

예시

나도 이런식으로 바로바로 접근할 수 있으면 좋겠다고 생각을 해서 방법을 찾아보니, Extenstion Method를 이용하면 되는 것!

Extenstion Method가 뭐야? 🧐

  • 특수한 종류의 static 메서드.
  • 다른 클래스의 인스턴스 메서드인 것 처럼 사용되는 기능.
  • 클래스, 구조체, 인터페이스 등에 적용 가능.

왜 사용하는거야? 🧐

  • 인스턴스 메서드를 추가하려면 해당 클래스 안에 메서드를 추가해야한다.
  • 하지만 접근이 불가한 클래스라면 ???
  • Extenstion Method를 사용하자!

어떻게 사용해야해? 🧐

  • static class
  • static method
  • public
  • Extenstion Method는 첫번째 파라미터로 반드시 클래스명을 지정해야 함. public static void Function(this T parm)
  • 이 파라미터 앞에 반드시 this 키워드를 추가할 것!
  • 만약 Extenstion Method 사용 후 또 다른 확장 메소드를 쓰고 싶을 시 this로 들어왔던 첫 파라미터를 반환 해주면 된다.

🍑 예시: tween 만들기 프로젝트에 일부를 이용했다..ㅎㅎ

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
using System.Collections;
using UnityEngine;

namespace MyTween
{
    public static class Tween
    {
        public static Transform Move(this Transform tr, Vector3 to, float duration, AnimationCurve ease)
        {
            return tr;
        }

        public static Transform Scale(this Transform tr, Vector3 to, float duration, AnimationCurve ease)
        {
            return tr;
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using MyTween;

public class ButtonDirecting : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
    public AnimationCurve ease;
    public Vector2 toSize = Vector2.one;
    public float duration;
    private bool isTweening = false;
    private event Action onClick;

    private Vector2 fromSize;

    public void OnClick()
    {
        transform.Move(Vector3.one, 1f, ease).Scale(Vector3.one, 1f);
    }
}