2013/11/09(土) [n年前の日記]
#5 [unity] ApplyGravityの謎
人体モデルを Mecanim でアニメーションさせて、スクリプトで動かしてやりたい。ということで、 Mecanimのサンプルを眺めていたり。
_Mecanim Example Scenes by Unity Technologies -- Unity Asset Store の中の、Animator Controller.unity というサンプルを眺めて勉強を。しかしコレがよく分からない。
サンプルを動かしたら、重力計算をしているように見えた ―― 高いところから落ちると下にちゃんと落ちていくのだけど。どこでその処理をやってるんだ…?
サンプル内の人体モデルには、 _Character Controller と、スクリプトが割り当てられていて。Character Controller は重力計算をしてくれないので、 _スクリプト内で重力加速度を加えたり 等をしないといけない、と思ってたのだけど。
スクリプト、IdleRunJump.cs を眺めても、それらしい記述が無い。なんだかちょっと関係ありそうなのは、以下の1行だけ。
自分の自作の Scene 内で、IdleRunJump.cs を使ってみた。…重力は働かない。だよなあ。
と思ったが、Inspector 内で、スクリプトが上、Character Controller が下になるように配置したら、重力が働いた。なんでや…。この ApplyGravity って、一体何者なんだ…? ググってみても、解説どころか使用例すら出てこない。ワケワカラン。
_Mecanim Example Scenes by Unity Technologies -- Unity Asset Store の中の、Animator Controller.unity というサンプルを眺めて勉強を。しかしコレがよく分からない。
サンプルを動かしたら、重力計算をしているように見えた ―― 高いところから落ちると下にちゃんと落ちていくのだけど。どこでその処理をやってるんだ…?
サンプル内の人体モデルには、 _Character Controller と、スクリプトが割り当てられていて。Character Controller は重力計算をしてくれないので、 _スクリプト内で重力加速度を加えたり 等をしないといけない、と思ってたのだけど。
スクリプト、IdleRunJump.cs を眺めても、それらしい記述が無い。なんだかちょっと関係ありそうなのは、以下の1行だけ。
public bool ApplyGravity = true;この、ApplyGravity は、宣言・代入はされてるけれど、スクリプト内で参照されてない。なのに、サンプルは重力が働いてる…。
自分の自作の Scene 内で、IdleRunJump.cs を使ってみた。…重力は働かない。だよなあ。
と思ったが、Inspector 内で、スクリプトが上、Character Controller が下になるように配置したら、重力が働いた。なんでや…。この ApplyGravity って、一体何者なんだ…? ググってみても、解説どころか使用例すら出てこない。ワケワカラン。
◎ ApplyGravityは関係ないのかな。 :
ApplyGravity を false にしても重力が働いた…。なんでや…。
CharacterController を削除してみた。重力が働かない。追加してみた。重力が働く。変だなあ…。CharacterController は重力計算と関係ないはずだったのでは…。
なんだか分かってきた。Animator の Apply Root Motion が関係してる…? この、Apply Root Motion は、以下の意味を持ってるらしいけど。
すると、Animator が重力計算をしているのか…。いや。違うか。だって、CharacterController を外すと重力計算しないのだし。Animator が重力計算をしているなら、CharacterController を外しても落ちていくはず。
もしかすると、CharacterController が、Animator の存在、かつ、Apply Root Motion をチェックして、有効だったら重力計算をするようになっている…?
でも、そうなると、スクリプト内の ApplyGravity って、何に使ってるんだ…? ワケワカラン。
CharacterController を削除してみた。重力が働かない。追加してみた。重力が働く。変だなあ…。CharacterController は重力計算と関係ないはずだったのでは…。
なんだか分かってきた。Animator の Apply Root Motion が関係してる…? この、Apply Root Motion は、以下の意味を持ってるらしいけど。
- チェックを入れると、モーションで座標移動する。
- チェックを入れないと、スクリプトで座標移動する。
すると、Animator が重力計算をしているのか…。いや。違うか。だって、CharacterController を外すと重力計算しないのだし。Animator が重力計算をしているなら、CharacterController を外しても落ちていくはず。
もしかすると、CharacterController が、Animator の存在、かつ、Apply Root Motion をチェックして、有効だったら重力計算をするようになっている…?
でも、そうなると、スクリプト内の ApplyGravity って、何に使ってるんだ…? ワケワカラン。
この記事へのツッコミ
[ ツッコミを読む(2) | ツッコむ ]
以上です。
記事者さんは解決されたのでしょうか?
その後Unityは触らなくなったので、たぶんコレって謎のままだった気がします…。