셀의 Timeline에서 오디오 재생이 끝날 때까지 순환합니다.
입문
이것은 《유니티 부드러운 여름 이벤트 달력 2019》 첫날의 보도이다.이번에는 유니티의 타임라인에 대한 이상한 사용법을 소개하고 싶습니다.
Unity의 Timeline은 다중 궤도에서 공연 등을 제작하는 표준 기능으로 주로 게임 중의 영화 장면을 제작하고 장면을 편집하는 데 사용된다.표준 애니메이션과 달리 여러 자원을 동시 이동할 수 있기 때문에 코드를 거의 쓰지 않아도 복잡한 공연을 할 수 있다.
그렇게 뛰어난 타임라인, 하지만 기본적으로 그 이름은 시간 시리즈를 따라 공연이 주를 이룬다.하지만 내용에 따라 편집의 길이도 변할 수 있다고 생각합니다.그래서 이번에는 오디오 길이에 따라 재생 위치를 자동으로 조정하는 경로를 설치해 봤다.
대사를 다 읽을 때까지 순환해서 기다릴게요.
나는 이 자료고를 바꾸는 형식으로 만들었다.
참조: tsubaki/Timeline-Loop
블로그 삽입용 동영상pic.twitter.com/mgtmNskpSW-Nakaji Kohki/리향(@nkjzm)July 31, 2019
© UTJ/UCL
사운드 재생이 끝나기 전에 LoopClip
위에서 반복적으로 움직이는 모습을 확인할 수 있습니다p>
실시
나는 이 자료고를 바꾸는 형식으로 만들었다.
참조: tsubaki/Timeline-Loop
블로그 삽입용 동영상pic.twitter.com/mgtmNskpSW-Nakaji Kohki/리향(@nkjzm)July 31, 2019
© UTJ/UCL
사운드 재생이 끝나기 전에
LoopClip
위에서 반복적으로 움직이는 모습을 확인할 수 있습니다p>실시
거의 다 쓰바키씨지만 드문 기회라서 해설에서 소개합니다.p>
우선 타임라인의 기본 구성입니다.이미지로 TrackAsset
라는 클립을 배치할 PlayableAsset
상자가 준비되어 있습니다.그리고 PlayableAsset
의 위치에 맞추어 PlayableBehaviour
의 생명주기가 돌아가는 느낌을 준다.PlayableBehaviour
가 실행될 때 생성되므로 Hierarchy의 참조 등은 PlayableAsset
부터 교차해야 합니다.
주로 3가지 스크립트로 나뉘기 때문에 언뜻 보기에는 복잡하지만 이동PlayableBehaviour
을 위해 준비를 했다는 인상은 이해하기 쉽다.br/>
참조: Unity 2017의 Timeline 기반을 다져야 합니다. - 섭곡반의 통신.
다음은 계승된 이 반부터 소개하겠습니다.p>
using System;
using UnityEngine;
using UnityEngine.Playables;
[Serializable]
public class LoopBehaviour : PlayableBehaviour
{
public PlayableDirector director { get; set; }
public WaitTimeline waitTimeline { get; set; }
public AudioSource audioSource { get; set; }
public AudioClip audioClip { get; set; }
public override void OnBehaviourPlay(Playable playable, FrameData info)
{
if (!audioSource.isPlaying)
{
audioSource.PlayOneShot(audioClip, 1);
}
}
float timer = 0f;
public override void PrepareFrame(Playable playable, FrameData info)
{
timer += Time.deltaTime;
if (timer < audioClip.length)
{
return;
}
waitTimeline.trigger = true;
}
public override void OnBehaviourPause(Playable playable, FrameData info)
{
if (waitTimeline.trigger == true)
{
waitTimeline.trigger = false;
return;
}
director.time -= playable.GetDuration();
}
}
PlayableBehaviour
시간에 따라 몇 개의 함수를 호출합니다.이번 인상은 다음과 같다.p>
먼저 재생
PlayableBehaviour
시 실행PlayableAsset
에서 소리 재생p>public override void OnBehaviourPlay(Playable playable, FrameData info)
{
if (!audioSource.isPlaying)
{
audioSource.PlayOneShot(audioClip, 1);
}
}
다음OnBehaviourPlay()
은 각 프레임이 불리는 함수로 시간의 측정을 거친다.또한 길이PrepareFrame()
를 초과한 경우audioClip
p>
public override void PrepareFrame(Playable playable, FrameData info)
{
timer += Time.deltaTime;
if (timer < audioClip.length)
{
return;
}
waitTimeline.trigger = true;
}
마지막trigger
은 이름상으로는 상상하기 어렵지만 포즈를 취할 때뿐만 아니라 OnBehaviourPause()
의 마지막 프레임에서도 호출할 수 있는 함수입니다.이 시점PlayableAsset
이 사실입니다. 즉, 재생이 끝난 후 그대로 유지되고 종료되지 않으면 타임라인으로 돌아가는 시간입니다.p>
public override void OnBehaviourPause(Playable playable, FrameData info)
{
if (waitTimeline.trigger == true)
{
waitTimeline.trigger = false;
return;
}
director.time -= playable.GetDuration();
}
계승된 클래스에서
trigger
의 참조를 실행합니다.Hierarchy에 대한 참조는 LoopBehaviour
의PlayableAsset
, 즉 PlayableDirector 구성 요소가 있는 GameObject를 통해 얻을 수 있습니다.p>
using System;
using UnityEngine;
using UnityEngine.Playables;
using UnityEngine.Timeline;
[Serializable]
public class LoopClip : PlayableAsset, ITimelineClipAsset
{
public ClipCaps clipCaps { get { return ClipCaps.None; } }
[SerializeField]
AudioClip audioClip = null;
public override Playable CreatePlayable(PlayableGraph graph, GameObject owner)
{
var playable = ScriptPlayable<LoopBehaviour>.Create(graph);
LoopBehaviour beheviour = playable.GetBehaviour();
beheviour.director = owner.GetComponent<PlayableDirector>();
beheviour.waitTimeline = owner.GetComponent<WaitTimeline>();
beheviour.audioSource = owner.GetComponent<AudioSource>();
beheviour.audioClip = audioClip;
return playable;
}
}
재생만
CreatePlayable(PlayableGraph graph, GameObject owner)
은 각각owner
에 따라 다르기 때문에 AudioClip
검사기에서 지정한 형식을 사용합니다p>마지막은 PlayableAsset
배치PlayableAsset
의 실현이다.이것은 단지 계승 PlayableAsset
을 통해 링크할 뿐이다p>
using UnityEngine.Timeline;
[TrackColor(1f, 0.2794118f, 0.7117646f)]
[TrackClipType(typeof(LoopClip))]
public class LoopTrack : TrackAsset
{
}
LoopClip 구성 시 팁
재생성 위치가 반복될 수 있으므로 재생성 중인 애니메이션이 자연스럽게 전환되지 않습니다.p>
이번에는 재생TrackAsset
의 길이의 등배의 느낌으로 재생하여 전환 시 불협화감을 줄였다p>
마지막
원래 타임라인에서 소설 편집기 같은 것을 만들기 위해 검증을 시작했어요.나는 타임라인의 동적 연출과 길이가 다른 대사의 효과적인 관리를 겸비할 수 있다고 생각하지만 순환 중의 제한이 상당히 엄격하다는 것을 알아차렸다.동적 장점으로서 이외에도 외부에서 소리를 참조할 수 있는 형식, 사용자가 대사를 바꿀 수 있는 도구 등을 만들 수 있다.Default Playables를 사용하면 자막 등을 띄울 수도 있고, 의욕이 있다면 하는 것 같아요.p>
그런 느낌의 느슨한 기사입니다.내일《유니티 부드러운 여름 이벤트 달력 2019》은 @pCYSl5EDgo 씨의'LINQ to Native Array에 관한 글'입니다.기대해주세요.p>
Reference
이 문제에 관하여(셀의 Timeline에서 오디오 재생이 끝날 때까지 순환합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/nkjzm/items/f38818c6a1cea91c1c16텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)