ニートが頑張るブログ

ニートが現実逃避するために創作活動など色々とカオスに頑張ってみる
ニートが頑張るブログ TOP  >  自作ゲーム開発 >  unity版アニマルメーカー セミ追加

unity版アニマルメーカー セミ追加


スッゴイ久しぶりにアニマルメーカーのunity版の進捗でも貼ります。

本質的に何も変わってないじゃん
むしろ接地感とか悪くなってるくらいじゃん
って思われるかもしれんけど、


これでも一応、いろいろ試行錯誤してなんとかマシにしようとした結果がこれなんです。





続きは長いです。
大したことやってなくても、延々と語れるんです。



 
やったこと。



まずラプトルを入れてますね。
せっかく作った恐竜モデルがやっと役に立ちました。

ラプトル


で、結局「こういう見た目」なんです。

バイオハザード2 KENDOガンショップの親父の肩

この辺で危惧したとおり、関節の継ぎ目が、スムーズではありません。



これをなんとかしようと幾つか考えたんだけど、駄目でした。


モモの部分はそもそも別オブジェクトだから諦めるとして、
 (モモ基準で四肢切断が起きるのはアニマルメーカーとしては必須)

せめて「足全体」くらいなら、ひとつなぎでスムーズなモデルを入れられるんじゃないか?とかは考えたんです。
ラプトル走り
(だってこういうことは出来てるんだから) (モモは切れてるけどそこから先は滑らか)

そのために色々やろうとはした。


で、まず、足だけのこういうモデルを分けて用意する。

このモデルに、blender側で骨を入れて、ウェイト塗りをする。
そんで、fbxにして、unityに入れる。

足だけのアーマチュアが出来る。

入れたら、骨を読み取れるわけだから、歩かせることが出来るはず。

そうすりゃ、モモから先だけは、まだスムーズに曲げることが出来るんじゃなかろうか
・・・、

とか思ったんですが、


それがもう全然上手く行かなかったんです。

おかしい走り

unity

なんかもう、色々と上手く行ってないのがわかりますね。


ぶっちゃけ良く分からん。
何がどう駄目でこうなってるのかも分からん。
unity極めた神が隣りにいて、ジーニアスバー的な勢いで、全部教えてくれたりしないかぎり、分からんレベル。


(大体、左右の足のモデルの反転のやり方すら、分かってない スケールをマイナスにしても上手くいかんのだこれ)


そもそも、自分がやりたいことを実現するための命令がない気がする。

unityは、アニメーションを読み込んでその通りに動かす以外で、
ボーンを動かそうとしたときに、

SetIKPosition
SetIKHintPosition


みたいなのくらいしか、命令がない気がするんです。
この辺のリファレンスを見ても、ない気がする)

  足の構造説明図
つまり、こういう足があったら、「この足のさきっぽの位置を決める」という風にしか、骨を動かせないんじゃないか?
(⑩の位置を決めるのが、SetIKPositionという命令 そういうのしかない)

なんとなく、FK的に、ボーン一つ一つを指定して、関節一つ一つの位置に当てはめるという命令が、ない気がする。



自分的に、プログラム的に、アニマルメーカー的には、
もう既に モモの位置、膝の位置、逆関節の位置、つま先の位置、とかは計算してるんですよ。 
ソイツらのtransform.positionは計算して決められるんです。

ソイツらの位置に、このアーマチュアのボーンを当てはめるようにしたら、
自分のしたいことは実現するように思うんです。



unity
つまり、
「SetFKPosition」って名前の命令でもあれば、
今はこんなにおかしいこれだって、アニマルメーカー的にちゃんと動かせられるようになる気がするのに、
そういう命令がない、気がする。



足の先の位置を決めるだけ・・・らしい? (つま先の位置、つま先の方向を決めるだけ?)

これでは、いい感じにアニマルメーカー的にあるかせられる訳が無い。

解決方法がサッパリ分からない!

勉強のしようも分からない。

いつまでもこんなところでグダっていたくない。


というわけで、今ん所、この方法は諦めました。


足の構造

