AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

JKがIKで自転車のペダルをこぐ

f:id:yasu9780:20170122213110p:plain

自転車モデルのチェーンとペダルが一体化していたのをBlenderで分離して、IKでペダルをこがせてみた( ゚Д゚)

Blender側作業

blender初心者なので辛かった。当たり前のことができないのがきつい。
まず自転車のFBXを読み込むと、ペダルとチェーンが一体のObjectレイヤーになっている。
これを分離したい。
コピーではまる(´・ω・`) コピーして修正して削除するとコピー元も消えている(´・ω・`)
どうやら参照コピーと実態コピーがあるらしい。さすがBlender分かりにくい。

  • オブジェクトモードで該当レイヤーだけ選択して、シフト+Dで、コピーされて新しいレイヤーができる。
  • もとのやつは保存して、PedalとBeltという名前のレイヤーの別オブジェクトを作る。
  • それぞれ、ペダルはベルトを削除。ベルトはペダルを削除
  • 全体をFBXでexportする。

Unity側作業

Unity側では、ペダルメッシュを回転させてみると軸がずれているので、軸を合わせる必要がある。
emptyObjectを作ってpedalPivotと名付ける。
自転車の子として軸にしたい位置にもっていく。
ペダルをこのpedalPivotの子供にする。さらにペダルの回したい位置をこのpedalを動かして修正する(pedalPivotは動かさない!)
こうすれば、pedalPivotを軸に、pedalが回転する
(本来はBlenderでpivotは修正できるのでしょうが)

ペダルがうまく軸で回転できるようになったら、次のIK用のpivotを作る。
右足と左足ように、それぞれRightFoot、LeftFootというEmptyObjectを作って、pedalの子供にする。
左右のペダルの位置に置く(IKの足は足首なので、ややペダルの上の方に置く)


自転車の回転&移動
車輪の回転、ペダルの回転

                Quaternion rot = Quaternion.LookRotation(input);
                Mobile.transform.rotation = Quaternion.Euler(0, rot.eulerAngles.y, 0);

                float speed = (ax * ax + ay * ay) ;
                Mobile.transform.position += Mobile.transform.forward * speed * 5f * Time.deltaTime;

                BikeZenrin.transform.Rotate(new Vector3(0,0,300 * speed * Time.deltaTime));
                BikePedal.transform.Rotate(new Vector3(0, 0, 150 * speed * Time.deltaTime));

ペダルさえ回転すれば、さきほどのRightFootとLeftFootも回転しているので、IKのターゲットは軸を中心に回転運動する
以下で、足IKは自動的にRightFootとLeftFootを追う。

void OnAnimatorIK()
{
                    rpos = anim.GetIKPosition(AvatarIKGoal.RightFoot);
                    lpos = anim.GetIKPosition(AvatarIKGoal.LeftFoot);
                    SetIk(AvatarIKGoal.RightFoot, BikeRightFoot.transform.position - rpos, Quaternion.identity);
                    SetIk(AvatarIKGoal.LeftFoot, BikeLeftFoot.transform.position - lpos, Quaternion.identity);
}

実際の自転車こいでる様子

IKも厳密に位置合わせできないので、ずれているが、このへんは今後の調整次第。
手がハンドルと離れているのもおいおい解決したい


自転車&街並み

街並み

LowPolyの建物と道路をダウンロードしてきて街並みを少し作ってみた。
学校の外にも出られるようになりました。