Unityで懐中電灯を作り、キャラクターに持たせてみる

記事内に広告が含まれています。

今回はUnityのスポットライトを使って懐中電灯を作成し、キャラクターの手に持たせてみたいと思います。

その前に少しDirectional Lightについて見ていきます。

Unityのシーンには最初からDirectional Lightが設置してあります(2Dでプロジェクトを作成していなければ)。

このライトは太陽と同じような効果があり全体を照らしています。

GameタブをSceneタブに切り替えるとライトがどの辺りにあり、どの方向を照らしているかがわかりやすいです。

ライトの位置や角度を調整しどのような変化があるか試してみます。

Directional Lightの場合は位置は関係なく、角度だけが影響するみたいですね。

最初から設定をいじると元に戻せなくなるので、ゲームプレイボタンを押した後でライトを選択し、インスペクタ上から値を変更します。

ゲームプレイ中にした設定の変更はゲームプレイ中でしか反映されないので、ゲームを止めると元の設定に戻ります(変更するものによっては変更が反映されてしまうものもあります)。

ゲームをプレイしながらTransform等の値を調整すると目的の値を探したい時などに便利です。

DirectionalLightの位置を調整する

上のようにプレイボタンを押した後で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タブにして懐中電灯オブジェクトの赤、青、緑の矢印をマウスで移動させる事でも調整出来ます。
ゲームオブジェクトの移動に関しては

Unityを起動後の画面を細かく見てみる
Unityを起動後の画面とメニューを細かく見ていき、それぞれのメニューでどんなことが出来るのかを学んでいきます。

を参照してください。

キャラクターが懐中電灯を持っているように位置を調整する

「masasi」君の右手はBip001 R Handという名前になっているのでその子要素にFlashLightをドラッグ&ドロップして移動させます。

移動させたら位置や角度を調整してください。

懐中電灯を正確にキャラクターに持たせたい時は

Unityでキャラクターに正確に武器を持たせる
Unityでキャラクターの手の位置に正確に武器を持たせるように調整します。なんとなく持たせる位置を設定していた人には朗報かも!?

を参照してください。

なんとなく持っている位置が決まったら、実行ボタンを押して確認してみます。

確認する際にDirectional Lightが明るすぎると懐中電灯の明かりが分かりづらいのでDirectional LightをOffにしておきます。

では、Unityの実行ボタンを押して確認してみます。

懐中電灯を持ったキャラクターの動きを確認する

見事に手の動きに合わせて懐中電灯が動き、スポットライトの光も動いています。

これで懐中電灯を作成し、キャラクターに持たせる事が出来ました。

懐中電灯を持たせたキャラクターの問題点

しかしいくつかやらなければいけない事が残っています。

それはキャラクターの歩くアニメーションが懐中電灯を持って歩いているものじゃない事です。

アニメーションを作成する段階でキャラクターの右手が何か握っているようにしなければなりません。

また自然なアニメーションにするには懐中電灯を前に向けて歩いているようにしたいところです。

物を持たせて歩いているのであれば物を持ったアニメーションを作成すれば持っている物を変更するだけでいいので、他の物を持って歩く時も同じアニメーションで代用出来ます。

手だけを別のアニメーションにしたい場合は

Unityのレイヤー、アバターマスクを使って体の一部分を別のアニメーションにする
Unityで体の一部分だけ別のアニメーションに変更したい場合はAnimatorControllerのレイヤーとアバターマスクを使う事で実現出来ます。

を参考にしてください。

懐中電灯をキャラクターの手に持たせると、勝手に手の動きに合わせて動いてくれるのって便利ですよね。

3Dゲームを作った事がなかった頃はどうやって武器をキャラクターの動きに合わせて持たせたらいいんだろうか?とか
考えるだけで頭がパンクしそうでしたが、実際作ってみるとこんなに簡単に持たせる事が出来るんですね!

Unityの凄さを実感しました。

タイトルとURLをコピーしました