PORTAL2 テストチェンバー製作5

前回の記録はポータルデバイスの設置、インジケータライトの設置、トリガーブラシの設置についてであった。ここからリンク


今回の記録は、
  1. ライトの設置
  2. サウンドエンティティの設置
  3. フェイスプレートの設置
  4. ジェルドロッパーの設置
  5. タレットの設置
についてである。


I、ライトの設置

ライトは、光を放つエンティティである。後で説明するHDR(ハイダイナミックレンジ)にも対応している。ライトエンティティは設定により、明るさ点滅パターンHDR設定、エンティティによっては光の角度も、自由に変更できる。前に記録した光の単位で取り扱った、カンデラ量を自由に調整できるのだ。ライトエンティティを置いていないマップだとマップ全体が均一に明るくなってしまい、雰囲気を演出するのは難しかったのだが、このライトエンティティを置けば、影を作れ、よりリアルな研究所、工場の雰囲気を演出できる。また、光を上手く配置すれば、プレイヤーの視点をコントロールできることだらう。今回は、全方向に光を放つエンティティを紹介する。

-Step.1
エンティティ"light"を、ライトを設置したい場所に配置し、次の設定を行う。

Property NameValue説明
Namelight1識別するための名前
Brightness255 255 255 200説明は後ほど。
BrightnessHDR-1 -1 -1 1説明は後ほど。
BrightnessScaleHDR1HDR効果の度合いを乗数で指定。
AppearanceNormal光の点滅、ゆらぎ設定。サンプル

"Flags"タブ内のプロパティ
Flag説明
Initially darkチェックすると、ゲーム開始時にライトが消灯。スイッチといったトリガーでライトを点灯させたい時にチェックをすると良い。

"Brightness"のはじめ3つの数値は光の色の設定であり、RGB(赤、緑、青)の比率をあらわしている。"Pick color"ボタンより色を選ぶか、もしくは0~255の間の数値で指定する。この場合、値が255 255 255ですべて最高値で混ざっているので、これは白色になる。色を変更すると、3D画面のライトエンティティの色も変わる。
(下画像は255 255 255 200から255 0 0 200に設定した時)
4つ目の値は明るさである。例では200。値を大きくするほど明るくなる。


"BrightnessHDR"はHDRの設定である。HDRとはハイダイナミックレンジの略称で、カメラの絞りにあたる効果を表現できる。つまり、これを適用すると光がまぶしく見える演出をしてくれるのだ。HDRは明るさとは違ったまぶしさを演出できる。下画像を見てほしい。

HDRなし


HDRあり

このようにまばゆくなる。

設定は基本"Brightness"と同じで、はじめ3つの値が色、4つ目の値がHDRの値である。ちなみに、例(初期値も同様)-1 -1 -1 1は特殊な値で、適用しないという意味である。また、HDRを有効にする場合、コンパイルメニュー"Run Map"の"Run RAD"にある"HDR"にチェックを付ける。ここでチェックを付けないと、HDR処理がコンパイルされなくなってしまうので注意!





II、サウンドエンティティの設置

サウンドエンティティは、音楽や効果音を再生するためのエンティティである。ゲーム中には実体は見えない。ここではボタンを押した時に、一回だけ音楽を再生する方法を記録する。なお、GlaDOSやWheatleyといったAIの音声は別の方法で設置するのが良いが、ここでは紹介しない。

-Step.1
エンティティ"ambient_generic"を、音を発したい場所に設置する。
-Step.2
"ambient_generic"プロパティの設定。
Property NameValue説明
Namesound1識別するための名前
Sound Namemusic/sp_a2_pit_flings.wav音声ファイルのパス("Browse..."から参照する)。
Volume10再生音量。値は0~10まで。
Max Audible Distance800再生された音声の届く範囲。
Source Entity Name
音源にしたいエンティティ名を入力する。入力すると、このサウンドエンティティの位置に関係なく、入力されたエンティティから聞こえて来る。

サウンドブラウザ
"Autoplay Sounds"にチェックを付けると、音声ファイルを選択するたびに再生される。

"Flags"タブ内設定
Flag説明
Play everywhereチェックすると、プレイヤーがどこにいても音が聞こえるようになる。
Start Silentチェックすると、スタート時に再生しない。
Is NOT Loopedチェックすると、ループ再生しない。初期設定推奨。
-Step.3
ボタンエンティティにサウンドエンティティ宛の出力命令を追加する。ボタンエンティティのプロパティ"Outputs"タブ内"Add..."ボタンで追加する。

