🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

Q&A

解決済

1回答

3688閲覧

[Unity3D] RigidbodyとAnimator両方の挙動を両立させたい

mushipan0929

総合スコア56

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Unity

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

1グッド

0クリップ

投稿2020/11/30 04:43

前提・実現したいこと

下り坂にSphereを乗っけて、転がる挙動をRigidbody、ジャンプする挙動をAnimatorで動かしたいです。

発生している問題・エラーメッセージ

Animatorは図のように、ジャンプしない時はEmpty(何もキーは打っていないです)
ジャンプするときはTriggerでJumpに向かうよう管理しています。
イメージ説明

実際に動かすとジャンプの挙動は正しく動くのですが、Emptyに入っている間は転がりもせずピクリとも動いてくれません
てっきりEmptyは何も変化がないのでそのまま無視して転がるかと思っていましたが甘かったです

該当のソースコード

public class Hoge : MonoBehaviour { public Animator anime; private void Start() { anime = GetComponent<Animator>(); } void Update() { if (Input.anyKeyDown) { anime.SetTrigger("Jump"); } } }

試したこと

色々調べてみましたが納得のいく答えには辿り付けなかったです...
・Jump中だけanimatorをアクティブにする
・AnimatorのApplyRootMotionにチェックをつける ←転がりましたがとても遅かったです

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

UnityVer:2019.2.21

9nahito👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

ApplyRootMotionのチェックは外しておていいと思います。

以下の条件で一応動かして確認してみました。
・オブジェクトはSphere
・Rigidbodyを付ける
・(Animator) ApplyRootMotionのチェックを外す
・(Animator) Update Mode: Normal
・(Animator) Culling Mode: Always Animate
・(Animator) Entry→Empty(アニメーション未設定)→Exitで設定
・(Animator) Any State→Jump→Emptyで設定

C#

1// ソースコード 2 3using UnityEngine; 4 5public class Example : MonoBehaviour 6{ 7 8 // インスペクタから設定 9 [SerializeField] 10 private Animator anim; 11 12 void Update() 13 { 14 if (Input.anyKeyDown) { 15 anim.SetTrigger("Jump"); 16 } 17 } 18}

これで動きました。
坂をちゃんと転がりながらアニメーションを再生できたので問題ない挙動だと思います。

投稿2020/11/30 06:33

PinoMatcha

総合スコア368

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

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

mushipan0929

2020/11/30 07:27

回答ありがとうございます。 記載通りに試してみましたがPositionは未だ固定されてしまい動かずじまいです... ただ何故かRotationだけは転がるような挙動をしていました。 そこで現在JumpアニメーションにはPositionのkeyが打ってあったので 追加でRotationのKeyを打ったところ、Rotationもピタッと止まるようになり 逆にPositionのKeyを消してRotationのKeyのみにするとRotationは固定ですがちゃんと滑り落ちていくようになりました。 恐らくこの辺りに原因があるのかなとは思います。
mushipan0929

2020/11/30 08:00

自分もそのページを見て試してみたのですが出来ませんでした...
PinoMatcha

2020/11/30 09:24

目標挙動の確認なのですが、 普段は物理演算でコロコロ(アニメーション関係ない)、 ジャンプ時に物理演算からアニメーションに切り替え、上下などの挙動を再現する。 ということで合ってますか?
mushipan0929

2020/11/30 09:26

はい、そのように動かしたいです。
mushipan0929

2020/11/30 09:47

ページ内の手順を試しましたが特に変化は起きませんでした。 あと一つ気づいたことがあるのですが、何故かAnimatorウィンドウ内にある Jump、Empty Stateをクリックしてドラッグしている時だけ正常に働きました。
PinoMatcha

2020/11/30 09:55

アニメーターのJumpからEmpty(もしくはExit)に矢印引っ張ってみてください。 そうしておかないと、一度ジャンプするとずっとジャンプアニメーションが再生されることになってしまいます。 それと、一度unityやPCを再起動してみたらどうでしょう? たまにunity側の問題っていうこともあるので。
mushipan0929

2020/11/30 10:13 編集

矢印は既に引っ張ってありますね... Pc,Unityの再起動も効果ありませんでした... 再起動した後もジャンプはどのタイミングでも出来るのに対し 転がるのはAnimatorウィンドウのStateを弄りまわしている時だけというのも不思議です。 Animatorの流れを表す青い線?みたいなのは弄りまわさなくても表示され流れていますしプロジェクト内の時間が進んでいないのでしょうか..? 自分の知識内ではTime.timeScaleぐらいでしか時間の速度を図る方法を知りませんがこちらは常に1となっていました。
PinoMatcha

2020/11/30 10:12

「Empty」ステートに何かしらアニメーションをセットしていますか?
mushipan0929

2020/11/30 10:13

いえ、何も設定していません。
PinoMatcha

2020/11/30 10:20

どういうゲームを作ろうとしていて、なんのためにその機能が必要なのかとかを軽く教えていただけないでしょうか?
mushipan0929

2020/11/30 10:29

元々は、パズルゲームのギミックで使用するつもりでした。 1mx1mx1mのギミック付きレールをステージに敷き詰めボールを転がし始めた後はゲームには干渉できずゴールに行くまで見守る...といった3Dパズルゲームです。 その数あるギミックの中にボールが通り過ぎるとボールを捕まえ、隣のマスに運ぶギミックがあり そのギミックで、運ぶオブジェクトと運ばれるボールのAnimationを作る必要が出てきました。 運ぶオブジェクトは運ぶ時しか動かないので簡単にAnimationを制作することが出来ましたが ボールの方は普段Rigidbodyによる物理演算で動いていた為ここで制作が進まなくなりこちらに質問を投稿しました。
PinoMatcha

2020/11/30 10:44

なるほど。 でしたらアプローチ方法を変えるのも手だと思います。 ボールにJumpさせるということは、ブロックからブロックへポーンって飛ばす感じですかね?
mushipan0929

2020/11/30 11:11

ポーンと飛ぶギミックもあるのですが、今回はUFOキャッチャーのように掴まれて移動するといった動きを想定しています。
PinoMatcha

2020/11/30 11:20

でしたら、 1. ボールをつかんだ瞬間にボールをキャッチャーの子要素にする。 2. キャッチャーを移動させる 3. 目的地に着いたらボールとキャッチャーの親子関係をリセット で実装できると思います。
mushipan0929

2020/11/30 11:40

なるほど! Animatorで再現する事ばかり考えていました... 実装も簡単に出来そうでとても満足いく回答でした! 長々と話にお付き合いいただき、ありがとうございました。
PinoMatcha

2020/11/30 11:44

視点を変えるのも大切です! 頑張ってください
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問