물에 살고싶은 개발자

NGUI Tween이 정상작동 하지 않는 경우 본문

Unity3D

NGUI Tween이 정상작동 하지 않는 경우

돼지사랑 2015. 12. 16. 19:28

문득 익숙한 NGUI Tween을 사용하다가 삽질을 시작하게 되었다.

왜 그런건지 이유를 아직 못찾았는데, 왜인지는 몰라도 Tween이 적용되지않고

마치 Transform을 직접 변경한 것 처럼 이동하더라..젠장

일단 해결책은 찾아서 수정하긴 했지만, 원인분석은 명확하지 않다 ..-_-;;


일단 문제의 코드다.

public void SideMenuOpen( GameObject obj )
{	
	MenuTween.ResetToBeginning();
	MenuTween.duration = PosDuration;
	MenuTween.from = new Vector3( 0 , 0 , 0 );
	MenuTween.to = new Vector3( PosToX , 0 , 0 );
	
	ArrowTween.ResetToBeginning();
	ArrowTween.duration = RotDuration;
	ArrowTween.from = new Vector3( 0 , 0 , 0 );
	ArrowTween.to = new Vector3( 0 , 0 , RotToZ );
	
	if(isOpen)
	{
		MenuTween.PlayReverse();
		ArrowTween.PlayReverse();
	}
	else
	{
		MenuTween.PlayForward();
		ArrowTween.PlayForward();
	}
	
	isOpen = !isOpen;
}

Tween을 사용할때마다 항상 스트레스받는점이 코드중복(엄밀히 따지자면 아니지만;)이었고

같은 문장이 반복되는게 꼴보기싫어 최대한 줄이고자 이렇게 했다.

이렇게 코딩하면 두가지 트윈을 네줄씩 종합 8줄을 바꿔줄 필요없이 4줄로 줄어든다.

아주 작은 차이지만 내 나름대로 만족할만한 코드였는데.....ㅂㄷㅂㄷ


아무튼 이 경우에 문제점이 생긴다.

최초에 한번 실행될때만 트윈이 적용되고 그 다음부턴 그런거 없다.

단 한프레임에 이동되고 트윈은 작동도 켜지지도 않더라..

내가 PlayReverse()와 PlayForward()에 대한 이해도가 떨어져서 문제분석이 안되는건지 뭔지는 모르겠지만..


아무튼 해결된 코드를 보자


public void SideMenuOpen( GameObject obj )
{
	if(isOpen)
	{
		MenuTween.from = new Vector3( PosToX , 0 , 0 );
		MenuTween.to = new Vector3( 0 , 0 , 0 );
		
		ArrowTween.from = new Vector3( 0 , 0 , RotToZ );
		ArrowTween.to = new Vector3( 0 , 0 , 0 );
	}
	else
	{
		MenuTween.from = new Vector3( 0 , 0 , 0 );
		MenuTween.to = new Vector3( PosToX , 0 , 0 );
		
		ArrowTween.from = new Vector3( 0 , 0 , 0 );
		ArrowTween.to = new Vector3( 0 , 0 , RotToZ );
	}
	
	MenuTween.duration = PosDuration;
	MenuTween.ResetToBeginning();
	
	ArrowTween.duration = RotDuration;
	ArrowTween.ResetToBeginning();
	
	MenuTween.Play();
	ArrowTween.Play();
	
	isOpen = !isOpen;
}

음..다시보니 그렇게 지저분한거 같지 않은것 같기도...ㅋ;;

아무튼 이렇게 하니까 해결됐다.

결과는 Play(),PlayForward(),PlayReverse() 셋다 생각한대로 작동한다.

위에서 봣던 코드처럼 버그는 생기지않는다.


이유가 뭘까...

나중에 자답으로 달아야겠다.

끝!

Comments