で、結局、こういう風に、
足オブジェクトの下に各関節を子オブジェクトとして入れて、
その各関節に、分割した各メッシュを読み込んで、
そんで、計算した各関節の「位置」に合わせて移動させ、
「角度」に合わせて回転させ、
「関節の長さ」に合わせてスケールを伸ばして・・・というやり方
でいくことになったんです。
(非常にアニマルメーカー的なんですこれが)


それで、まぁラプトルがこうなってる訳です。


まったく。


これは、どうやったら解決するわけ?


で、ラプトルを入れるにあたって、
「頭」「尻尾」オブジェクト用のスクリプトも作りました。


Cキーで、顎を動かして「噛む攻撃」とか出来るようになってます。
一応、ヘボいけど。

(つまり、自分のやり方というのは、「攻撃アクション」とかいうのは )
(全部、アニメーションを作るんじゃなくて、プログラム側で挙動させる
ってやりかたなんです)


尻尾の設定画面
尻尾も、
今、↑こんな感じで、数値をインスペクター側から設定すれば、
旧アニマルメーカーと同じように、尻尾の挙動を変えることが出来るようになってるんです。



しっぽのプログラム自体は、旧アニマルメーカーの方が、凄いことやってましたよ。

unityの場合は、こういう風に3D的に階層を重ねまくることが出来るので、
伝達しながら曲がっていくモデルとか、角度の設定をそれぞれにつけていくだけで、ある意味、楽に終わるんです。

旧アニマルメーカーのときは、そんなん無いですからね。
内部的には全部2Dなんだから。

ものすご計算大変でした。


その代わり、

各尻尾の段階ごとの頂点の位置とかすぐに見れたしいじれましたから、
その頂点を、常に前のフレームと分数的にモーフさせる~とかもやってました。

だから、
旧アニマルメーカーの尻尾のほうが、動きが本当はなめらかなんです。


(でもそのかわり、旧アニマルメーカーの動物は、急に走ったりすると、尻尾がなんか伸びるようなところがありました)

(この辺のことを意識しながら旧アニマルメーカーのラプトルとか旋回させてみてください)
(そっちのほうが尻尾の動きが良いことが分かるはず)



この2つの、長所だけを合わせたような進化が出来たらなぁ、とは思ってるんです。

旧アニマルメーカーの尻尾の、滑らかさ、旋回したときの自然さ。
それと、unity版の、プログラムのシンプルさと、尻尾が伸びないとこ。

なんとかならんものか。


そもそも、接地感や足の動きからして、旧アニマルメーカーの方が出来がいいですからね、今のところ。


例えば、
シフトキーを押して、右に歩いてから、すぐに左に切り替えたときとか、足の動きのスムーズさに差があります。
並行移動

旧アニマルメーカーの場合は、足の動きが滑らかに変化しますが、

今のアニマルメーカーの場合は、足が一瞬で「飛ぶ」感じが見られます。
 (まぁ、現状、大体のゲームがこれを解決出来てないとは思うけど)


原因は分かってるんです。
根本的な所でプログラム的に処理が違ってきてるので、そういうののせいでこういう差が出てるんです。


これを直すのは、凄い大変だと思う。それも分かる。


大体、untiy版のアニマルメーカー、もともと本当に動きが悪かった。


普通にキャラが突っ立ってるだけで、なんか上下にガタガタするし、

そのままズルズルとどこかにズレていくし・・・

これはもう何が悪いのか、どうやってマシにしていったらいいのか本当に謎な状態。



それでも、色々と試行錯誤して、少しはマシになった結果が、これなんです。

今回、セミを入れてますが、

6本足の動物とか入れたら、最初はものすごガタガタ暴れまくって、全然ちゃんと歩けなかったんです。

それが色々調整して、まぁここまでにはなったんだから、
とにかくこれは、色々マシにした結果がこれだということなんです。

(まぁセミもほうっておくとズルズルとズレていくけど)


前の骨のティラノサウルスの方が安定してたように見えたとしても、
今回の方が色々拡張性を考えた上でましになってるということなんです。


で、他には

・ボタン機能

・マウスクリック動作

・スライダー機能


とかも覚えました。

自分はギリギリまで新しいこと覚えないので、
ずーっとキーボード入力と、テキスト表示だけでやってましたね。




