OUTPUT/INPUT

Last-modified: 2013-01-18 (金) 01:20:57

OUTPUT/INPUT

解説

同じエンティティを複数おく場合があるので、当然置いたエンティティには固有の名前をつけることができる。
Aエンティティは、ある状態(my output namedに設定)になったとき、Bエンティティ(targets entities namedに設定)に対して、イベント(via this inputに設定)を送ることができる。
例:ボタンエンティティ(func_button)は、ボタンが押されたとき(OnPressed)、通れないバリア(barrier_example_1)を消す(Disable)

以下は
http://tendon.s35.xrea.com/phpBB/kb.php?mode=article&k=82
からの転載です。

説明: Entity I/O

エンティティI/O(入出力)

ソースエンジンでのマッピングにおける最重要変更点の一つはエンティティI/O(入出力)です。以前のエンジンではターゲットとターゲットネームのキーフィールドに依存してエンティティに単純な刺激を送っていましたが、このエンティティI/Oシステムではエンティティ間の複雑な通信が可能になります。これはコネクションによって結ばれたエンティティのインプットとアウトプットによって行われます。このシンプルな方法によって、エンティティは状態変化に基づいてイベントを簡単にトリガーでき、そして今までに比べ他のエンティティとの協調動作がよりアトミックで論理的で強力にできるようになります。

ターゲットエンティティに関してターゲットに特殊な設定をすることも出来ます。
詳しくは以下を
https://developer.valvesoftware.com/wiki/Targetname

概要

エンティティは二つの通信手段を持っています: 他のエンティティにアウトプットを送ること、もしくは他のエンティティからインプットを受け取ることです。あるエンティティは殺されたときにアウトプットを他のエンティティのインプットに送って、その色を変えるかもしれません。同じアウトプットはまた別のエンティティのSpawnインプットをトリガーさせるのに使うこともできます。アウトプットとインプットはコネクションによって対になり、そこでは受信エンティティへの追加データ、アウトプットを受け取ってからの遅延時間、アウトプットをまた後で送ることが可能であるか、といったことがコントロールされます。

アウトプットはどんなインプットに結びつけることができ、その逆も成り立ちます。

これによってエンティティ間の複雑で協力なインタラクションが可能になるのです。

例として、logic_timerエンティティは時間の条件が満たされたときにOnTimerアウトプットを出します。このアウトプットを env_spriteのShowインプットに接続すると、タイマーが指定の時間になったときにenv_spriteが表示されるということになります。また同様にlogic_timerのOnTimerアウトプットをenv_sparkのSparkOnceに結びつけることで、雷を出すこともできます。コネクションのプロパティを変更することで、アウトプットが2秒間の遅れの後でトリガーされたり、トリガーは一度だけでもう二度と起きないようにもできます。

オリジナルのハーフライフでのエンティティ情報伝達の方に慣れているユーザに対しての情報です。targetnameとtargetフィールドは今では廃止され、エンティティI/Oシステムがその機能の上位集合になっています。自分のtargetエンティティにのみトリガーを送る trigger_multipleエンティティの代わりに、今では同じ効果を得るためにOnStartTouch, OnEndTouch, OnTouchといったアウトプットを何個でもつかうことができます。これらのアウトプットは同時に任意の個数のエンティティにそれぞれに時間遅れの設定を持たせてつなげることが可能なので、multi-managersも廃止になりました。同様に、killtargetフィールドも他のエンティティの Killインプットへの接続によって置き換えられました。

アウトプット

アウトプットはエンティティの状態が変化した時に発動するイベントです。この状態変化は、タイマーが終了時刻になったり、ボタンが押されたり、ドアが閉まったりといったものなどがあります。プログラマはエンティティの中にいくらでも様々な評価に基づいて発動するアウトプットを作ることができます。アウトプットの指定はエンティティプロパティのアウトプットタブで行えます。オブジェクトプロパティのアウトプットタブはこのエンティティから他のエンティティに接続している全てのアウトプットを表示します。

  1. トリガーされるアウトプットの名前
  2. アウトプットを受け取るエンティティの名前(エンティティをアイドロッパーツールでクリックしてその名前を貼り付けることができます)
  3. アウトプットを受け取る対象エンティティのインプットの名前
  4. 対象インプットがデータを受け入れる場合に使用できるパラメータオーバーライド。インプットファンクションが使う数字であることが多い。(下のインプットセクションを参照)
  5. アウトプットを送るときの時間遅れ(単位は秒)。10分の1秒は"0.1"秒と表現される。
  6. アウトプットの発動が一回のみであるか

・Via this inputリスト・
Activate
AddHealth
AddOutput
Alpha
AlternativeSorting
Break
ClearParent
Close
Color
direction
Disable
DisableCollision
Disabled
DisableDamageForces
DisableFloating
DisableMotion
DisablePhyscannonPickup
DisablePuntSound
DisableShadow
Enable
EnableCollision
EnableDamageForces
EnableMotion
EnablePhyscannonPickup
EnablePuntSound
EnableShadow
Explode
FadeIn
FadeOut
FadeToPattern
FireUser1~4
ForceDrop
Hurt
Ignite
IgniteHitboxFireScale
IgniteLifetime
IgniteNumHitboxFires
Kill
KillHierarchy
Lock
Open
physdamagescale
Pitch
PlaySound
Press
PressIn
PressOut
RemoveHealth
SetAngles
SetAngularVelocity
SetAnimation
SetBodyGroup
SetCheapWaterEndDistance
SetCheapWaterStartDistance
SetColor
SetDamage
SetDamageFilter
SetDefaultAnimation
SetDistance
SetExcluded
SetHealth
SetInvert
SetMass
SetParent
SetParentAttachment
SetParentAttachmentMaintainOffset
SetPattern
SetPlaybackRate
SetShadowsDisabled
SetSpeed
Skin
Sleep
StopSound
TestActivator
Toggle
ToggleEnabled
ToggleSound
TurnOff
TurnOn
Unlock
Volume
Wake

インプット

インプットはどんなタイプのアウトプットにも繋がります。ここでオブジェクトプロパティダイアログのインプットタブを見てみましょう。これはこのエンティティに接続している全てのアウトプットを表示しています。

どんなアウトプットもどんなインプットに接続することができるので、複雑なインタラクションを起こすような多数のコンビネーションを作ることができます。タイマーは特別なエンティティの助けなしに、点滅するスプライト、音、特殊効果を使ってカウントダウンを演出することができます。Markボタンをクリックするか、リスト中のエンティティをダブルクリックすることで、アウトプットを送っているエンティティに移動することができます。

コネクションが赤く表示されている場合、それは無効です。これはアウトプットが送り元のエンティティに存在しないか、インプットが送り先のエンティティにないかです。無効なコネクションは無害ですが、Check For Problemsメニューコマンドがエラーとして報告するのでマップのコンパイルより前に修正する必要があります。

デバッグ

エンティティの通信がとても複雑にそして強力になったので、問題を追跡するエンジン能力も強力になりました。インプットとアウトプットロジックの鎖が期待通りに動かない場合、以下のツールがエラーを解決する大きな助けになるでしょう。

developer

このコンソール変数の値を"2"に設定することで、エンティティがI/Oシステムを通じてどうインタラクションを行っているかの詳細なログをみることができます。これは複雑なインタラクションの中どんな一連のイベントが起こっているのかを見るのに役に立ちます。

ent_messages_draw

このコンソール変数の値を"1"に設定することでエンティティがどのように通信しているのかを視覚的に見ることができます。ent_developerの使用ともとても似ていますが、時により直感的に見ることができます。

ent_fire (エンティティ名, インプット名, インプットの値)

このコンソールコマンドを使うことでコンソールから手動でエンティティのインプットを発動することができます。リアルタイムでエンティティの設定を試すのにとても役に立ちます。"testentity"という名前のエンティティの"Open"インプットを"3"というインプットパラメータで発動させるには、以下のように入力してください: ent_fire testentity open 3

ent_pause

このコマンドはマップ内のエンティティを停止させます。もう一度入力すると、エンティティは通常の振る舞いに戻ります。このコマンドは以下に説明があるent_stepコマンドと組み合わせたときに一番効果的です。

ent_step

ent_pauseコマンドと共に使われると、このコマンドでエンティティの一連のインプット、アウトプットの実行をゆっくり進ませることができます。コマンドの後ろに値を入れることで、一度に任意の数のステップを実行ことができます。(例 "ent_step 3"は一度に3ステップを実行します)