패턴 경고 이펙트 만들기(Mathf.Clamp)

2021. 10. 2. 01:37게임 엔진/유니티

보스 잡는 게임의 경우 해당 위치에 패턴이 생긴다는 알림을 유저에게 보여준다. 여러 방법들이 있겠지만 그 중 하나인 원이 점점 차오르다 다 채워질경우 패턴이 나오는 기능을 만들려고 한다. 이 기능에서 핵심적인 요소는

 

1. 차오르는 원의 범위가 제한되어 있어야 한다.

2. 차오르는 속도는 패턴의 시전시간에 비례한다.

 

첫번 째의 말은 즉 최소값과 최대값이 있고, 최대값을 넘어가지 않도록 해야하는데 UnityEngine에서는 이 기능을 만드는 함수가 있다.

Mathf.Clamp(float value,float min,float max)

Mathf Clamp를 이용하면 min/max 이외의 값들은 사용되지 않도록 된다.

 

void Update()
        {
            float x = Mathf.Clamp(warningObject.transform.localScale.x, 0, warningRange);
            float y = Mathf.Clamp(warningObject.transform.localScale.y, 0, warningRange);
            warningObject.transform.localScale = new Vector3(x + Time.deltaTime, y + Time.deltaTime, 1);
        }

이렇게 코드를 구현한다면 warningRange만큼의 범위까지만 차오르고 더이상 차오르지 않는다.

1번의 경우는 이렇게 해결 되었고, 2번의 문제를 해결 해야 하는데 Time.deltaTime에 추가로 계산식이 들어가야 속도 값을 변화를 줄 수 있다. 현재는 Time.deltaTime만큼만 증가되기 때문에 초당 1씩 증가하게 된다. 

void Update()
        {
            float x = Mathf.Clamp(warningObject.transform.localScale.x, 0, warningRange);
            float y = Mathf.Clamp(warningObject.transform.localScale.y, 0, warningRange);
            warningObject.transform.localScale = new Vector3(x + Time.deltaTime*(warningRange/castTime), y + Time.deltaTime*(warningRange/castTime), 1);
        }

기존 속도에 최대 범위를 곱해주면 1초에 최대 범위 만큼 증가한다.  시전 속도를 나누어 주면 시전 속도가 1이면 결과는 같을 것이고, 2를 나눠주면 2초에 걸쳐서 최대 범위 만큼 증가하고, 0.5로 나누어주면 0.5초에 걸쳐서 증가한다.