private void DuplicateCurrentObject(string objectName) { // Get old references PlayableDirector oldPlayableDirector = _CurrentUTADirector.GetPlayableDirector(); PlayableAsset oldPlayableAsset = oldPlayableDirector.playableAsset; // Duplicate asset PlayableAsset newPlayableAsset = ScriptableObjectUtility.DuplicateAsset( oldPlayableAsset, string.Concat(c_AnimationDirectory, objectName, ".playable") ); // Duplicate game object GameObject cloneGameObject = GameObject.Instantiate(_CurrentUTADirector.gameObject); cloneGameObject.name = objectName; PlayableDirector newPlayableDirector = cloneGameObject.GetComponent <PlayableDirector>(); newPlayableDirector.playableAsset = newPlayableAsset; // Duplicate bindings IEnumerator <PlayableBinding> oldBindings = oldPlayableAsset.outputs.GetEnumerator(); IEnumerator <PlayableBinding> newBindings = newPlayableAsset.outputs.GetEnumerator(); while (oldBindings.MoveNext()) { var oldBindings_sourceObject = oldBindings.Current.sourceObject; newBindings.MoveNext(); var newBindings_sourceObject = newBindings.Current.sourceObject; newPlayableDirector.SetGenericBinding( newBindings_sourceObject, oldPlayableDirector.GetGenericBinding(oldBindings_sourceObject) ); } // Reparent and select cloneGameObject.transform.SetParent(oldPlayableDirector.transform.parent); SelectCurrentObject(cloneGameObject.GetComponent <UTADirector>()); }