EveryDay.DevUp

[Unity] Tween 비교 ( ITween, DoTween, Animation, MonoBehaviour ) 본문

Unity

[Unity] Tween 비교 ( ITween, DoTween, Animation, MonoBehaviour )

EveryDay.DevUp 2020. 5. 11. 21:00

 

 

Unity의 GameObject를 이동 시키거나, 돌리거나, 알파 값을 변경 한다거나 등의 움직임을 Unity에서 할 때에 여러가지 방법이 있다. Tween은 그런 움직임들을 코드로 처리할 수 있도록 모듈화 한 것이라고 볼 수 있다. ( Tween : 유사한 움직임을 위해 매번 유사한 코드를 작성하는 것은 매우 번거로운 일이기 때문에 유사한 움직임들을 함수화하여 쉽게 Unity에서 동작할 수 있도록 한다. )

Unity에서 GameObject를 A -> B로 옮기는 방법은 4가지가 있는데 각 방법을 비교하면서 어떤 방식이 좋을지에 대해 확인하고자 한다.

● 120 * 120 개의 이미지 14400개를 움직일 때의 FPS를 체크

 

 

1. MonoBehaviour

: Update를 통해 Transform의 위치를 변경

 

MoveIcon 컴포넌트 추가

 

 

public class MoveIcon : MonoBehaviour
{
  Vector3 pos;
  float speed = 5;

  void Start()
  {
  	pos = transform.localPosition;
  }

  void Update()
  {
  	pos.x += speed * Time.deltaTime;
  	transform.localPosition = pos;
  }
}

 

33.9 fps

 

2. Animation 컴포넌트를 이용한 움직임

 

x축으로 -300 -> 0 으로 움직이는 애니매이션
애니매이션 컴포넌트 추가
17.1fps

 

3. ITween을 이용한 움직임

: ITween은 어셋스토어를 통해 무료로 다운로드 가능

private void Start()
{
	GameObject obj;
	Vector3 pos = iconObj.transform.localPosition;
	Vector3 initPos = pos;
	initPos.z = 0;
	for( int i = 0; i < height; i++ )
	{
		for( int j = 0; j < width; j++ )
		{
			obj = GameObject.Instantiate( iconObj );
			obj.transform.SetParent( trans );
			obj.transform.localPosition = Vector3.zero;
			iTween.MoveBy( obj, iTween.Hash( "x", 50 , "LoopType", iTween.LoopType.pingPong) );
			pos.x = initPos.x + ( j * 100 );
			pos.y = initPos.y + ( i * -100 );
			pos.z = initPos.z;
			obj.transform.localPosition = pos;
		}
	}
}

 

12.3 fps

 

4. DoTween을 이용한 움직임

: DoTween은 어셋스토어를 통해 무료로 다운로드 가능, Pro 버전은 Inspector 창에서 수정이 가능한 컴포넌트가 추가된 것

private void Start()
{
	GameObject obj;
	Vector3 pos = iconObj.transform.localPosition;
	Vector3 initPos = pos;
	initPos.z = 0;
	for( int i = 0; i < height; i++ )
	{
		for( int j = 0; j < width; j++ )
		{
			obj = GameObject.Instantiate( iconObj );
			obj.transform.SetParent( trans );
			obj.transform.localPosition = Vector3.zero;

			obj.transform.DOMoveX( 500, 15 );
			pos.x = initPos.x + ( j * 100 );
			pos.y = initPos.y + ( i * -100 );
			pos.z = initPos.z;
			obj.transform.localPosition = pos;
		}
	}
}

 

38.2 fps

 

● 정리

DoTween의 퍼포먼스가 좋은 것을 알 수 있는데, ITween의 Tween시 각 오브젝트에 ITween 컴포넌트가 붙어서 Update를 호출하는 반면 DoTween은 컴포넌트 대신, 내부적으로 여러가지 최적화 방법을 통해서 움직임을 구현

DoTween을 이용하여 애니매이션을 하는 것이 더 좋을 것으로 생각 됨