質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

1249閲覧

アニメーション遷移中にCrossFadeをすると地面に埋まってしまう

Rear1123

総合スコア0

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/10/13 02:12

編集2021/10/13 02:54

前提・実現したいこと

Unityで3Dアクションを作っています。

AnimatorOverrideControllerを使いAnimationClipを動的に差し替えつつ、animator.CrossFadeを使って差し替えたアニメーションに遷移させたいです。

アニメーション遷移中にanimator.CrossFadeでの遷移が始まると地面に埋まった状態からアニメーションが始まってしまいます。
これの解決方法を教えていただきたいです。

遷移中でない時にanimator.CrossFadeが実行されてもアニメーションは正常に再生されます。
VRMモデルのオブジェクトの親に下記のAnimationControllスクリプトとAnimatorをアタッチしています。

AnimatorControllerの中身は画像の通りです。
イメージ説明

何卒よろしくお願いいたします。

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5[CreateAssetMenu(menuName = "Test/Create AnimationStatus", fileName = "AnimationStatus")] 6 7public class AnimationStatus : ScriptableObject 8{ 9 public AnimationClip animationClip; 10 public float normalizedTransitionDuration; 11 public float normalizedTimeOffset; 12 public float exitTime; 13}

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.Threading.Tasks; 5 6public class AnimationControll : MonoBehaviour 7{ 8 9 [SerializeField] Animator animator; 10 [SerializeField] List<AnimationStatus> animations; 11 private bool isMotionlock; 12 string overrideClipName = ""; 13 private AnimatorOverrideController overrideController; 14 15 16 void Start() 17 { 18 animator = GetComponent<Animator>(); 19 overrideController = new AnimatorOverrideController(); 20 overrideController.runtimeAnimatorController = animator.runtimeAnimatorController; 21 animator.runtimeAnimatorController = overrideController; 22 } 23 24 // Update is called once per frame 25 void LateUpdate() 26 { 27 if (isMotionlock) return; 28 overrideClipName = (animator.GetCurrentAnimatorStateInfo(0).IsName("Attack1")) ? "Attack2" : "Attack1"; 29 30 31 //アニメーションステート Attack1or2 のクリップを変更する 32 if (Input.GetMouseButtonDown(0)) 33 { 34 overrideController[overrideClipName] = animations[0].animationClip; 35 animator.CrossFade(overrideClipName, animations[0].normalizedTransitionDuration); 36 var exitTimeToSecond = animations[0].exitTime * animations[0].animationClip.length; 37 CantCancel(exitTimeToSecond); 38 } 39 if (Input.GetMouseButtonDown(1)) 40 { 41 overrideController[overrideClipName] = animations[1].animationClip; 42 animator.CrossFade(overrideClipName, animations[1].normalizedTransitionDuration); 43 var exitTimeToSecond = animations[1].exitTime * animations[1].animationClip.length; 44 CantCancel(exitTimeToSecond); 45 } 46 } 47 48 async void CantCancel(float exitTime) 49 { 50 int waitTime = (int)(exitTime * 1000); 51 isMotionlock = true; 52 await Task.Delay(waitTime); 53 isMotionlock = false; 54 } 55}

試したこと

Interruption Sourceの変更

補足情報(FW/ツールのバージョンなど)

Unity 2021.1.1f1

###追記(2021/10/13/11:48)
https://forum.unity.com/threads/help-with-issue-with-crossfade-and-animatoroverridecontroller.690601/
上記URLに、未解決ですが動画付きで同様のものがありました。
これと同じ挙動をしております。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問