Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- bitbucket
- not working
- flutter
- Kotlin
- sourcetree
- Android
- EC2
- 리액트 네이티브
- WPF
- 빌드 오류
- react
- react-native
- 안됨
- Git
- 리액트
- Invalid credentials
- 개발환경설정
- 데이터바인딩
- 설정
- aPK
- 디버깅
- 뒤로가기 안됨
- 안드로이드 스튜디오
- 인증문제해결
- gradle
- 안드로이드
- VisualStudio
- git인증
- 예제
- AWS
Archives
- Today
- Total
물에 살고싶은 개발자
NGUI Tween이 정상작동 하지 않는 경우 본문
문득 익숙한 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