Unity는 기존 타임 라인을 지원합니까?


13

Unity3D에서 게임 개발을 계획하고 있으며 엔진에서 이미 제공 한 내용과 직접 코딩해야하는 내용을 살펴 보려고합니다.

게임 자체는 리듬 게임이 될 것입니다. 즉 오디오와 그래픽 이벤트를 동기화하여 필요할 때 항상 재생할 수 있습니다. 내가 피하려고하는 것은 오디오 또는 그래픽이 다른 것보다 빠르게 진행되기 시작하는 잠재적 지연 시나리오입니다.

대학의 게임 디자인 수업에서 이러한 유형의 조정 시스템에 대해 논의했을 때, 교수는이 유형의 디자인을 "타임 라인"수업이라고했습니다. 아이디어는 하나 이상의 인스턴스를 인스턴스화하여 다른 속도로 진행하고 미래에 발생하는 일정을 예약하며 주기적 이벤트를 동기화 할 수 있다는 것입니다. 그러나이 API를 "타임 라인"클래스라고 부르는 것은 특정 API 기능인 "타임 라인"기능이 결실없는 노력인지에 대한 인터넷 검색으로 제 교수 자신에게만 국한된 것 같습니다.

이런 종류의 기능에 더 일반적인 이름이 있습니까? Unity는 이와 같은 이벤트 스케줄링을 조정하기 위해 기존의 방법을 가지고 있습니까? 아니면 엔진에 구축 해야하는 종류입니까? 그리고 만약 그렇다면, 튜토리얼을 지적 해 주셔서 감사합니다!


나는 비슷한 타임 라인 클래스를 사용했습니다 (그들도 같은 이름을 가졌습니다). 더 일반적인 패턴 이름은 알지 못하지만 아마도 함수형 프로그래밍, 코 루틴 또는 기타 비동기 개념을 통해 구현되는 경우가 많습니다.
interphx

답변:


10

Unity에서는이 기능을 사용할 수 없지만 이러한 타임 라인의 기본 구현이 너무 어려워서는 안됩니다.

내가 어떻게 그것에 대해 갈 것입니다 :

  • 귀하의 타임 라인 클래스는 내부적으로 사용 우선 순위 큐를 저장소 이벤트에 대한 데이터 구조 등을.
  • 이벤트는 단지 시간과 콜백이 될 수 있습니다. 타임 라인에 이벤트를 추가하는 것은 다음과 같이 간단합니다.timeline.AddEvent(0.25f, MyCallback) .
  • 모든 Update타임 라인 클래스는 다음과 같습니다.

    1. 재생 헤드 증가 (단순 float경과 시간만큼 )
    2. 우선 순위 대기열 의 헤드 를 확인하고 우선 순위 (예 : 시간)가 현재 재생 헤드보다 작거나 같은 모든 이벤트의 콜백을 제거하고 호출하십시오.

되감기 또는 재생 기능 이 필요한 경우 대기열에서 모든 이벤트를 제거하는 것은 어리석은 일입니다 (다시 감을 때 다시 추가해야 함). 대신 이벤트 를 보유하는 배열을 사용할 수도 있습니다 . 이벤트는 Time및 로 구성됩니다 Callback. 배열을 정렬하여 유지해야합니다 Time.

그런 다음 배열에서 항목을 제거하는 대신 현재 array-index를 추적 하고 매번 업데이트 할 때마다 해당 인덱스에서 먼저 검색하고 모든 콜백을 실행 Playhead >= Time하면서 인덱스를 증가시킵니다.

더 빠른 재생 속도를 구현하면 두 가지 구현 모두에서 작동하며 다음과 같이 간단합니다.

Playhead += Time.deltaTime * playbackSpeed

2
"경과 시간에 따라 재생 헤드 (간단한 부동 소수점) 증가" -이렇게하면 집계 된 부동 소수점 오류가 발생합니다. 대신 Time.time (게임이 시작된 이후의 시간)을 사용해야 합니다.
BlueRaja-대니 Pflughoeft

4

아니요, Unity3D에는 기본적으로 그러한 API가 없습니다.

그것은 코 루틴을 지원하지만, 당신이 그들을 조사하는 것이 좋습니다. 코 루틴은 일반적으로 이벤트를 예약하고 동기화하는 것을 매우 쉽게 만듭니다.


1

이것이 2012 년 답변 이후 새로운 것인지 확실하지 않지만 Unity는 실제로 (레거시) 애니메이션 편집기 를 통해 타임 라인 제어를 지원합니다 .

이 기능은 주로 커브를 사용하여 오브젝트 매개 변수에 애니메이션을 적용하기위한 것이지만 애니메이션 이벤트에서 스크립트를 트리거하는 기능을 포함합니다 . 이 스크립트는 그래픽과 오디오를 구동 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.