今回はUnityのスポットライトを使って懐中電灯を作成し、キャラクターの手に持たせてみたいと思います。
その前に少しDirectional Lightについて見ていきます。
Unityのシーンには最初からDirectional Lightが設置してあります(2Dでプロジェクトを作成していなければ)。
このライトは太陽と同じような効果があり全体を照らしています。
GameタブをSceneタブに切り替えるとライトがどの辺りにあり、どの方向を照らしているかがわかりやすいです。
ライトの位置や角度を調整しどのような変化があるか試してみます。
Directional Lightの場合は位置は関係なく、角度だけが影響するみたいですね。
最初から設定をいじると元に戻せなくなるので、ゲームプレイボタンを押した後でライトを選択し、インスペクタ上から値を変更します。
ゲームプレイ中にした設定の変更はゲームプレイ中でしか反映されないので、ゲームを止めると元の設定に戻ります(変更するものによっては変更が反映されてしまうものもあります)。
ゲームをプレイしながらTransform等の値を調整すると目的の値を探したい時などに便利です。
上のようにプレイボタンを押した後でDirectional Lightのパラメータを調整します。
上のようにColorを変更すると赤い夕陽を表現することも出来ます。
懐中電灯を作成する前にキャラクターの階層を見る
懐中電灯を持たせる「masasi」君の階層は下のようになっています。
Animation TypeをHumanoidにした「masasi」君の階層を見てみると、ボーン(骨)の階層が出来ており、特定の個所を指定出来ます。
なので「masasi」君の右手に懐中電灯を持たせてそこにスポットライトを設置すれば「masasi」君の動きに応じて動く懐中電灯が出来そうです。
Unityの3Dオブジェクトで自前の懐中電灯を作成する
無料で懐中電灯を探したんですが、なかったので自前で作ります。
Hierarchy上で右クリック→3D Object→Cylinder
で筒状の形を作り名前を「FlashLight」とします。
PositionのXを2、Yを0、Zを0
RotationのXを90、Yを0、Zを0
ScaleをXを0.05、Yを0.1、Zを0.05
とします。
ここで設定したPositionは懐中電灯を作る時に他のゲームオブジェクトと重なって調整しづらくない位置に設定しただけで後で「masasi」君の手の位置に移動させます。
懐中電灯にスポットライトを取りつけ調整する
懐中電灯の子要素にスポットライトを配置する為、FlashLightゲームオブジェクトを選択した状態で右クリック→Light→SpotLightでスポットライトを作ります。
上画面のようにSpotlightのTransformのパラメータを修正し、懐中電灯(筒のオブジェクト)から光を発しているように調整します。
光の強さや照らす範囲はSpotLightのインスペクタ上で変更が可能です。
Spot Angleで照らす角度(範囲)、Intensityで光源の強さを変更出来ます。
Colorで色合いを変えると特殊な懐中電灯が出来上がります。
懐中電灯の子要素にライトを設置しているので、懐中電灯の動きに合わせて光の位置も動くようになります(子要素は親要素からの相対位置になる)。
ということは、この懐中電灯を「masasi」君の手の所へ持っていけば懐中電灯は手の動きに合わせて動くようになります。
(懐中電灯は手の子要素になるので手の動きに合わせて相対的に懐中電灯も動きます)
なんかわくわくしますねぇ!(わたくしだけ?)
キャラクターの手に懐中電灯を持たせる
それでは「masasi」君の手へ懐中電灯「FlashLight」をドラッグ&ドロップして持たせ、少し傾きや位置などを調整しましょう。
インスペクタ上で数値を指定して調整する事も出来ますが、Sceneタブにして懐中電灯オブジェクトの赤、青、緑の矢印をマウスで移動させる事でも調整出来ます。
ゲームオブジェクトの移動に関しては
を参照してください。
「masasi」君の右手はBip001 R Handという名前になっているのでその子要素にFlashLightをドラッグ&ドロップして移動させます。
移動させたら位置や角度を調整してください。
懐中電灯を正確にキャラクターに持たせたい時は
を参照してください。
なんとなく持っている位置が決まったら、実行ボタンを押して確認してみます。
確認する際にDirectional Lightが明るすぎると懐中電灯の明かりが分かりづらいのでDirectional LightをOffにしておきます。
では、Unityの実行ボタンを押して確認してみます。
見事に手の動きに合わせて懐中電灯が動き、スポットライトの光も動いています。
これで懐中電灯を作成し、キャラクターに持たせる事が出来ました。
懐中電灯を持たせたキャラクターの問題点
しかしいくつかやらなければいけない事が残っています。
それはキャラクターの歩くアニメーションが懐中電灯を持って歩いているものじゃない事です。
アニメーションを作成する段階でキャラクターの右手が何か握っているようにしなければなりません。
また自然なアニメーションにするには懐中電灯を前に向けて歩いているようにしたいところです。
物を持たせて歩いているのであれば物を持ったアニメーションを作成すれば持っている物を変更するだけでいいので、他の物を持って歩く時も同じアニメーションで代用出来ます。
手だけを別のアニメーションにしたい場合は
を参考にしてください。
懐中電灯をキャラクターの手に持たせると、勝手に手の動きに合わせて動いてくれるのって便利ですよね。
3Dゲームを作った事がなかった頃はどうやって武器をキャラクターの動きに合わせて持たせたらいいんだろうか?とか
考えるだけで頭がパンクしそうでしたが、実際作ってみるとこんなに簡単に持たせる事が出来るんですね!
Unityの凄さを実感しました。