今回用意したボタンで、主人公の切り替えとか出来るようにしてみました。

まぁ実はどうでもいいですね。


割りと大変だったのがマウス操作です。


今回、足のモモのあたりをクリックすると、足がもげられるようにはしました。

これが出来ないとアニマルメーカーらしくないですし、
これが出来ないとアニマルメーカーを移植する価値もありません。


もう一回クリックすると、くっつきますが、この際、歩行の挙動がちょっと変になります。


あと、もいだ足が付随してついてきます。 動きがおかしいです。
これは、子オブジェクトとしての足を解除することをやってないせいです。
親子関係を解除したり、また戻したりするやり方を覚えてないので、まだやってないんです。

そのせいで足をもぐと足元に当たり判定つきの肉が落ちるせいで、まーた挙動がおかしくなります。


未だに本質的な部分がよく分かってないです。
マウスクリックを検出するために何が必須で、何が実はいらないのか。

例えば、マウスクリック出来るようにするために、ボックスコライダーを足のモモに入れているわけですが、

これをisTriggerにして、あとチェックも入れています。
これをしないと、マウスクリック出来ないみたい。

でも、こうすると、なーんか足全体の挙動が悪くなってる気がする。


一応色々やってるんですよ。
足をもげると同時に、
このモモに入れたボックスコライダーのisTriggerfalseにする。 (これで地面と判定が出るようになる)
同時に、足についてるリジッドボディのuseGravitytrueにする。 (これで落下するようになる)

とか。

こういうの、常にオンにしてると、めちゃくちゃおかしな動きするんです。

こういうことを切り替えて
なんとか自然になるようにはしてるんだけど、
なーんか知らんけど、足全体の動きが、なんだか妙に上下にフワフワしてる気がする。


どうも、足のボックスコライダーと、カカトの重要な当たり判定で、何かが起きているようなせいな気がする。

でもよく分からない。


スライダー

あと、この「スライダー」の意味が分からんだろうけど、

これは、
カメラの「キャラクター追従能力」の、Y軸方向へのパラメータを弄ることが出来るスライダーなんです。


これを0にすると、カメラがY軸に関して、キャラを全く追いかけなくなります。
増やすと、すぐに追いかけるようになります。


なんでこんなん用意したかというと、ずっと前に言われてたことだからですね。


自分はこのことより先に、キャラが上下にガタガタする問題自体をなんとかしたかった。


話は前後するけど まぁこうやってセミも追加できましたね。


6本足の動物だろうがなんだろうが、追加できるってことです。
どんな形状の動物だろうがイキナリぶち込んでそれなりに歩かせられるのがアニマルメーカーの強みです。

セミ歩き セミ歩き

(なんかガクガクしてるような) (附節が地面にめり込む問題とかあるけど)

まぁ動きはともかくとして、
前足の肘の関節部分などには、さほど見て違和感はないように思えます。

1番気になってたのはこれなんですよ!


カマキリの「萌えポイント」の1つに、「前足の転節」というのがあると思う。
肘のところの三角形ね。

関節の繋ぎがぶつ切りのこのアニマルメーカーにおいて、「カマキリの転節」が不自然にならないかどうか、
そのテストのためのセミだったのです。


あと、わかりにくいけど、このセミにも恐竜と同様に
「首」「頭」の部分があり、別れています。

キャラが旋回したり、注視したりするときに、微妙な角度の差が出るようにしてきます。
 (まぁ実際セミは首を動かさないだろうけど)

セミの旋回時

これ、セミの首は短くてずんぐりむっくりしてるからわかりにくいけど、
これがカマキリになってくると、結構重要なことなんです。


カマキリの鎌は、長い首の、結構「前の方」についています。
旋回すると、相当な位置と角度の差になってくる。



だから、アニマルメーカーでもそうだけど、そういう動物には特殊な設定が必要でした。

(アニマルメーカーの場合は、頭に足をドラッグとかでその設定を変更出来ました)
胴体編集メニュー



でまぁとにかく、このセミが違和感なく旋回できているように、
カマキリの首に、前足をくっつけても何の問題もないことが確認できますね。


