連載
» 2015年06月24日 05時00分 公開

UnityでテクスチャにレンダリングできるRender Textureとオブジェクトに反射光を当てるGlobal Illumination、Light ProbeUnity 5で無料になった機能の使い方(4)(2/4 ページ)

[薬師寺国安,PROJECT KySS]

「Render Texture」を作成し「Cube」に適用する

 「Project」→「Create」の「Render Texture」を選択する。「New Render Texture」が作成されるので、名前を「SkeletonRenderTexture」としておく(図7)。

図7 「SkeletonRenderTexture」を作成する

 図7で作成した「SkeletonRenderTexture」を選択して、「Inspector」を表示させ、「Size」に1024×1024と指定する(図8)。デフォルトの256×256では、「Cube」に投影される画像の画質が悪くなる。そこで1024×1024と指定すると画質が向上する。ここは重要なので設定を忘れずに行ってほしい。

図8 「Size」に1024×1024を指定する

 図7で作成した、「SkeletonRenderTexture」を「Hierarchy」内の「Cube」の上にドラッグ&ドロップする(図9)。

図9 「SkeletonRenderTexture」を「Cube」の上にドラッグ&ドロップする

「Render Texture」を見せるためのカメラを追加する

 「Main Camera」以外にもう一つカメラを追加する。「Hierarchy」の「Create」→「Camera」と選択し、追加した「Camera」を選択して、「Inspector」から、「Camera」の「Target Texture」に、右横にある「○に・」のアイコンをクリックする。表示される「Select RenderTexture」の「Assets」タブから「SkeletonRenderTexture」を指定する(図10)。

図10 「SkeletonRenderTexture」を指定する

二つのカメラの位置を調整する

 「Main Camera」は正面から「Skeleton」と「Cube」をとらえるように調整する。動画1のように「トランスフォームツール」を使って調整する。これはコツをつかまないとなかなか難しいが、「Camera Preview」を見ながら調整してほしい。

動画1(筆者撮影の2倍速にしてあります)

 今度は「Camera」の位置を調整する。「Camera」は「Skeleton」を正面からとらえるように調整する。「Camera Preview」を見ながら行ってほしい。動画2になる。

動画2(筆者撮影の2倍速にしてあります)

 動画2を見ると分かるが、「Camera」の位置を調整していくと、「Cube」に「Skeleton」が映り込んでいるのが分かるだろう。この「Skeleton」が「Cube」の真ん中辺りに収まるように「Camera」の位置を調整する。

「Render Texture」に映る3Dキャラのスクリプト設定

 「Hierarchy」から「skeleton」を選択し、「Inspector」の「Animation」を見ると、「idle」が指定されている、右横の「○に・」のアイコンをクリックして、「dance」を選択する(図11)。

図11 「dance」を選択する

 このままだと、ダンスが一通り終わった後、Skeletonはダンスを止めてしまう。これでは都合が悪いので、永遠にダンスを繰り返すようにスクリプトを記述する。

 「Hierarchy」から「skeleton」を選択し、「Add Component」から「New Script」を選択する。「Name」に「SkeletonDance」と指定し、「Language」に「Java Script」を指定して、「Create and Add」ボタンをクリックする。

 「Inspector」に「Skeleton Dance」が追加されるので、「Script」の「SkeletonDance」をダブルクリックして「MonoDevelop」を起動し、リスト1のコードを記述する。

function Update () {
  GetComponent(Animation).Play("dance");
}
リスト1 永遠にダンスを踊らす処理(SkeletonDance.js)

 Update関数内に記述する。Playメソッドで「dance」のアニメーションを実行する。

 Unity 4.6では、リスト2の記述でよかったが、Unity 5からは、リスト1のような記述に変わった。

animation.Play("dance")
リスト2 永遠にダンスを踊らす処理(Unity 4.6の場合)

スポットライトと太陽と空とカメラの調整

 このままではCubeに映る画像が暗いので、画面を明るくしてみよう。

 その前に、「Plane」に「Texture」を適用させておこう。「Project」→「Assets」→「Ground textures pack」→「Dry ground」内にある「diffuse.tga」を「Plane」上にドラッグ&ドロップする(図12)。

図12 「Plane」にテクスチャを適用した

スポットライトを付ける

 では、次に「Hierarchy」の「Create」→「Light」→「Spotlight」を追加する。追加した「Spotlight」を「skeleton」の真上に持ってくる。「Inspector」の「Spot Angle」に「28」を、「Intensity」に「8」を指定する。「Spotlight」の位置は「Scene」と「Game」画面を切り替えながら設定する(図13)。

図13 Skeletonにピンポイントでスポットライトが当たるように設定

「Directional Light」の位置を調整

 次に、「Directional Light」の位置を調整する。図12を見ると「Cube」の影が手前に伸びている。ということは太陽の光は後ろから差していることになる。これだと「Cube」に映る映像が暗くなるので、太陽を「Cube」の手前から当たるように調整する。動画3のように調整する。

動画3(筆者撮影の2倍速にしてあります)

 「Directional Light(太陽)」の向きを変えると、「Cube」が明るくなっていくのが分かるだろう。

空の風景の設定とカメラの設定

 これで、Render Textureを使ったサンプルは完成だが、空の風景がさみしいので、空の風景を設定しておこう。連載第1回の「UnityでWebカメラの画像をリアルタイムで複数テクスチャとして表示する&Kinectセンサーと連動させる」を参照してほしい。

 今回はカメラが二つあるので、まずは「Main Camera」を選択しメニューの「Component」→「Rendering」→「Skybox」と選択する。すると、「Inspector」内に「Custom Skybox」の項目が追加される。「None(Material)」と書いてある場所に、「Project」の「Skyboxes」フォルダー内の、「Fixed Now」ボタンできれいにしておいた「.mat」画像をドラッグ&ドロップする。筆者は「DawnDusk Skybox.mat」を指定した。

 同様な手順を「Camera」に対しても行っておく。要は二つのカメラにSkyboxの設定をすることになるのだ。

Render Textureサンプルの実行結果

 では、実行してみよう。動画4のようになるはずだ。

動画4

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。