Unity2018.1.5f1
Windows10
□

Terrainのアセットを試した時など、少しマップを歩き回りたいという時に気軽に利用できる一人称視点で動くスクリプトを書きました。
3D ObjectのCapsuleにアタッチするだけで気軽に利用できます。
そしてついでにAnimationで剣を振る動作を作ったので紹介します。
■一人称視点で移動する
まずはCapsuleを出します。
Hierarchy > Create > 3D Object > Capsule
次に以下のスクリプトをCapsuleにアタッチします。
WASD、または上下左右キーで移動します。
左右どちらかのShiftを押すと速く移動し高くジャンプをします。
マウスでCameraの向きを変えます。

移動するだけならこれで終わりです。
ちなみにCaracterComponentはどのくらいの角度の坂を上れるようにするか、どのくらいの高さの段差・階段を上れるようにするかを設定できる便利なコンポーネントです。
■剣を振るアニメーションを作る
剣を用意する
Animationウィンドウで剣を振るアニメーションクリップを作り、Animationコンポーネントでゲーム再生中に再生します。
まずは剣を用意しますが、今回は以前の記事で使ったものをPrefab化して使用しました。
【UnityC#講座】無料アセットでユニティちゃんに剣を振らせる
先ほどはスクリプトでCameraを子オブジェクトにしていましたが、分かりやすくするために手動でCapsuleの子にし、さらにそのCameraの子にPrefabのMedieval Swardを置いてください。

位置をちょうど良いように置きましょう。


Animationウィンドウを開く
次にAnimationウィンドウを開きましょう。
Window > Animation
Animation” width=”300″ height=”235″>
これがAnimationウィンドウです。

アニメーションを作りたいオブジェクトはHierarchyから選びます。
選んだらCreateをクリックしてファイルを保存しましょう。
今回は通常時のNormalSwordと剣を振るSwingSwordの2つを作ります。
スポンサーリンク
NormalSwordを作る
赤丸を押すとTransformを動かすだけで記録されます。
そのひし形のものをキーフレームと言います。

目盛りがついている欄でTransformの値を記録する場所を決める線、再生ヘッドをドラッグできます。

今回は最初の位置から30秒かけてY軸で下がり、そして60秒目で元の位置に戻ります。

0秒と60秒のTransform。
角度は変えないのですが、キーフレームを作っておかないと角度がおかしくなるのでRotationの適当に数値を変えて記録しておいてください。

30秒のTransform。
こちらも同じようにRotationのキーフレームを作ってください。

さてアニメーションを再生してみましょう。
再生ボタンを押してください。

結果はこうなります。

ちなみにキーフレームは動かせますので楽に再生時間を詰めたり伸ばせたりできます。

最後にNormalSwordは待機状態に出るアニメーションなのでループするようにしましょう。
AssetsのNormalSwordのアイコンをクリックし、

InspectorからWrap ModeをLoopに設定します。

SwingSwordを作る
下の画像のCreate New ClipをクリックしてSwingSwordを作りましょう。

今回は大上段から振り下ろすような形にし、PositionとRotationを変更します。

0秒

10秒

20秒

それでこのようになります。

さて、Medieval SwardのAnimationコンポーネントはこのようになっているでしょうか。
なっていなければセットしてください。

UseSwordスクリプトを書く
次はMedieval Swardにアタッチするスクリプトを書きます。
今回はCapsuleColliderコンポーネントのオンオフもするのでMedieval Swardに追加していなければ追加しておいてください。
アニメーションイベントの設定
スクリプトをアタッチしてもまだ終わりではありません。
左クリックで再生されたSwingSwordが終わったらNormalSwordに戻り、CapsuleColliderのオンオフされるようにします。
再びSwingSwordのAnimationウィンドウに戻ってください。
Add Eventボタンをクリックすることでアニメーションイベントが追加されます。

最初と最後から少し手前に追加します。
一番最後にアニメーションイベントを追加したら作動しませんでした。

それらをクリックしInspectorからスクリプトの関数を設定します。
初めの方はSwingStart()。
終わりの方はSwingEnd()をセットします。

これで完成です。

お疲れ様でした。
■今回使用した無料アセット
■関連記事
【UnityC#講座】Render Textureでゲーム内にディスプレイを作る、Lens Flareで太陽を作る
【UnityC#講座】ボタン押す時間でジャンプの距離変わるようにした
スポンサーリンク