とにかく、これで、今のところ、
カマキリを入れても行ける!ことがわかったとは言えるんです。




というわけで、本当にダラダラやってるけど、

ついに、カマキリの3Dモデルを作るときがやってきた訳ですね。
自分の、「これが出来たらいつ死んでもいいや的行為」の中に入っているヤツです。


まぁそれは良いとして、
この、unity版のアニマルメーカー「自体」は、どのくらいのところまで作るべきなのか、自分でも結構謎です。


自分の作るゲームのための 「歩行システム」の 根っこ部部分 というだけのことなら、
特にここから先の「UIの部分」を作る必要はなかったりするんですよ。実は。



新しい動物を追加したいとき、
自分がやるのは、例えば足なら、↓こういうインスペクター画面で、
足が持ってるパブリック変数に色々と入力するだけなんです。
 (自分の変数名の命名センスは酷いが気にするな)
足の変数設定画面
 (勿論動物のモデルも作らなきゃならんけど)


これで、足のモモの長さ、スネの長さ、つま先の長さ、とかを弄るんです。
関節のどこが逆関節だとかも、ここで全部イジれるんです。


こういう部分を、実際のプレイモードの画面でも、リアルタイムにいじれるようにするべきなのか?


つまり、旧アニマルメーカーがやってた機能と、完全に同じようなことを、unity版でもやるのか、やるまいか?




自分が迷っているのはここなんですね。


ぶっちゃけ、今、カマキリのモデルを作って、このシステムにぶち込んで、
そんで別プロジェクトとして保存して、そっから特化して行けば、

このまま、「カマキリシューティングゲームの続編」の製作に、移行できる気がするんです。


アニマルメーカーとしての開発は、そこで終わってもなんの問題もない気がするんです。



つまりなんというか、インスペクター画面を操作できる自分としては、
別に新しい動物を追加することに関して、なんの不自由もないわけです。


でも、
WebGLで公開するもんとして、このunity版アニマルメーカーをちゃんと完成させようというのなら、
今のような状態というのは、
例えこの先 いくら足や歩行の挙動を直したところで、それだけでは、「何も出来てないに等しい」ですよね。

単に、「恐竜とセミを歩かせられるだけ」の、よく分からんプログラムです。



足編集メニュー

やはり、完成させるなら、↑こういう画面、つまりUIやらなにやら、
めちゃくちゃメンドクサそうな、リアルタイムに足とかを色々変化させるプログラムを、完成させなきゃならない。
(自分としてはunity側のインスペクターでやりたいことは間に合ってるのに)


どうするべきか。

自作プログラムの補助、

動物追加のためのモノ、

単なるキャラ歩行の根っこのシステム、と考えれば、別に作る必要はなし。


てか、こっから先をちゃんと作るのはめっちゃ面倒くさいことが分かってる。

(旧アニマルメーカーも、キャラが歩けるようになってから先が大変だった
 リアルタイムに体を弄るためのプログラムと UIを作るのが、1番死ぬほど面倒だったから)



どうするかなぁ、と、微妙に悩んでたりします。


別にいらんよなぁ。

まぁ、これから先、flashが完全に死んでしまったら、
旧アニマルメーカーは触れなくなるわけだから、 このままだと、「代わりのモノが無くなる」ということにはなるけど。
自分としては、カマキリ作って、カマキリゲーの続編を考えたい、というのがあるんです。


もしもunityというものに、物凄い強力なファイル出力機能があって、
もっと、↓こういう画像、アルファ付きのpngとか、gifとか、簡単に出力出来るというのなら、
歩くhaw206

それは旧アニマルメーカーより「確実な進化」だから、そのためになら頑張って作っても良い気はするけど、
多分そういうのってプロ版のunityしか出来ないっぽい。


となると自分にはやっぱり無関係だなぁと。


以上。
そんな感じでした。



とにかく、カマキリ作ります。
関連記事
[ 2017/11/27 10:53 ] 自作ゲーム開発 | TB(0) | CM(5)
Unityを触ったことのない人間の発言をこれから書くので、「そういうことを言ってるんじゃない」という場合はスルー、もしくは返信不要としてください。

