ライトを使って、懐中電灯を作り、キャラクターに持たせてみる

Unityのシーンには最初からDirectional Lightが設置してあります(2Dでプロジェクトを作成していなければ)。
このライトは太陽と同じような効果があり全体を照らしています。

今回はこのライトの設定を少しいじってみようかと思います。
GameタブをSceneタブに切り替えるとライトがどのあたりにあり、どの方向を照らしているかがわかりやすいです。

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

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

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

ゲームをプレイしながら調整し、目的の値を探したい時などは便利です。

DirectionalLightの位置を調整する

上のようにプレイボタンを押した後でDirectional Lightのパラメータを調整します。

ライトの色を赤くしてみる

上のようにColorを変更すると赤い夕陽を表現することも出来ます。

スポンサーリンク

懐中電灯を作成する前にキャラクターの設定をする

次にSpot Lightを使い懐中電灯を作成し、「masasi」君が懐中電灯で辺りを照らせるようにしたいと思います。

その前に「masasi」君の手の位置に懐中電灯を設置しなければならないので、キャラクターの設定変更をします。

アニメーションタイプを変更する

「masasi」君本体のArmy01のプレハブを選択した状態で、インスペクタ上のRigを選択し、Animation TypeをHumanoid,Configureをクリックします。

その前にいろいろエラーが出てますが・・・、ちょっとよくわかりません・・・(ノ_<)
今のところはスルーしていきます・・・。

ボーンの設定を完了する

上のようにDoneのボタンをクリックします。

ボーンの階層が表示される

「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はあまり関係ありませんが、懐中電灯を作る時に他のゲームオブジェクトと重なって調整しづらくない位置に置きます。

懐中電灯にスポットライトを取りつけ調整する

子要素にスポットライトを配置する為、FlashLightゲームオブジェクトを選択した状態で右クリック→Light→SpotLightでライトを作ります。

懐中電灯から光が出ているようにする

上画面のようにSpotlightのパラメータを修正し、懐中電灯(筒のオブジェクト)から光を発しているように調整します。

光の強さや照らす範囲はSpotLightのインスペクタ上で変更が可能です。
Spot Angleで照らす角度(範囲)、Intensityで光源の強さを変更出来ます。
Colorで色合いを変えると特殊な懐中電灯が出来上がります。

懐中電灯の子要素にライトを設置しているので、懐中電灯の動きに合わせて光の位置も動くようになります(子要素は親要素からの相対位置になる)。

ということは、この懐中電灯を「masasi」君の手の所へ持っていけば懐中電灯は手の動きに合わせて動くようになります。
(懐中電灯は手の子要素になるので手の動きに合わせて相対的に懐中電灯も動きます)

なんかわくわくしますねぇ!(わたくしだけ?)

キャラクターの手に懐中電灯を持たせる

それでは「masasi」君の手へ懐中電灯「FlashLight」をドラッグ&ドロップして持たせ、少し傾きや位置などを調整しましょう。

インスペクタ上で数値を指定して調整する事も出来ますが、Sceneタブにして懐中電灯オブジェクトの赤、青、緑の矢印をマウスで移動させる事でも調整出来ます。
ゲームオブジェクトの移動に関しては

Unityを起動後の画面を細かく見てみる
Unityを起動後の画面とメニューを細かく見ていき、どこをどう使うかを学んでいきます。
を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

アニメーションを作成する段階で何か握っているようにしなければなりません。
また自然なアニメーションにするには懐中電灯を前に向けて歩いているようにしたいところです。
物を持たせて歩いているのであればひとつの物を持ったアニメーションを作成すれば持っている物を変更するだけでいいので、他の物を持って歩く時も同じアニメーションで代用出来ます。

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

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

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

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

コメント

  1. Lily より:

    一番上の欄で
    Configureを押したら一瞬で全て消えてしまいます

    このようなことはありますか?

    • kamekumechan より:

      一瞬ですべて消えてしまうとはどういうことですか?
      ヒエラルキーがBoneの設定に変わってしまっているのは正常です。
      Unityがクラッシュして消えると言う事でしょうか?

      ↑のような事はたまにおきますね、メモリが足らなくなってしまうのかもしれません?(謎)
      突如消えてしまう事を想定して修正等をしたら小まめにSceneやProjectの保存をしておいた方がいいですね。
      後はバックアップも取っておいた方がいいと思います。

  2. Lily より:

    ヒエラルキーが元々あったCubeなどが全て消えてしまいます
    Boneの設定にはなるのですが
    元々作ってあったものが【MainCamera】と【Directional Light】以外が全て消えてしまいます

    これは通常ですか?
    だとしたら、作ったCubeなどはどこに言ったのでしょうか?

    • この記事の4番目?ぐらいに表示されるmasasi君?のボーンが表示されている状態のヒエラルキーと同じ状態という事ですかね?
      それならば印が付いているDoneを押せば元のシーンのヒエラルキーに戻ると思うので大丈夫だと思います。

      元に戻らないというのであれば問題ありですが・・・((+_+))

  3. Lily より:

    ボーンの設定にはなるのですが
    それまでに使っていたCubeなどが全て消えてしまうんです
    Doneを押したらボーンごと消えてしまい、セーブしたとしても戻りません

    どうすればいいでしょうか
    Unityの再インストールですかね?

  4. Lily より:

    セーブしてないはずなのに
    消された後になってます…..

    ちなみにUnityのバージョンはいくつを使っていますか?

    • わたくしは5.3.5f1にアップデートした所作ったプロジェクトが開けなくなった為5.3.4f1に戻しました。
      ご自分で作成したCube等を設定した後にSceneを保存したら
      Assetsエリア
      ↑のようにAssetsエリアにSceneファイル(この画像ではabc)が出来ているはずなんですが、それをダブルクリックしても初期状態に戻っているんでしょうか?
      だとしたらわたくしにはわかりません(^_^;)
      現状のバージョンでうまく動かない場合はひとつ前のバージョンを使ってみるのもいいかもしれません。

  5. Lily より:

    インストしなおしたら
    そもそも
    Imputpackageに初期アセット(Characterなど)がありませんでした
    http://fast-uploader.com/file/7022159521013/
    なにか設定などは必要なのでしょうか
    または、べつであとから入れられるのでしょうか

    • わたくしもCustom Packageしかありませんよ。
      Unityのインストール時にStandard Asset等もインストールする設定にしておけば大丈夫なようです。

      Standard Asset等はAsset Storeからもダウンロード出来るみたいですね。

      大変申し訳ないのですが、Unity自体の動作云々の内容に関してはUnityさんに聞いた方が早いかと思います。
      わたくしも出来る限りお答えはしたいのですが、申し訳ありません((+_+))

  6. Lily より:

    まじですか!
    ありがとうございます!

    • パッケージ自体はAssetStoreでインポート出来ますが、UnityのメニューのImportPackageから
      パッケージを取り込みたい場合はWindows7なら(保存先を変えていなければ)
      C:\Program Files\Unity\Editor\Standard Assets
      フォルダ内にパッケージファイルを入れておくとImportPackageから取り込みが出来るみたいです。
      Standard Assetsフォルダがない場合はフォルダを作成しそこの中にパッケージファイルを入れると
      メニューにそのパッケージが表示されました。

      おそらくImportPackageにCharacters等がなかったのはStandard Assetsフォルダの中にパッケージファイルがなかったのだと思います。
      Unityをアップデートする時に以前使っていたバージョンで使用していたパッケージを使いたい時はパッケージをコピーしてStandard Assetsフォルダに入れるとImportPackageから
      取り込めそうです(バージョン違いで出来ないかもしれませんが・・・)。

      UnityのダウンロードページでStandard Assetsの個別ダウンロードが可能でダウンロード出来ますが、ファイル名が
      『UnityStandardAssetsSetup-Unityのバージョン.数値』
      という形式になっています。

      数値の所をexeに書き換えて実行するとStandardAssetのインストールが出来るようです。

      バージョン違いのUnityをインストールし直しでなく使用する場合はUnityのインストールフォルダ
      C:\Program Files\Unity
      であればUnityのフォルダ名を別の名前にしておくとバージョン違いのインストールで前のバージョンが上書きされる事はないみたいです。
      わたくしは5.3.5f1だとUnityの画面と動作がおかしくなりましたので、5.3.4f1と5.3.5f1を両方インストールしてます。
      5.3.5f1だと動作が出来ないのでインストールしてあるだけですが・・・・(^_^;)