My Output >Target EntityTarget InputParameterDelayOnly Once
OnPressedsound1PlaySound0.00Yes

これで設置完了。ボタンを押すと音楽が再生される。




III、フェイスプレートの設置


フェイスプレートは、プレイヤーを空中に勢い良く飛ばすオブジェクト(物体)である。別名カタパルト。ゲーム中では、プレートが跳ね上がる勢いでプレイヤーが飛ばされているように見えるが、あのプレートはただの見た目上の演出である。実際に(プログラム上で)プレイヤーを上方に飛ばす効果を持っているのはトリガーである。このトリガーとプレートを重ねて配置しているので、プレートのアニメーションでプレイヤーが飛ばされているように見える。

-Step.1
エンティティ"prop_dynamic"を配置し、設定する。
Property NameValue説明
World Modelmodels/props/faith_plate.mdl
もしくは
models/props/faith_plate_128.mdl
モデルのパス。どちらでも良い。
Namecatapult_model1識別するための名前。
CollisionNot Solidソリッドとは、ゲーム中プレイヤーがぶつかる物体。NotSolidにすると、プレイヤーはこの物体をすり抜ける。
Disable ShadowsYesYesにして影を描画しない。
-Step.2
エンティティ"info_target"を配置し、設定する。フェイスプレートで飛んだプレイヤーは、このエンティティに向かって飛んでゆく。
Property NameValue説明
Namecatapult_target1識別するための名前。
-Step.3
トリガーブラシ"trigger_catapult"を作成、配置、設定する。トリガーブラシの作成方法はここを参照。テクスチャは"tools/toolstrigger"を適用する。
Property NameValue説明
Namecatapult_trigger1識別するための名前。
Launch Direction-90 0 0射出方向。-90 0 0もしくはUpで上方に射出。
Player Speed450プレイヤーが飛ぶ時のスピード。
Physics Object Speed450プレイヤー以外の物体が飛ぶ時のスピード。
Apply Angular impulseYes力積モーメントがランダムな場合は適用する。基本Yesで良いと思う。
Launch targetcatapult_target1到達位置にあたる"info_target"エンティティ名。
Use Threshold CheckNoフェイスプレートモデルにはNoを選択。
スピードと発射角は、互いに逆の値を設定すると良い。スピードが速いのなら発射角は低め(平たく)。スピードが遅いのなら発射角は高めに設定すると良い。
-Step.4
エンティティ"ambient_generic"を配置し、設定する。ただ、ソースエンティティ名を設定するので、どこに配置しても問題はない。
Property NameValue説明
Namecatapult_sound1識別するための名前。
Sound NameMetal_SeafloorCar.BulletImpact音声ファイルのパス。
Source Entity Namecatapult_model1音源にしたいエンティティの識別名を入力。

"Flags"タブ設定。
Flagチェック
Play everywhere
Start Silentチェック
Is NOT Loopedチェック
-Step.5
万一に備えてフェイスプレートの下方に、ブラシを作成する。テクスチャは"tools/toolsinvisible"を使用する(左画像参照)。このブラシがないと、オブジェクトやプレイヤーが"prop_dynamic"をすり抜けて落っこちる可能性がある。フェイスプレートのモデル、トリガー、ブラシの重ね方は、下画像のように配置するのが良い。
-Step.6
最後に、プレイヤーがトリガーに触れた瞬間に、モデルのアニメーションが始まり、同時に音が再生するようにする。そのためには、トリガーに出力命令を追加する。

"trigger_catapult"オプション"Outputs"タブ
My Output >Target EntityTarget InputParameterDelayOnly Once
OnCatapultedcatapult_model1SetAnimationfast
もしくは
straightup
0.00No
OnCatapultedcatapult_sound1PlaySound0.00No