>>もう既に モモの位置、膝の位置、逆関節の位置、つま先の位置、とかは計算してるんですよ。 
>>ソイツらのtransform.positionは計算して決められるんです。

上の文言を見るに行列による変換作業は出来ている(?)ようですね。
このページの最初の動画が見れないので原因がよくわからないのですが、恐竜の足が上を向いている現象は操作する前から操作した後までこの現象が続くのでしょうか?

もし、操作していく内に徐々に変わっていくなら、クォータニオンによる回転ではなく、オイラー角による変換をやっている可能性があります。(X軸とZ軸が重なってしまう現象。)ただ、記事を見る限りその可能性は低そうです

ですので、おそらく原因としてはメッシュごとの法線ベクトルを決める際の処理がまちがっているのだと思います。つまり解決法として、クォータニオンを使用しそれを求めればByNeet様の意図する動きに近づけるのではないでしょうか?

最後にこれを見ている理系の方がいれば自分の考えに補足・訂正してもらえると幸いです。自分は文系なので肝心の問題が解決していない、もしくはアプローチへの手段を記載していない場合があるからです。(難しいことを言って相手に理解したと錯覚させている可能性のこと)

つたない文章となってしまいましたが、ByNeet様、皆さまよろしくお願いします。
[ 2017/11/28 22:32 ] [ 編集 ]
追伸ですが、メッシュ又はオブジェクトを向かせたい方向にするには、法線ベクトルとY軸の回転角度が必要ですので、それを求める方向で調整してみてはどうでしょうか。
[ 2017/11/28 22:34 ] [ 編集 ]
また追伸です。度々申し訳ありません。
上に書いたY軸の角度とは法線ベクトルに対する捻り角度のことです。分かりにくい表現でしたので補足させていただきます。
[ 2017/11/29 19:13 ] [ 編集 ]
バイオ3のジルが肌を出してるのは関節が滑らかに繋がったのを見せたかったからって聞いた事があるんですけど、本当に2と全然違ってますね~(記事とあんま関係ないコメントですみません)
[ 2017/11/30 14:18 ] [ 編集 ]
コメント返信
> 焼肉 さん



どうもです。

> 上に書いたY軸の角度とは法線ベクトルに対する捻り角度のことです。分かりにくい表現でしたので補足させていただきます。


あ、大丈夫です。
「Y軸の角度」という言葉は、大体二種類の意味を含んでると思いますが、文脈で伝わります。



で、残念ながら「そういうことを言ってるんじゃない」になってしまうんですが、
こんなに丁寧位に言ってもらって、やはりスルーは出来ませんよw



自分の、モデルを移動、回転、スケールで繋げるやり方自体の方は、
今現在動いているように、そこ自体には問題はないんです。
ただ、「関節間の繋ぎがスムーズじゃない」、というのが問題なんです。


で、それを解決するためには、

普通に、unity側で、ボーンを入れたモデルを読み込み、
普通に、アニメーションコントローラーを作り、
普通に、恐竜の歩行アニメーションをブレンダー側とかでつくり、それを読み込ませるか、
またはスクリプト側で動かす場合は、setik~とかの命令で動かす、のだと思うのです。


(今は、普通じゃないやりかたで、既にラプトルを歩かせています)
 (アニメ機能を使わずにキャラを歩かせようとするというのがもう異端なんでしょう)



で、実際アニメーション機能からそれをやろうとしたときに、
動きがおかしすぎて、謎すぎて、
どうにも分からん。


自分としては、setfk~みたいな命令があればなぁ~
こういうことがやりたい人はどういう風にしているんだろうなぁ~

というのが、自分の言いたいことでした。 わかりにくかったと思うし、このコメント文章も結局わかりにくいと思います。


多分、
クォータニオン的なことで何か間違っているということではないと思うんです。



(伝わらないのは、自分の貼ったgif動画が見れないというのが問題のような気もするんですけどね)



という感じでした。

[ 2017/12/02 13:41 ] [ 編集 ]
コメントの投稿












管理者にだけ表示を許可する
トラックバック
この記事のトラックバックURL

月別カレンダー
03 ≪│2018/04│≫ 05
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 - - - - -