확장 메서드(ShakeCamera)

윤재학·2022년 6월 16일
post-thumbnail

확장 메서드란 구조체나 클래스에 기능(함수)을 확장 시켜 사용하는 것
public static 리턴타입 함수명(this 확장할 데이터타입 변수명 , 매개변수들...)

나는 개발시 자주 쓰이는 카메라의 흔들림 효과를 주는 확장메서드를 만들어 보았다.

public static IEnumerator ShakeCamera(this Camera shakecamera , float shakeTime, float shakeIntensity) 
    {
        Vector3 offset;
        for(float time = 0 ; time < shakeTime; time += Time.deltaTime)
        {
            offset = Random.insideUnitSphere * shakeIntensity;           

            shakecamera.transform.position += offset;
            yield return null;
            shakecamera.transform.position -= offset;
        }      
    }

카메라의 흔들림은 몇초간 지속 되었다 꺼져야 해서 리턴타입을 코루틴으로 사용했다. 그리고 확장할 데이터타입은 Camera로 사용을 했다.
이제 매개변수 두개를 받는데 흔들릴시간과 , 흔들림의 강도가 필요했다.
: shakeTime, shakeIntensity

Vector3 offset으로 백터를 생성해주고
for 문은 shakeTime 만큼 돌수있게 한다.

이제 offset의 값에 Random.insideUnitSphere * 흔들림강도 를 넣어준다. 여기서 insideUnitSphere는 구형태의 반경 안에서 랜덤 위치를 지정해주는데 흔들림의 강도만큼 구형태에서 랜덤값이 정해진다.
지정한 데이터타입 camera의 포지션에 offset을 더해주고 다시 빼주는 형태를 반복한다.

public class Test : MonoBehaviour
{
    public float shakeTime;
    public float shakeIntensity;
    void Update()
    {
        if(Input.GetMouseButtonDown(0))
        {
            StartCoroutine(Camera.main.ShakeCamera(shakeTime, shakeIntensity));
        }
    }
}

이제 다른 스크립트에서 두가지의 변수만 선언해주면 사용이 가능해진다.

shakeTime : 흔들릴 시간
shakeIntensity : 흔들림의 강도

두개의 float 값을 받아서 마우스를 입력시 사용가능 하게
코루틴을 호출후 Camera.main 에서 . 을 찍게 되면
만들어둔 확장메서드인 ShakeCamera를 사용할수 있게 된다.

StartCoroutine(Camera.main.ShakeCamera(shakeTime, shakeIntensity));

profile
노력하자 즐겁게 개발할수 있는 환경을 위해

0개의 댓글