これで設置完了。しかし実際に飛んでみると、思ったように飛ばないことがある。ここでは、飛ぶスピードが速過ぎて天井にぶつかってしまい、ターゲットの位置まで到達しない状況を考える。そんな時はゲームを起動しながらスピードを調節すればよい。次項のデバッグ方法を参考にしてほしい。
-Step.7
デバッグ方法。ゲームを起動しながらフェイスプレートの設定を変更する方法である。コンパイルウィンドウ"Run Map"の"Additional game patameters:"に次のコマンドを入力してコンパイルを開始する。
-toconsole -dev -console +sv_lan 1
このコマンドを入力すると、ゲームのポーズ画面に、開発者コンソールが表示される。そのコンソールに次のコマンドを、順番に続けて入力する。
developer 1
ent_bbox trigger_catapult
すると、フェイスプレート上に線が現れる。この線は、プレイヤー(またはオブジェクト)が飛ぶ時の軌跡を示している。
最初、画像の黄色の線のみが現れるはず。しかし、黄色の線は天井にぶつかっている。そこで、天井にぶつからないように、スピードを遅くしてみる。コンソールに次のコマンドを入力してみよう。
ent_fire catapult_trigger1 setplayerspeed 750
意味は、 ent_fire(エンティティのイベントを編集)catapult_trigger1(編集したいトリガーの識別名)setplayerspeed 750("Player Speed"の値を750に設定)。設定するとゲーム中にすぐに適用される。適用された軌跡が、画像の緑色の線である。また、setplayerspeedの部分をsetphysicspeedに変えれば、"Physics Object Speed"の値も調整できる。この方法で良い値が見つかったら、その値をHammerエディター側の設定に適用する。




IV、ジェルドロッパーの設置

ジェルドロッパーはその名の通り、特殊な効果を持ったジェルが落ちてくる土管形のオブジェクトである。ジェルには、青色のBounce(飛び跳ね効果)。オレンジ色のSpeed(加速効果)。白色のConversion(ポータル可能効果)。無色のWater(他ジェル洗い流し効果)の4種類がある。ジェルドロッパーの作成方法は2つある。1つは、既にジェルドロッパーとして機能するように作成されているファイルを読み込んで、設定する方法。もう1つは、全てを一から手作業で作成する方法である。手作業で作成するメリットは、外見をカスタマイズできることにある。ここでは、両方紹介する。


これから紹介する方法は、外部ファイルを読み込んで作成する方法である。基本的には、
この形のジェルドロッパーが作成できる。ジェルは滝のように流れ出る設定になっている。この方法なら設置は簡単だが、ジェルの種類くらいしか設定変更できない。

-Step.1
エンティティ"func_instance"を配置し、設定する。これは外部のマップファイル(VMF)を読み込んで、それを自分が編集中のマップファイルに加えることができるエンティティ。"instances/gameplay"フォルダ内に、すでに作成されたジェルドロッパーがVMFとして置いてあるので、それをこのエンティティを使って読み込む。

Property NameValue説明
Fix up Namegel_dropper名前。
VMF Filenameinstances/gameplay/paint_dropper.vmfVMFのパス。
ここで適用をする。適用してから次を入力する。
$paint_type00=Bounce, 2=Speed, 3=Conversion, 4=Water
$paint_sprayergel_sprayerジェルが流れ出るエンティティの名前。
$trigger_to_stopstopジェルを止めるための命令文。
$trigger_to_startstartジェルを流し始めるための命令文。
-Step.2
トリガーとなるエンティティを設定する。ここでは、フロアボタンが押された時にジェルを流し始め、離れた時にジェルを止めるように設定する。

My Output >Target EntityTarget InputP...DelayOnly...
OnPressedgel_dropper-startTrigger
0.00No
OnUnPressedgel_dropper-stopTrigger0.00No
この命令を入力すると、文字が赤くなりHammerがエラーとみなすが、これは無視してよい。
-Step.3
マッププロパティを開く。Map > Map Properties の順にクリックして開く。マッププロパティの"Paint in map"を"Yes"に設定する。これで、ブラシに付着したジェルが見えるようになる。

[確認事項]
ライトエンティティが無いマップだとブラシに付着したジェルが見えないので、ライトエンティティも設置しよう。またライトエンティティを配置しても、ライト処理に関係する部分、たとえば、コンパイルメニュー"Run Map"の項目の"Run RAD"を"No"に設定するとライトの処理をしなくなるので、ブラシに付着したジェルが見えなくなる。



これから紹介する方法は、一から手作業で作成する方法である。

上画像の形(モデル)や、先ほど紹介した形など、モデルを変更するだけで外見を変えられる。滝のように流し出すことも、ぽたぽた流し出すこともできる。最初の1つ目の作成は面倒なのだが、一度作成すればジェルドロッパーをグループ化してコピーするだけで、量産もカンタンに行えるので、こちらの方法をオススメしたい。ここでは、上画像の形を作成する手順を説明する。

