ニートが頑張るブログ

ニートが現実逃避するために創作活動など色々とカオスに頑張ってみる
ニートが頑張るブログ TOP  >  2017年07月02日
月別アーカイブ  [ 2017年07月 ] 

Unityあきらめた。

 
unityあきらめた。


早っ!


いや、完全に諦めたとか 完全に意味が分からんとか、そういうことではないんだけど、
とにかくイチイチ「やってられんこと」が多発する。 一旦中止、そんな感じ。 そういう話です。


まず、
unityにアニマルメーカーのシステムを移植しないと話にならんなぁというところから始まりました。


ユニティちゃんの旋回動作は酷すぎる。 あんなのを動かすアクションゲームなんか作りたくない。

じゃあそれ以外のアセットやらモーションやらをストアから買ってきて、それを組み合わせてゲームでも作るのかというと、
なんかね、そういうゲームの作り方からしても、自分の思う「ゲーム作り」の感覚から違うんだよ。


ストアからこのキャラモデル落としてきます。
このロコモーションシステム入れまーす。
モーションは、ここのモーションを落としてきて、適用します、この背景使います。
銃はこのアセットねー
・・・
・・・
はい、一時間でFPSが作れましたね? 
unity簡単ですね?


・・・
みたいなの、そんなのはゲーム作りじゃない。 そんな感覚がある。

「はい、コイン落としが作れましたね?」


いや、別に素材を自分で全部作れっていいたいわけでもないし、
「全部自分で作れ」ってんなら、そうやってミドルウェアに頼ることすらせずに「無」からゲーム作れってことになるんだろうけど、
そこまで言いたいわけでもない。


でもやはり自分としては、
「根っこの部分」

「このキャラ歩きシステムはどういう仕組みで動いているのか?」

そういう根っこのプログラムの部分を
自分で作ってないくせに、どうやって動いてるのか、自分でコードを理解してないくせに、
そういう「キャラ動かし用」のスクリプトを持ってきて、それで「動いた動いた」とやってる姿勢が、

自分の思うゲーム作りからはかけ離れてるように感じるワケですよ。



というわけで、やはりアニマルメーカーをunityに移植して、
それをキャラクター操作の基礎として始めたい、というのがある。


それ以前にも アニマルメーカーには物凄いメリットや応用性があると思っている。

あらゆる形式の動物を自機としても敵としても配置可能。 リアルタイムにも編集可能。
(unityでは、ヒューマノイド型を基準にしか考えられんであろ?)
(そしてそれ以外の形状の動物やモーションは、イチイチなんか落としてこないといかんであろ?)

そして四肢切断や、びっこ引き、部位破壊なども完璧に実際的に表現できる。
 (擬似的な表現ではなく、本当に足の機能が落ちたことによりびっこを引く、ということを表現できる)

モーションの滑らかさなども段違い。

段差クッション、走り、歩き、ジャンプ、しゃがみ、しゃがみ歩き・・・
それらかける、注視移動、旋回移動、平行移動の組み合わせが、どうきても、対応可能。

それらを、アニメーションコントローラーとか入れなくても、
いやそんなシステムよりもよっぽど滑らかで自然に、色々な挙動を表現することが出来る。




(例えばユニティちゃんがしゃがみながら後方斜め右にすり足しながら切り上げ攻撃をする、みたいなこと、簡単にできるか?)
(アニメーションコントローラーや「アニメーションマスク」とかで頑張れば出来るだろうけど、)
(でも、そもそも「しゃがみ右後ろ斜め歩きのモーション」なんていうニッチなモーションがなければ、作れないだろう)
だが、アニマルメーカーなら、自動的にそういうモーションが出来る!



・・・
とにかく、アニマルメーカーを移植してしまえば最強だろう、そんな感覚があったのです。


で、やってみる前に、
まず、アニマルメーカーが根っこのところで何をやってるのか、というのをちょっとだけ紹介してみよう。



本質は、「伸び縮みする棒」の制御なのです。


↓アニマルメーカーのキャラの足に、「力の元のなる部分」を表示させてみると、こうなってるのです。

アニマルメーカー





この「棒の先端」に注目すると、先端は「楕円」の動きをしていることがわかると思う。 

これ、これを思いついたことが全ての始まりでした。


で、この棒が地面にめり込んだ時、その「めり込んだ量の分の力」が、「逆に全身にかかる」ようにしているのです。

これが、「踏み込みの力の変化」の表現になってる。

アニマルメーカー

地面との最終接点が、実際のかかとの位置となる。 (その分足は縮んだことになる)

そして、「膝の方向ベクトル」というのも計算しておく。

で、足の縮んだ分の量だけ、膝方向を伸ばしていく。 これが、自分が考えた、自作IK(インバートキネマティクス)ということです。
(黄色い矢印が、膝の伸ばすべき量)



つまり、
「地面の下側」としては、変化する足の蹴り込む力の伸びとして、
「地面の上側」としては、足を縮めて戻す動きの先端として、
すべてが「円の動き」に帰結するのです。

これってなんか凄くないですかと。


大体基礎がこんな感じ。
これが基礎となって、アニマルメーカーは動いているのです。

アニマルメーカー

この基礎があるから、この接地感、物凄いなめらかな挙動変化、そういうのが実現できてるのです。

例えば、この円運動のY軸を更に回転させたりすると、平行移動とかも物凄い滑らかに表現できたりする。
そういう機能をどんどん付けていく。


根っこが凄いシンプルだから、壁を這うとかの拡張性もある。

・・・
我ながら、そうとう凄いことしてきたような気がしてきた。


で、これをなんとかunityに移植したいところなんだけど、
これが上手く行かない。
既にできてるんだから、そのまま同じことやりゃいいだろうと思うだろうけど、そうもいかんのです。


てか、どうせやるのなら、さらにさらに拡張性のあることをやりたい。


アニマルメーカーでやってる「地面と足のめり込みの衝突判定」ですが、この段階では凄いシンプルでした。
地面が平面だったので、y=0 より下の量だけ、全身にかかる力とすればいいだけでした。

これを、実際の3Dゲームとしても使えるようにするために
かなり特殊なことをしていました。

自分が「アニマルメーカー」→「地形メーカー」でやったこととして、
地形をある種のパターンに落とし込んで、その地形上に xとzの座標を打ち込めば、そのままyが計算出来るような、
そういう関数のようなシステム
でやってたのです。
ラプトル



ここんところを、どうせunityでやるのなら、
そんな四角いブロックと、数種類の決まりきった板ポリの柱だけで構成されている背景じゃなくて、

坂の柱


もう、普通の背景のポリゴンと、足の棒のめり込み量、それを常に計算できるようにすれば、
物凄い便利だろうと考えたのです。


その辺についてはここでもちょっと書いた。 もう地形との簡易判定モデルとか考えなくていいようにしたい。


で、unityはじめました

unity 最初の歩行システム


最初期はこんなでした。


実際に足を回転させて、その「摩擦」で歩くシステムができないか考えてみました。

リジッドボディの足を回転させたときの反発や摩擦だけで歩けたら、まぁ一番自然だろうと思ったんですが、駄目でした。

全然上手くいきません。



unity 次の歩行システム

次は、足の先端に「コライダー」を付けて、
そのコライダーが地形に衝突したとき、その最後の位置との差を、全身に伝えるようなシステムをやってみました。

4足にも対応できる歩行システム

歩きだしましたね。
これを少しずつ改良していって、
まぁここまで 実際足を自由に増やしたりして、色んな形状の動物も作れそうなとこまではいったのです。

インスペクターで長さ角度管理

パブリックな変数をいじれば、リアルタイムで足の長さや角度をいじったりすところも、できてはいるのです。
こりゃアニマルメーカーです。 いいとこまでは行きました。


でもやっぱり、まだまだ駄目でした。

これ、高い壁際とか崖とかに行くと、とたんにボロが出ます。


最後の歩行システム

最後に、足の根っこから 足の先端に RAYを撃って、そのビームが地形に刺さったとき、
「根っこからその当たった位置までの距離」が 「足の長さ以下」だったとき、「地形に足がめり込んだ」ということだから、
その分の量を全身に伝える
、そういうシステムを作ってみました。


で、もうこの段階で、平行移動操作も導入できてるし、
簡易ながら、IK (膝の位置の計算)とかも始めています。
 (膝のとこにある白い球が、膝の位置)




こうやって、テキトーに配置した「球」だろうがなんだろうが、その上を、問題なく歩けるようになってます。
これが、「背景モデルを組めばそのままその上を歩いていけるシステム」に繋がる筈です。



これが一番上手くいくべきだと思ったんだけど、やはりまだまだ挙動がおかしいのです。


こうやって、上手くいってそうな動画だけgifで貼ってると、なんか着実に進んでるように見えるかもしれませんが、
実際は全くそんな気分にはなりません。


本当に、上手くいかん、なんでこんなに上手くいかんのか、という
やってられんフラストレーションまみれなのです。



まぁそんな感じで、移植が上手くいってません。

どうすればいいのだ。

が、それ以前の問題も発覚しました。


ビルドができないのです!!!

上手くいかないなりに、
そろそろ「WebGLで公開してみるテスト」のほうもやってみようかと考えたのです。


でも、なんか知らんけど、エラーでビルドができません。


「フォルダを選べ」と言われるから、選んで、ビルドしようとする。数分待ってから、なんか終わってるっぽい。
でも見に行くと、フォルダの中身は空っぽ。 「build and run」を選んでも同じく無駄。 意味が分からん。


と に か く webGLでビルドができない。 
(ローカルのexeのビルドなら出来るし、そこではちゃんと動くので、プログラム的には間違ってはなさそうなのに?)


あと自分のunityのバージョン5.6では webプレイヤーとしてのビルドもできない。(これはそもそも選択肢が存在しない)


あんまりにもビルドが上手くいかないので、
なんか調べてたら、

そういうときはunityクラウドでビルドしてもらうのがいいよ、とか書いてあるのを見かけたので、
その通りにビルドしてもらったんだけど、


今度は、そのビルドした奴、自分の思った挙動とは全然違う動きをするのです。 なんかライティングもおかしいです。

・・・
意味が分からん。 さっきも言ったけど、ローカルのexeとしてビルドは出来るし、そこではちゃんと動くのだから、
これはもう unityのwebGLのビルドがおかしいことになっとるとしか思えません。


・・・まぁそんな感じ。


2つの大問題があるのです。


・アニマルメーカーの移植が想像以上に激ムズ!

・webGLのビルドが全く上手くいかなくて試作品すら公開できそうにない



前者は、自分の能力不足です。
「自分のやりたいこと」と「自分の技術・理解度」が釣り合ってないから、こういうことになるのでしょう。
 (もう諦めて簡単な2Dのゲームでも作るか?)


後者は、自分が悪いとは思いたくない。 unity側がなんかおかしい。
そんで、前にも言ったけど、ウェブ上で公開できなきゃゲーム作る意味ね~と思ってるので、これはかなりの問題ですね。
 (こうやってgif動画ばっかり貼ってるのにしたって、自分としては不本意なんですよ)



・・・そんな調子なので、unityやるモチベ、いきなり、かなり無くなって来ました。
ここまで上手くいかないとは・・・


これはもう、ちょっと一旦諦めて、やっぱ放置してるゲーム (いい加減トロッコゲー)に戻ろうかと思いました。


そういう話です。 そういう報告でした。 

やっぱなんだかんだで unity難しいよ。 


なんかこういう、どうしたらいいのかサッパリ分からん壁にぶつかり続けるとさぁ、

誰か、unityのすべてを分かってるような神のような人に、手取り足取り全部教えて貰いたいような気分にもなってくるよ。

そういうのが勉強会なんだろね。 そういうのが出来る人を羨ましくも思うよ。

[ 2017/07/02 11:25 ] 自作ゲーム開発 | TB(0) | CM(5)
月別カレンダー
06 ≪│2017/07│≫ 08
- - - - - - 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 31 - - - - -