//IncreaseScale : Object의 Scale을 (startScale ~ targetScale) 범위에 걸쳐 변화시킨다. //변화 속도는 speed로 지정하고, mode 매개변수로 Y축을 Scale 변화에 포함시킬지 여부를 결정한다. //destoryTime 지정시 해당 시간 이후 Destory한다. //Update를 사용하며, 다른 Update 사용 Method와 중복 사용할 시 어떻게 될 지 예측할 수 없음 public void IncreaseScale(float speed, float startScale, float targetScale, IncreaseScaleMode mode = IncreaseScaleMode.WithoutYAxis) { if (startScale < 0f || startScale == targetScale) { throw new System.ArgumentOutOfRangeException(nameof(startScale), $"Must be greater than or equal to 0, not equal to {nameof(targetScale)}."); } if (targetScale < 0f) { throw new System.ArgumentOutOfRangeException(nameof(targetScale), "Must be greater than or equal to 0."); } if (speed == 0f) { throw new System.ArgumentOutOfRangeException(nameof(speed), "Must not be equal to 0."); } if ((startScale < targetScale && speed < 0f) || (startScale > targetScale)) { throw new System.ArgumentOutOfRangeException(nameof(speed), $"{nameof(targetScale)} - {nameof(startScale)} and {nameof(speed)} must have the same sign."); } Vector3 scale = Vector3.one * startScale; if (mode == IncreaseScaleMode.WithoutYAxis) { scale.y = transform.localScale.y; } transform.localScale = scale; updateMethod = ScaleUp(speed, targetScale, mode); }
private Method ScaleUp(float speed, float targetScale, IncreaseScaleMode mode) { return(() => { Vector3 scale = Vector3.one * speed * Time.deltaTime; if (mode == IncreaseScaleMode.WithoutYAxis) { scale.y = 0; } transform.localScale += scale; if (transform.localScale.x >= targetScale) { scale = Vector3.one * targetScale; if (mode == IncreaseScaleMode.WithoutYAxis) { scale.y = transform.localScale.y; } transform.localScale = scale; updateMethod = null; } }); }
public void IncreaseScale(float speed, float startScale, float targetScale, float destroyTime, IncreaseScaleMode mode = IncreaseScaleMode.WithoutYAxis) { IncreaseScale(speed, startScale, targetScale, mode); SetTimer(destroyTime, TimerAction.Destory); }