-Step.1
エンティティ"prop_static"を3つ配置しShift + ドラッグのコピーが楽)、それぞれを次のモデルにする。
  • models/props_underground/tube_paint_interior_cap.mdl
  • models/props_underground/tube_paint_128a.mdl
  • models/props_underground/underground_paintdropper.mdl
ジェルドロッパーの外見を構成する3つのモデル


interior_cap128aの"Angles:"プロパティを"Down"に設定する。paintdropperの"Skin"の値は0~3のどれかの値に設定することでジェルの色を加えることができる。0=白色、1=無色、2=オレンジ色、3=青色を加えることができるので、ジェルの種類に合わせて"Skin"を設定するようにしよう。以上の設定が済んだら、次はこれらを組み合わせるように配置する。配置の仕方は、まずinterior_cap128aで覆うように配置し(下画像参照)、次にそれらの下にpaintdropperをつなげて配置する。

-Step.2
"info_paint_sprayer"エンティティを配置する。このエンティティはジェルの発生源なので、チューブの中に配置するinterior_cap128aは見た目は空洞になっているが当たり判定は空洞では無いので、それらの中に"info_paint_sprayer"を配置しても、見えない壁にぶつかってしまってジェルが下まで落ちてこない。なので、下画像の位置よりも上に配置しないようにしよう。
-Step.3
"info_paint_sprayer"エンティティの設定をする。

Property NameValue説明
Namegel_sprayer1識別名。
Angles:
(Pitch Yaw Roll)
Down
(90 0 0)
ジェルの放出方向。
Paint TypeBounce放出したいジェルの種類を選択。
Start Active?Noステージ開始時からジェルを流す場合はYes。
Ambient SoundHeavy Flowジェルが落ちる時の効果音。Heavy、Medium、Drip、Noneの順番に静かに(水量が少なく)なってゆく。効果音は水量に合わせて選ぶとよい。

流したいジェルの量が少量のときの設定(初期設定)
Property NameValue
Blobs per second1
Min blob speed100
Max blob speed100
Blob spread radius0
Blob streak percentage0

流したいジェルの量が大量のときの設定。
Property NameValue
Blobs per second100
Min blob speed0
Max blob speed1300
Blob spread radius32
Blob streak percentage10

に設定するのが良いと思う。
-Step.4
トリガーとなるエンティティを設定する。ここでは、フロアボタンが押された時にジェルを流し始め、離れた時にジェルを止めるように設定する。

My Output >Target EntityTarget InputPar...DelayOnly...
OnPressedgel_sprayer1Start
0.00No
OnUnPressedgel_sprayer1Stop0.00No

この設定が終わったら、先に紹介した方法同様、マッププロパティの"Paint in map"を"Yes"に設定する。ライトについての確認事項も注意しよう。




V、タレットの設置

タレットは、プレイヤーを見つけると攻撃をしてくるロボットのエンティティである。パラメータを適当に設定することで、行動制限をさせられる。具体的に、探索範囲の指定や、喋らせない、といった設定ができる。タレットと言ってもゲームPortal 2の中には、箱型や骨組み型、ジャンク型などいくつかの種類が存在するのだが、ここでは標準型のタレット(左画像のようなタレット)を紹介する。

-Step.1
エンティティ"npc_portal_turret_floor"を、タレットを設置したい場所に配置して、次の設定をする。

Property NameValue説明
Nameturret1識別名。
Turret is GaggedNoYesに設定したタレットは喋らなくなる。
Maximum Range800(要するにプレイヤー)を探索する範囲。

他にも様々なプロパティーがあるのだが、変更するとタレットがERRORになってしまう(モデルが存在しない時に起こる)プロパティや、コンパイル中にエラーが発生してしまうプロパティなどもあるので設定変更には注意が必要。



今回の記録は以上である。

次回は、キューブドロッパー、エマンシペーショングリッド、サーマルディスカレージメントビームの設置方法を記録したい。
7961149220008422267 http://www.storange.jp/2011/09/portal2-5.html http://www.storange.jp/2011/09/portal2-5.html PORTAL2 テストチェンバー製作5 2011-09-16T17:38:00+09:00 http://www.storange.jp/2011/09/portal2-5.html Hideyuki Tabata 200 200 72 72