Notice
Recent Posts
Recent Comments
Link
05-18 11:53
«   2024/05   »
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
more
Archives
Today
Total
관리 메뉴

킹머핀의 제작 일지

이즈(Ease)와 타임라인, 트윈 활용하기 본문

Construct 3

이즈(Ease)와 타임라인, 트윈 활용하기

KingMUffin 2021. 5. 7. 17:00

나는 지금 한 인스턴스를 다른 인스턴스를 향해 움직이도록 만드려 한다. 근데 그냥 움직이는 게 아니고,

  • 움직일 인스턴스의 위치와 각도의 중심이 목표 인스턴스이고
  • 그리고 Ease를 이용해서 자유로운 움직임을 보여야 한다

즉 위치와 각도를 목표 인스턴스에 상대적으로 보간할 수 있어야 한다. 목표(부모) 인스턴스가 움직일 수도, 회전할 수도 있다. 타임라인과 트윈 Behaviour으로 이즈(Ease)를 이용해서 이를 구현해보기로 했다.

요 며칠 간 이것만 연구했다. ㅎㅎ 그렇게 알아 낸 타임라인과 트윈에 대한 핵꿀팁을 정리하고 최종적으로는 사용할 기능을 결정하자.


타임라인

처음엔 타임라인을 사용하려 했다.

타임라인에는 객체가 아닌 UID를 가진 개별 인스턴스만 추가할 수 있는데, 실험해보니 액션으로 인스턴스를 교체해서 재생할 수 있었다. 그런다고 이전에 재생중인 다른 인스턴스의 타임라인이 중단되는 것도 아니다. 그러니까 여러 인스턴스에 동시에 적용 가능하다. 다만 이 때, Play all을 사용하면 타임라인 하나만 재생되므로 Play 액션으로 타임라인을 지정해서 순서대로 여러 번 재생해야 한다.

게다가 타임라인 파일에 다른 타임라인을 추가할 수 있는 것처럼, 액션에서 한 인스턴스에 여러 타임라인을 동시에 재생하는 것도 가능했다. 아니 왜 이런 꿀 정보를 문서에서 안 가르쳐주는 건데? 하여튼 발전 가능성이 참 많은 게임 엔진이다. 아무튼 간단히 말하면 재사용과 중복 재생이 가능하다는 얘기.

아쉽게도, 위치는 현재 위치에 상대적으로 이동할 수 있어서 문제가 없지만 방향이 아닌 (절대, 전역)좌표계를 따라 이동하기 때문에 각도가 바뀌어도 진행 경로가 같아서 사용하지 않기로 했다.

찾아보니 예전에 누가 건의했었는데, 아직 반영이 안 되었나보다. 저 글에서 관계자가 설명한 대로 시작 지점을 원점으로 키프레임을 각도에 따라 다시 계산하는 방법을 직접 구현할 수는 있겠지만, 그런 계산법을 난 모른다! 다른 방법을 찾는 게 가장 빠를 것이다. 다만 궁금하긴 하네. Need search & improve 목록에 올려놔야지.

아, 타임라인은 키프레임의 값을 실시간으로 읽을 수도, 수정할 수도 없다. 위의 계산 식을 알고 있더라고 만들 수 없네. ㅎㅎㅎ

 

트윈 Behaviour

그래서 이번에는 트윈을 사용해보기로 했다.

트윈 재생 중 목표 값이 바뀌면 그 시점부터 남은 시간동안 이즈를 처음부터 재생한다. 처음에는 재생 시간은 그대로고 이즈만 처음부터 재생하는 줄 알고 재생 시간을 조절해보려 했지만, 이 때 재생 시간을 확인해보면 0으로 초기화되어 있다. 즉 재생 길이와 시작 지점이 바뀐다. (재생 시간을 조절하면 트윈이 멈추어버려서 Resume 액션을 실행해야 함)

이건 방금 알아낸 사실인데, 트윈 재생 중 목표 지점이나 아무 곳에 있는 부모 인스턴스가가 회전하면 목표 지점이 아닌 기존 진행 방향으로 계속 이동한다. (각도가 아니라 위치를 변경했을 때는 역시 목표 지점도 변경한 위치만큼 이동했다) 타임라인과 같이 현재 위치에만 상대적이다.

뭐야, 타임라인보다 조잡하잖아? 그럼에도 트윈은 강력하고 방법은 여러가지다. 트윈의 작동 방식을 생각해보자. 시작과 끝을 이즈로 보간한다. 그 말의 뜻은, 매 프레임마다 시작과 끝을 업데이트하고 재생 시간을 수동으로 조절하면 위의 단점을 모오오두 보완할 수 있다. 마침 위에서 말했듯이 재생 시간을 조절하면 트윈이 저절로 멈춘다! 혹시 이렇게 이용하는 게 정석일까?

 

타임라인 vs 트윈

트윈은 밸류(value) 모드가 있다. 인스턴스의 속성이 아닌 수, 변수를 태그로 생성해서 트위닝할 수 있다. 이 방법으로 이즈의 값을 재생 시간으로 가져올 수 있어 유용하다. 그래서 위의 방법처럼 재생 시간과 트윈을 이용하지 않아도, 트윈은 이즈 값을 가져오는 용도로만 사용하고 좌표 계산을 통해 보간하는 방법도 있다. 다행히 좌표 계산은 아주 쉽다. 이미 해본 적도 있고. 어떤 방법이 더 효율적인지는 모르겠다. 아, 이건 생각하지 않기로 했지.

잠깐, 타임라인도 이게 가능하잖아. 타임라인은 이미 추가한 인스턴스의 변수를 조작할 수 있다. 게다가, 키프레임을 여러 개 추가하면 트윈과 달리 실행 한 번에 이즈를 두 개 이상 사용하는 것도 가능하다! 트윈의 밸류 모드는 타임라인의 하위호환인 셈이다!

물론 이즈를 잘 편집하면 하나로도 두 개 이상 사용하는 것처럼 보일 수도 있다. 하지만 그런 이즈를 일일이 생성하고 편집하는 방법보다는 역시 있는 걸 재사용하는 쪽이 현명하고 직관적이다. 게다가, 이즈는 스크립트가 아닌 이벤트 시트에서는 드롭다운에서 선택할 수밖에 없기 때문에 (Construct 3의 불편한 점) 다양하게 쓰려면 Switch문처럼 조건을 만들어야 하지만, 타임라인은 태그로 실행할 수 있다.

그래서 내 목적에는 트윈보다 타임라인이 더 유용하다고 판단했다. &

'Construct 3' 카테고리의 다른 글

정규 표현, 정규식  (0) 2021.07.06
함수 매핑  (0) 2021.02.21
계층 구조를 만드는 방법  (0) 2021.02.11
입력 이벤트 직접 만들기  (0) 2021.02.10
예제) 개인적으로 유용할 예정인 예제 모음  (0) 2021.01.20