質問: 移動と回転のアニメーションを作っているのですが、 アニメーションを繰り返すうにアニメーションとは関係ない座標までどんどんずれていってしまいます。 --- ヒエラルキー ``` RootObject(空のゲームオブジェクト) ├ LayerObject(円柱オブジェクト) ├ LayerObject(コピー) : └ LayerObject(コピー) ``` RootObjectにAnimatorをアタッチしアニメーションを実行 (y=5に持ち上げて180度回転しy=0に戻る裏返しアニメーションです) ``` 0:00 0:30 0:45 1:00 position.y 0 5 5 0 rotation.z 0 0 180 180 ``` --- スクリプトで複数のLayerObjectを複製して積み重ね その集合体(RootObject)を裏返すアニメーションをイメージしています。 実行したところ円柱層の底面を軸に回転し地面にめり込んでしまいました。 (ルートモーションを使うとどんどん下に行ってしまう) ``` ┌──────────────────┐ ┐ ├──────────────────┤ │ ├──────────────────┤ <-Layer │ ├──────────────────┤ │ ──└──────────────────┘── y=0 ┴ RootObject ↓ そのまま180度回転した結果 ──┌──────────────────┐── y=0 ┬ RootObject ├──────────────────┤ │ ├──────────────────┤ <-Layer │ ├──────────────────┤ │ └──────────────────┘ ┘ ``` --- 円柱の層の高さ/2を回転軸(RootObjectのPositioon.y)として回転させてみたのですがうまくいきません。 ``` h--┌──────────────────┐ │ │ h/2--│------------------│--- ┴ RootObject(0,h/2,0) ├──────────────────┤ ──└──────────────────┘── y=0 LayerObject(最低面)(0,-h/2,0) ``` LayerObjectのScale.y= h(全体の高さ)/Layer数/2(円柱オブジェクトの高さ) --- Layer数と高さhを設定してオブジェクトを生成し アニメーションできるようにしたいのですが、 * ルートモーションなしの場合 RootObject.position.y=0 → 地面を軸に回転してしまい、地面にめり込む RootObject.position.y=h/2 → 高さやLayer数を変えた時にアニメーション開始時に高さのずれ生じ、地面から浮いてしまう(Objectの座標を無視しアニメーションで設定した座標になる) * ルートモーションありの場合 高さやLayer数を変えても開始時の高さはy=0になっているが、 アニメーション終了時に想定外の座標に行ってしまう (なぜかx座標が変わっていて、y座標はどんどん地面にめり込んでいく) 裏返しアニメーションをした後でy=0に戻ってくるようにするにはどうすればいいでしょうか?
回答: アニメーションで設定した座標はローカル座標です。 なので`RootObject(0,h/2,0)`として、RootObjectにアニメーションをアタッチ。 そしてRootObjectの更に親オブジェクトを作ります。 LayerObject群の高さやレイヤー数が変更される場合は、この親オブジェクトの高さを上げれば 「親オブジェクトの高さ+アニメで指定される高さ」になるので恐らく正常に動作します。 もしくは、 iTween等スクリプトから移動アニメが再生出来るライブラリを使い、高さ計算した上で再生する方が簡単かもしれません。 色々な種類のライブラリがあるので調べてみてください。