Unity4.xプログラミング Tips 集(第 3 弾) - projectkyss.net(silverlight4)

Unity4.xプログラミング Tips 集(第 3 弾)
第 6 章:エフェクト実行後に女剣士が出現
今回は、エフェクト実行後に、女剣士が画面上に出現する処理を解説します。
エフェクトとは、「効果」を表す意味で、オブジェクトに、炎や雨や光などの効果を与えることを指します。
●新しいプロジェクトの作成
今回のプロジェクト名は、「EffectSample」とします。「Create」ボタンをクリックします。
すると「EffectSample」のプロジェクトの「Scene(シーン)」画面が表示されます。
この画面内でサンプルを作っていきます。
●Asset Store から必要な Asset をダウンロードする。
今回は Asset Store から「Import」する「Asset」は下記の 4 つの「Asset」です。1 つが有料「Asset」になります。
1. KY Magic Effects Free(無料)
2.Mecanim Locomotion Starter Kit(無料)
3. Sword Gir #1($5)
4.Metal Textures Pack(無料)
「Asset Store」の検索欄に「KY Magic Effects Free」と入力します。表示される画面から「Import」をクリックします(図 1)。
図 1 「Import」をクリックする
「2」の「Mecanim Locomotion Starter Kit」は、これまでに何度も使用していますので、各自が「Import」しておいてください。
次に、同じ手順で、「Sword Gir #1」を「Import」します(図 2)
図 2 「Import」をクリックする
「4」の「Metal Textures Pack」は、これまでに「Import」したことがありますので、各自が「Import」しておいてください。
これら 4 つの「Asset」を「Import」すると、「Project」内に図 3 のようなフォルダーが作成されます。
図 3 「Import」して作成されたフォルダー
●舞台を作る
まずは、「Hierarchy」の[Create]-[3D Object]ー[Plane]と選択し、「Plane」を 1 個配置します。同じく、[Light]
から「Directional Light」も追加しておきます。
次に 、「 Project」 の「 Metal tetures pack」フォルダー内に ある「 pattern 01」 ~「 pattern 42」 の中に ある、好みの
「diffuse.tga」ファイルを、「Plane」上にドラッグ&ドロップしてください。筆者は「pattern 12」フォルダー内にあるのを選択しました
(図 4)
図 4 「Plane」上に「Texture」を適用する
●3D キャラクター(SwordGirl)の配置と各種設定
図 4 の中央に、「Project」の「SwordGirl」フォルダーの「Models」フォルダーにある、「SwordGirl.FBX」ファイルをドラッグ&ドロ
ップします。
「SwordGirl」を選択して、「Inspector」内で、「SwordGirl」が動けるよう設定しますが、この設定は、今までに何度も経験して
いますので、以下に簡単に解説しておきます。
1.「Inspector」の「Animator」の「Controller」に「Locomotion」を設定します。
2.「Add Component」ボタンから[Physics]ー[Character Controller] を指定します。
3.「Character Controller」の「Center」の「Y」に「1」を指定します。
4.「Add Component」ボタンから[Scripts]ー[Locomotion Player]を指定します。
以上の設定で、「SwordGirl」は、[キーボード]の「上下左右矢印キー」で動くようになります。
図 5 のように配置してみました。
図 5 「SwordGirl」を配置した
●Effect(エフェクト)の設定
「Project」の「KY_magicEffectFree」フォルダーの、「Prefab」フォルダーに各種エフェクトを表す prefab ファイルがあります。今
回は、「energyBlast.prefab」を使用してみます。この「prefab」ファイルを、図 5 の「SwordGirl」の頭の上の方にドラッグ&ド
ロップしてください。ちょっと位置決めが難しいので、「energyBlast.prefab」の「Inspector」から「Transform」の値を表 1 に載
せておきます。同時に、「SwordGirl」の位置も載せておきます。
表 1 「SwordGirl」の「Transform」の値
Position
X=0.15
Y=-0.02
Z=0.13
Rotation
X=0
Y=0
Z=0
Scale
X=1
Y=1
Z=1
「energyBlast.prefab」の「Transform」の値
Position
X=0.004
Y=1.712
Z=0.031
Rotation
X=1.7201
Y=270
Z=90
Scale
X=1
Y=1
Z=1
「energyBlast.prefab」の「Inspector」の「Start Lifetime」に「4」を指定して下さい。「energyBlast」の効果が「4 秒」継
続することになります(図 6)。
図 6 「energyBlast」の「Start Lifetime」に「4」を指定した
●カメラの追従
「SwordGirl」の動きに合わせて、カメラを追従させます。「Hierarchy」から「Main Camera」を選択し、「Add Component」
ボタンから、[Camera-Control]-[Smooth Follow]と選択します。
「Inspector」内に「Smooth Follow(Script)」が追加されますので、「Target」に「SwordGirl」を指定して下さい。
「Distance」には「5」、「Height」には「3」を指定して、上からの目線にします。この辺りの値は、いろいろ試してみて、自分にとっ
て良い目線に合わせてください。
では、一度これで実行してみましょう。動画 1 のようになります。
動画 1
http://youtu.be/Y2Y9jt1Qy5E
ここでは、「energyBlast」の「Effect」と「SwordGirl」が同時に表示されています。これを、「energyBlast」の効果が終わった
瞬間に、「SwordGirl」が出現するコードを記述します。
ここで、Unity メニューの[File]ー[Save Scene as]から「Effect サンプル」と言う名前で保存しておきましょう。
●スクリプトの追加
スクリプトは、Unity メニューの[GameObject] -[Create Empty]と選択して、空の「GameObject」を作成して、この
中にスクリプトを持たせます。
「GameObject」の「Inspector」から「Add Component」ボタンをクリックし、[New Script]と選択して、「Name」に
「SwordGirlScript」と指定し、「Language」に「Java Script」を選択して、「Create and Add」ボタンをクリックします。
すると、「Inspector」内に「Sword Girl Script(Script)」が追加されますので、「Script」の「SwordGirlScript」をダブルク
リックして、「MonoDevelop」を起動し、リスト 1 のコードを記述します。
リスト 1 「Effect」の後、「SwordGirl」が出現するコード(SwordGirlScript.js)
private var obj1:GameObject;
function Start() {
obj1=gameObject.Find("SwordGirl");
obj1.SetActive(false);
}
function Update() {
go();
}
function go()
{
yield WaitForSeconds(4.0f);
obj1.SetActive(true);
}
GameObject 型の変数 obj1 を宣言します。
Start 関数内で、Find を使って「SwordGirl」にアクセスし、obj1 で参照します。SetActive 関数に false を指定して、
「SwordGirl」を、Effect が動作している間は非表示としておきます。
Update 関数内で、「SwordGirl」を表示させる Go 関数を実行します。
Go 関数内では以下の処理を行います。4 秒間の待ち時間の後、SetActive 関数に true を指定して、「SwordGirl」を出現さ
せます。
yield WaitForSeconds(4.0f);
と記述して、4 秒間の待ち時間を作ります。この 4 秒は、図 6 の、「energyBlast」の「Start Lifetime」設定した時間と同じで
す。
また、何故 Update 関数から、わざわざ Go 関数を呼び出している理由は、
yield WaitForSeconds(4.0f);
という記述は、Update 関数内では使用できないという仕様に則っています。Update 関数は毎フレーム呼ばれる関数なので、当
然、この中に記述することはマズいですよね。
これで、完成です。では実行してみましょう。動画 2 のようになります。
動画 2
http://youtu.be/CbJJMYjdOxM
では、ここで、Unity メニューの[File]ー[Save Scene]と選択して保存しておきましょう。
今回の章はこれで終わりです。非常に単純で簡単なコードで、「Effect」が終了した後で、「SwordGirl」を表示させることができま
した。
「KY_magicEffectFree」フォルダー内には、他にもいろいろ「Effect」が用意されていますので、いろいろ試してみてください。
例えば、「Spark.prefab」を使用すると、動画 3 のように表示されます。
動画 3
http://youtu.be/BXlwH2Yn3Dg
「prefab」ファイルを単純に「SwordGirl」上にドラッグ&ドロップするだけですので、非常に簡単です。是非試してみてください。
■コラム■
筆者は Unity を始めるまでは、Windows ストア アプリにハマっていました。現在はあまり申請して公開はされてないのですが、
現在、Windows ストアで公開されている、筆者のアプリは、約 317 本程あるのではないかと思います。興味のある方は、検索
欄に「kuniyasu」と入力してみてください。筆者の作ったアプリが一覧で表示されます。
また、Kinect や Leap Motion にもいろいろ挑戦して記事を書きました。主に ThinkIT 様のサイトで公開されています。
その他には、Excel VBA Tips 集や、Unity の記事を 2015 年 1 月現在、@IT 様で公開させていただいています。興味のあ
る方は、時折覗いてチェックして見ていただければ嬉しいです。
図 筆者の公開している Windows ストア アプリ(筆者のではないのも 2 点ほど含まれているようです)
今回の書籍は Amazon Kindle ストアの下記の URL で購入できます(500 円)。
http://www.amazon.co.jp/gp/product/B00S2C6G5G?%2AVersion%2A=1&%2Aentries%2A=0
よろしくお願いいたします。