Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.22 KB | None | 0 0
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. using UnityEngine.Playables;
  5. using System.Linq;
  6.  
  7. public class BindObjectOnDemand : MonoBehaviour
  8. {
  9. [SerializeField] Animator character;
  10. [SerializeField] PlayableDirector director;
  11.  
  12. Coroutine coroutine;
  13.  
  14. public IEnumerator PlayAnimation ()
  15. {
  16. // キャラクターを生成して、Animatorを取得
  17. var instantiateCharacter = GameObject.Instantiate (character.gameObject).GetComponent<Animator> ();
  18.  
  19. // 取ってきたAnimatorをPlayableDirectorにバインド
  20. Bind(instantiateCharacter);
  21.  
  22. // 再生して、再生終了後に生成したキャラクターを殺す
  23. director.Play ();
  24. yield return new WaitUntil (() => director.playableGraph.isDone);
  25. coroutine = null;
  26. Destroy (instantiateCharacter.gameObject);
  27. }
  28.  
  29. void Bind(Animator animator)
  30. {
  31. // TimelineからCharacterAnimationTrackのトラックへの参照を取得して
  32. // 生成したAnimator情報を流し込む
  33. var binding = director.playableAsset.outputs.First (c => c.streamName == "CharacterAnimationTrack");
  34. director.SetGenericBinding (binding.sourceObject, animator);
  35. }
  36.  
  37. public void Play ()
  38. {
  39. if (coroutine == null)
  40. coroutine = StartCoroutine (PlayAnimation ());
  41. }
  42. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement