Skip to content

Instantly share code, notes, and snippets.

@tsubaki
Last active September 27, 2018 09:38
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tsubaki/1690b43cb6d3275e39cd84d0f1b54685 to your computer and use it in GitHub Desktop.
Save tsubaki/1690b43cb6d3275e39cd84d0f1b54685 to your computer and use it in GitHub Desktop.
アニメーションクリップを動的に更新
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ChamgeAnimationClip : MonoBehaviour
{
[SerializeField] AnimationClip clip; //
string overrideClipName = "Clip"; // 上書きするAnimationClip対象
private AnimatorOverrideController overrideController;
private Animator anim;
void Start ()
{
anim = GetComponent<Animator> ();
overrideController = new AnimatorOverrideController ();
overrideController.runtimeAnimatorController = anim.runtimeAnimatorController;
anim.runtimeAnimatorController = overrideController;
}
public void ChangeClip (AnimationClip clip)
{
// ステートをキャッシュ
AnimatorStateInfo[] layerInfo = new AnimatorStateInfo[anim.layerCount];
for (int i = 0; i < anim.layerCount; i++) {
layerInfo [i] = anim.GetCurrentAnimatorStateInfo (i);
}
// AnimationClipを差し替えて、強制的にアップデート
// ステートがリセットされる
overrideController [overrideClipName] = clip;
anim.Update (0.0f);
// ステートを戻す
for (int i = 0; i < anim.layerCount; i++) {
anim.Play (layerInfo [i].nameHash, i, layerInfo [i].normalizedTime);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment