UnityとBlenderで作ったニャンターとネルギガンテを戦わせたい②  モンスターハンターワールド:アイスボーン

こんにちは、管理人のねまきです。

 

前回は待ちのアニメーションを作ってUnityで再生させることに成功した。

そこで今回は「歩く」モーションを作ってPS4コントローラで操作させてみる。

 

 

さっそく歩くモーションと作ってUnityで動かしてみた

f:id:mko0123098:20200522164349g:plain

ぬらぬら歩くニャンター

う、動いている、俺のニャンターが。。!

 

なんか違うって?気にするな。それっぽければ良い。どうせニャンター操作時はほとんど歩かないからそんなに気にならんはずだ。←

 

自分の作ったキャラが(正確にはパクリだが)、自分で作ったアニメーションで、自分のインプットで動くのは感動ものである。

 

なんか棒とか平面とか余計なものが混ざってるが後で消すから気にしないでほしい。

これはBlenderでアニメーションを作る際の位置の目安に使っていたオブジェクトをそのままUnityにインポートしたためだ。

 

 

今回のポイントは以下である。

 

Blenderでアニメーション作成

とにもかくにもアニメーションが無ければ始まらないのでダブルクロスのプレイ動画を模写して作ってみる。

f:id:mko0123098:20200522170131p:plain

Blenderでアニメーション作成画面

あらかじめダブルクロスをプレイし、歩いているニャンターを正面と横から撮影した動画を二つ用意し、それぞれBlenderの背景としてインポートして作業した。

このほうが正確にトレースできる。俺は横と正面の2つの動画をインポートした。

最初は脳内で思い出しながらやってたが似ても似つかなかった

動画を参考にしても若干違うが

これ、やってみると意外と楽しいのだ。ポーズ作るのは意外と地味な作業だが俺には合っている気がする。

 

 

②Unityへインポートしてアニメーションコントローラをアタッチ

f:id:mko0123098:20200522171209p:plain

アニメーションコントローラ

アニメーションコントローラを作り、歩きのイントロ部分と、リピート部分のステートに分けて作成。そしてそれぞれのモーションを割り当てた。

綴りが色々間違っていたり突っ込みどころ満載だが何も気にすることはない。プレイには影響が無い裏側の部分だ。

なんだかゲームプログラマになったようだ。(世のゲームプログラマさん、ごめん)

 

 

スクリプトを作成し、コントローラの左スティックで歩かせる

早速はまった。ここまで割とさくさく来てたが、遷移条件のフラグやら遷移のタイミング等の理解が浅くこれまでの作業と比べて難易度がガンと上がった。

 

だが前に進めねば。

俺のニャンターはまだ待ち状態しか取れず、ネルギガンテを発見すらしていないのだ。

とりあえずInputManagerなるものを開き、PS4コントローラを割り当てる。

 

f:id:mko0123098:20200522172009p:plain

この画面でコントローラのすべてのボタンを割り当てていく

なお、Xboxのコントローラーを使うのがUnity界隈では常識?らしいがPS4コントローラだ。何故なら俺はそれしか持ってないからだ。

 

そしてスクリプトを作成する。

要するに「これが入力されたらこう動く」のようなシステムを作るのだ。

        hori_L = Input.GetAxis("Horizontal Stick-L");
        var_L = Input.GetAxis("Vertical Stick-L");

スクリプトのアタッチなど細かいところは省くが、Horizontal Stick-L が左スティックの左右入力、Vertical Stick-L が前後入力を検知してくれる。

そして

            transform.rotation = Quaternion.Slerp(transform.rotation,
                       Quaternion.LookRotation(refCamera.hRotation * -velocity),
                       0.02f);

このように書けばスティックを倒した方向へニャンターを回転させられる。

最後に

transform.position += refCamera.hRotation * velocity;

こんな感じで書けばキャラのポジションなるものを毎フレーム毎に進めてくれるらしいのだ。細かいことは気にしなくて良い。動けば良いのだ。

 

 

そして待ちの状態の時にスティック入力があったら歩く、という状態をフラグで実現させたのがこちら↓

f:id:mko0123098:20200522175331g:plain

待ち状態からスティック入力で歩く

あ、歩いている。俺のニャンターが。。!!

あのクエスト終了までボケっと待っていることしかできなかった俺のニャンターが自分で歩いているのだ。これは大きな前進である。それにしても哀愁ただよう無味無臭ニャンターである。

 

 

今日はここまで。

読んでくれてありがとう。

次回はプロハン必須のカメラコントロール機能を実装するぞ