編集時Ver 3.9.0.0(一部alpha_test 4.3.0.11)
概要
本ページではブレッドボードの解説を行います。
ブレッドボードはACBでは入力/出力が1:1でしか行えない所を複数対複数で処理できるブロックです。
簡単に言うと内部にACB回路が組める集積回路ブロックです。
複雑な回路を1ブロックで賄えるため場所を取らないので内部構造に余裕が無い小型ビークル等に特に有用です。もちろん複雑すぎて普通にACBで制御したら混線する恐れがある物を一纏めにしてもいい。
ただし、たった一つのブロックで多くの機能を賄えるということは、それが何かしらの理由で機能停止に追い込まれた場合、賄っている全機能が一撃で全てダウンすることの裏返しでもあります。
考えなしに使うと急所を増やすことにも繋がるので、ご利用は計画的に。

使い方
まず基本操作としてデフォルトキー設定ならばShift+マウスホイールでそのカーソルがある部分を拡大移動します。
左クリックで選択した状態で任意のグリッドの十字位置に右クリックすることで一つ一つのノード(節)の移動が可能です。
接続端子部分は左クリックで選択して右クリックで出力のどの機能に対して接続するかを選択することで接続が可能になります。
消したい場合は接続端子を選択してリムーブリンクでそのリンクが外れます。
具体的な使用方法

まず大雑把な説明ですが右の欄には入力と出力(演算)が存在し、左の欄には実際にサーキットを組むためのサーキットボードが存在します。

ではためしにFirstDriveに出力を行ってみます。
- 定常値はLUAをやっている方なら知っている方が多いと思いますがDriveFunctionの最大値が1なので1%として0.01とします。
- ①Constantを配置し、0.01を入力、次にDriveを配置します。
- ②今回はFirstDrive出力を行いたいのでConstantの接続端子からDriveの一番上の入力末端に接続します。※左クリックで選択で右クリック
- ③こうすると接続が完了し、FirstDriveに対して出力が開始されます。
さあこれでわかりましたね!!
では味気ないので2秒に一回80%の出力を発生させて、50%の出力に下げてみましょう。
できましたでしょうか、分からなければもう一度上からお読みください
ノード説明
インプット
| 英名 | 名称、説明 | |
| Constant | 名称 | 定数 |
| Number(floating point) | 説明 | -100000~100000の間で小数点第二位まで設定できます |
| Number(64 bit integer) | 説明 | v3.9.0.0で追加 0~922337236854775807(922京3372兆368億5477万5807)の間の整数を設定できます |
| Text | 説明 | 文字列を設定できます |
| Vector | 説明 | v3.9.0.0で追加 3次元ベクトルのx, y, zの各値を-100000.00~100000.00の間で小数点第二位まで設定できます |
| Quaternion | 説明 | v3.9.0.0で追加 クォータニオンをオイラー角で設定できます |
| Random number | 名称 | 乱数 |
| 説明 | 約0.04秒で1つ乱数を生成します。範囲は-10000.0~10000.0までで、上下限それぞれを設定できます | |
| Altitude | 名称 | 自機高度 |
| Altitude above average sea level | 説明 | 平均海面高からの自機高度を出力 |
| Altitude above wave level | 説明 | 波の高さからの自機高度を出力 |
| Altitude above terrain | 説明 | 地面からの自機高度を出力 |
| Altitude above terrain and average sea level | 説明 | 地面からかつ平均海面高からの自機高度(標高)を出力 |
| Altitude above terrain and wave level | 説明 | 地面からかつ波の高さからの自機高度(標高)を出力 |
| Position | 名称 | 位置 |
| Universal coords | 説明 | ワールド座標 |
| Standard coords | 説明 | Unityゲームエンジン上の座標 |
| Speed | 名称 | 速度 |
| Magnitude | 説明 | 移動速度の大きさをm/sで出力します |
| World vector | 説明 | ワールド座標での移動速度をm/sで出力します |
| Local vector | 説明 | 機体の移動速度をm/sで出力します |
| Forward value | 説明 | 正面方向の移動速度をm/sで出力します |
| Stability | 名称 | 安定度 |
| 説明 | v3.5.5.0で追加 機体の安定度を0~100で出力します | |
| Orientation input | 名称 | 時機方位 |
| Roll | 説明 | 重心点のロール角度(左右の傾き)を出力 |
| Pitch | 説明 | 重心点のピッチ角度(前後の傾き)を出力 |
| Yaw | 説明 | 重心点のヨー角度(方位)を出力 |
| Rotation | 名称 | 回転 |
| Euler angle as vector | 説明 | 機体の回転角(pitch, ywa, roll)を3次元ベクトルとして出力します |
| Quaternion | 説明 | 機体の回転をクォータニオンとして出力します |
| Forward vector | 説明 | 正面方向の単位ベクトル(1, 0, 0)を出力します |
| Up vector | 説明 | 上方向の単位ベクトル(0, 1, 0)を出力します |
| Right vector | 説明 | 右方向の単位ベクトル(0, 0, -1)を出力します |
| Time | 名称 | 時間 |
| Total | 説明 | 自ビークルが出現してからの総時間を出力します |
| Delta | 説明 | FtDの1フレーム(0.025秒)を出力します |
| Timer | 説明 | 設定したTimer reset time周期ごとにON出力します。Timer reset timeは0.1~3600の間で小数第一位まで設定できます |
| Frame Number | 説明 | 物理演算のステップ数を出力します |
| Time of Day info | 名称 | 1日の時間 |
| 説明 | 何時かを出力します。%表記ですが単位は時間(h)です | |
| Propulsion | 名称 | 推進(現ドライブ値を取得) |
| Main | 説明 | 現在のMainのドライブ値を出力 |
| Secondary | 説明 | 現在のSecondaryのドライブ値を出力 |
| Tertiary | 説明 | 現在のTertiaryのドライブ値を出力 |
| Forwards\Back | 説明 | 現在の前進/後退のドライブ値を出力 |
| Strafe Righ/Left | 説明 | 現在の左側面/右側面移動のドライブ値を出力 |
| Hover Up/Down | 説明 | 現在の上面/下面移動のドライブ値を出力 |
| Roll Right/Left | 説明 | 現在の右/左ロールのドライブ値を出力 |
| Pitch Up\Down | 説明 | 現在の上/下ピッチのドライブ値を出力 |
| Yaw Right/Left | 説明 | 現在の右/左ヨーのドライブ値を出力 |
| A | 説明 | 現在のAのドライブ値を出力 |
| B | 説明 | 現在のBのドライブ値を出力 |
| C | 説明 | 現在のCのドライブ値を出力 |
| D | 説明 | 現在のDのドライブ値を出力 |
| E | 説明 | 現在のEのドライブ値を出力(※A~Eドライブってなんやねん!て方はビークルコントローラーを見てね!) |
| Complex Control | 名称 | コンプレックスコントロール |
| none | 説明 | どんな操作を受けてもON出力を出さない |
| T | 説明 | コンプレックスコントローラT入力時ON出力 |
| G | 説明 | コンプレックスコントローラG入力時ON出力 |
| Y | 説明 | コンプレックスコントローラY入力時ON出力 |
| H | 説明 | コンプレックスコントローラH入力時ON出力 |
| U | 説明 | コンプレックスコントローラU入力時ON出力 |
| J | 説明 | コンプレックスコントローラJ入力時ON出力 |
| I | 説明 | コンプレックスコントローラI入力時ON出力 |
| K | 説明 | コンプレックスコントローラK入力時ON出力 |
| O | 説明 | コンプレックスコントローラO入力時ON出力 |
| L | 説明 | コンプレックスコントローラL入力時ON出力 |
| up | 説明 | コンプレックスコントローラ↑入力時ON出力 |
| down | 説明 | コンプレックスコントローラ↓入力時ON出力 |
| left | 説明 | コンプレックスコントローラ←入力時ON出力 |
| right | 説明 | コンプレックスコントローラ→入力時ON出力 |
| Flagship info | 名称 | 旗艦ビークル情報 |
| 第一出力末端 | 説明 | 自ビークルではなく他ビークルが旗艦なのか(そうならば1を出力,なければ0を出力) |
| 第二出力末端 | 説明 | 旗艦ビークルとの自ビークル距離値を出力 |
| 第三出力末端 | 説明 | 旗艦ビークルの高度(ワールドの高度)値を出力 |
| 第四出力末端 | 説明 | 旗艦ビークルとの自ビークル相対方位を出力 |
| Custom propulsion input | 名称 | カスタム推進入力 |
| 説明 | **加筆求む!** | |
Event inputとGeneric block getterは長くなりそうなので折りたたんでおきます
Event input
| 英名 | 名称、説明 | |
| Event input | 名称 | 状態検知 |
| No event | 説明 | 未選択 |
| CRAM fire | 説明 | 発射されたCRAMの総口径を出力します |
| Missile fired | 説明 | 発射されたミサイルの数を出力します |
| APS fired | 説明 | 発射されたAPSの口径を出力します |
| Pulsed laser fired | 説明 | 発射されたQ0以外のレーザーのエネルギー量を出力します |
| Continuous laser fired | 説明 | 発射されたQ0レーザーのエネルギー量を出力します |
| Plasma cannon fired | 説明 | 発射した弾体に使われたチャージの数を出力します |
| Flamer fired | 説明 | 発射した火炎放射のパワーを出力します |
| Spawn | 説明 | vehicleが出現した際に0.1~1の間でランダムな数(以後トリガーと表記)を出力します |
| BlockLost | 説明 | vehicleが失ったブロックの数を出力します |
| Player patrol order received | 説明 | マニュアルパトロールモードに設定されたときにトリガーを出力します |
| A projectile has been noticed | 説明 | 弾体などの飛翔体を検知すると1を出力し、その後は検知した個数分加算して出力します |
| Vehicle health fraction | 説明 | 自機の体力を1~0で出力します |
| Enemy materials destroyed | 説明 | 敵の破壊されたマテリアルの量を出力します |
| Material sent | 説明 | 味方や子機に送ったマテリアルの総量を出力します |
| Material received | 説明 | 味方や親機から送られたマテリアルの総量を出力します |
| Energy sent | 説明 | 味方や子機に送ったエネルギーの総量を出力します |
| Energy received | 説明 | 味方や親機から送られたエネルギーの総量を出力します |
| Material picked up | 説明 | 拾ったマテリアルの総量を出力します |
| Target spotted | 説明 | 初めて敵を発見したときにトリガーを出力します |
| Target dead | 説明 | 発見済の敵が死んだときにトリガーを出力します |
| Primary target dead | 説明 | 優先していた敵が死んだときにトリガーを出力します |
| Missile reloaded | 説明 | ミサイルの再装填が終わったときにトリガーを出力します |
| Collision with vehicle | 説明 | vehicleと衝突したときの速度を出力します |
Generic block getter
| 英名 | 名称、説明 | |
| Generic block getter | 名称 | ブロック参照 |
| 説明 | 自機に設置してあるあらゆるブロックの情報を得られます(ブロックに設定されている値や設置されている総個数など) (項目が多すぎて書いていませんが、使えばわかります!) | |
alpha test 4.3.0.11で追加・変更されたインプット
| 英名 | 名称、説明 | |
| 追加 Friendly Vehicle (Dist.) | 名称 | 友軍機情報 |
| 説明 | 友軍機の情報を表示します。出力ノードは上から順に①友軍機の有無(0/1)、②距離(m)、③高度(m)、④速さ(m/s)、⑤位置(Vector3)、⑥速度(Vector3)、⑦方位角(度)、⑧ユニークID、⑨機体名(Text)を出力します。入力ノードに入力された数値でIndexの指定もできます。 | |
| Nearest | 説明 | 自機から見て最も近い位置にいる味方の機体の情報を出力します。 |
| Index | 説明 | 自機から何番目に近いかを表す数値で表示する友軍機を決定します。複数友軍機がいる場合はプルダウンもしくは数値バーで選択が可能です。 |
| 追加 Friendly Vehicle (ID) | 名称 | 友軍機情報 |
| 説明 | 友軍機の情報を表示します。入出力ノードともに(Dist.)と同じ仕様です。複数友軍機がいる場合はプルダウンもしくは数値バーで選択が可能です。 | |
| 追加 Vehicle Origin Position | 名称 | 機体中心位置 |
| 説明 | 自機の中心の座標を出力します。 | |
| Universal coords | 説明 | ワールド座標 |
| Standard coords | 説明 | Unityゲームエンジン上の座標 |
| 追加 Self Vehicle Info | 名称 | 自機情報 |
| 説明 | 自機の情報を表示します。出力ノードは上から順に①自機のユニークID、②位置(Vector3)、③高度(m)、④速さ(m/s)、⑤速度(Vector3)、⑥正面方向(Vector3)、⑦上方向(Vector3)、⑧右方向(Vector3)、⑨機体名(Text)を出力します。 | |
| Universal coords | 説明 | ワールド座標 |
| Standard coords | 説明 | Unityゲームエンジン上の座標 |
コンポーネント
出力系
| ノード名 | 名称、説明 | |
| Printer | 名称 | プリンタ |
| 説明 | 第一入力末端の入力値を表示する。ノードの大きさはwidth*height、表示内容は入力値。出力末端は最大で5つですべて同じ値を出力する | |
| width | 説明 | ノードの幅 |
| height | 説明 | ノードの高さ |
| Display string | 説明 | "{0}"という記載をすると、入力値をテキストの間に挟むことができる。例:入力30の時、「現在"{0}"入力中」→現在30%入力中と表示される |
| Propulsion | 名称 | 推進(ドライブ値を設定) |
| 説明 | 第一から第五入力末端の総和をドライブ値として設定する。Drive版と違うのは総和なのでノード、ボードを複数設けてもよい点( | |
| Main | 説明 | Mainのドライブ値を設定 |
| Secondary | 説明 | Secondaryのドライブ値を設定 |
| Tertiary | 説明 | 現在のTertiaryのドライブ値を設定 |
| Forwards\Back | 説明 | 現在の前進/後退のドライブ値を設定 |
| Strafe Righ/Left | 説明 | 現在の左側面/右側面移動のドライブ値を設定 |
| Hover Up/Down | 説明 | 現在の上面/下面移動のドライブ値を設定 |
| Roll Right/Left | 説明 | 現在の右/左ロールのドライブ値を設定 |
| Pitch Up\Down | 説明 | 現在の上/下ピッチのドライブ値を設定 |
| Yaw Right/Left | 説明 | 現在の右/左ヨーのドライブ値を設定 |
| A | 説明 | 現在のAのドライブ値を設定 |
| B | 説明 | 現在のBのドライブ値を設定 |
| C | 説明 | 現在のCのドライブ値を設定 |
| D | 説明 | 現在のDのドライブ値を設定 |
| E | 説明 | 現在のEのドライブ値を設定(※A~Eドライブってなんやねん!て方はビークルコントローラーを見てね!) |
| Drives | 名称 | ドライブ |
| 説明 | 第一入力末端の値をMain/Primaryのドライブ値、第二入力末端の値をSecondaryのドライブ値、第三入力末端の値をTertiaryのドライブ値を設定する。Propulsionと違うのは同時に3つ入力が一つのノードで出来るところ | |
| 第一入力末端 | 説明 | 入力値をMain/Primaryのドライブ値に設定 |
| 第二入力末端 | 説明 | 入力値をSecondaryのドライブ値に設定 |
| 第三入力末端 | 説明 | 入力値をTertiaryのドライブ値に設定 |
| Custom propulsion | 名称 | カスタム推進 |
| 説明 | coming soon... | |
| Variable Writer | 名称 | 変数読み取り |
| 説明 | 第一入力末端の値を格納し、ほかのBBやvehicleでその値を使用することができる。Variable Readerとセットで使用し、Writerで格納した値をReaderで呼び出せる | |
| Variable Name | 説明 | 数値を格納するときの名前。下のEdit variable nameを押すことで名前を編集できる |
| [variable name].1 elements @0 | 説明 | elementsの前の数字は、そのVariable Writerが選択している名前に要素がいくつあるか、@の後ろの数字はindexを表す。indexの初期値は0だが紫色の第二入力末端の値で変更できる イメージとしては、Variable nameが数値を入れる箱の名前、indexがその中の仕切りのどこを指すか |
| Clear data from [variable name] | 説明 | elementsを初期状態に戻すボタン。indexが1以上のelementsを消去する |
| Vehicle | 説明 | このVariable Writerに格納した数値をReaderで取り出せる範囲を指定できる |
| 第三出力末端 | 説明 | トリガー入力。0が入力されているときは値を更新しない |
中間演算系
| ノード名 | 名称、説明 | |
| Multiply | 名称 | 乗算 |
| 説明 | 入力値を±10.0の範囲で乗算を行う。出力末端は最大2つですべて同じ値を出力する | |
| Switch | 名称 | スイッチ |
| 説明 | 第二入力末端にON入力を受けた時、Open valueの値をThreshold秒間出力する。出力を受けていない時は第一入力末端の値を出力する。出力末端は最大5つ ※入力間隔と出力間隔を同期したい場合は設定しているThreshold秒以上の越える必要がある。 | |
| Open value | 説明 | 出力値 |
| Threshold | 説明 | 閾値(出力時間) |
| Sum | 名称 | 総和 |
| 説明 | 第一から第五入力末端からの入力値を総和し、出力する。出力末端は最大5つですべて同じ値を出力する | |
| PID Controller | 名称 | 比例、積分、微分制御 |
| 説明 | 第一入力末端に入力された入力値を第二入力末端の数値になるようPID制御する(出力値は0.00~1.00)。出力末端は最大で5つですべて同じ値を出力する | |
| Gain | 説明 | 目標値へ向かう強度 |
| Integral time | 説明 | 目標値へ向かう際の持続的なズレ補正強度 |
| Derivative time | 説明 | 目標値へ向かう際の瞬間的なズレ補正強度 |
| Clamp | 名称 | 絞り |
| 説明 | 第一入力末端に入力された入力値をMinimum valueからMaximum valueの範囲を越えないよう出力する。出力末端は最大で5つですべて同じ値を出力する | |
| Minimum value | 説明 | 最低値、これ以下の場合は設定した最低値を出力する |
| Maximum value | 説明 | 最大値、これ以上の場合は設定した最大値を出力する |
| Differencer | 名称 | 差異 |
| 説明 | 入力値の1フレームあたりの変化速度を出力する。入力・出力末端は1つのみ | |
| Logic Gate | 名称 | 論理ゲート |
| 説明 | NOTやORなどの論理回路になるブロック。入力の解釈には3種類あり、上から ①0以外 ②0より大きい ③1以上 | |
| NOT | 説明 | 論理否定。出力を反転する |
| AND | 説明 | 論理積。入力ノード両方に入力があった時に出力する |
| OR | 説明 | 論理和。入力ノード1か所以上に入力があった時に出力する |
| XOR | 説明 | 排他的論理和。入力ノードのどちらかに入力があった時のみ出力する |
| NAND | 説明 | 否定論理積。入力ノード両方に入力がない時に出力する |
| NOR | 説明 | 否定論理和。入力ノードに全く入力がない時に出力する |
| XNOR | 説明 | 否定排他的論理和。入力ノード両方の状態が一致している時に出力する |
| Max/Min | 名称 | 最大/最小 |
| 説明 | 複数の入力に対してそのうち最大もしくは最小の値のみを出力する。第一出力末端がその値、第二出力末端が何番目の入力を出力しているかを出力する | |
| Sorter | 名称 | 並び替え |
| 説明 | 複数の入力に対して値の小さい順もしくは大きい順に出力の順番を調整する | |
| Comment | 名称 | コメント |
| 説明 | **加筆求む!** | |
| Accumulator(with threshold) | 名称 | 累算器(閾値付き) |
| 説明 | **加筆求む!** | |
| Threshold | 名称 | 閾値 |
| 説明 | **加筆求む!** | |
| One shot | 名称 | ワンショット |
| 説明 | **加筆求む!** | |
| Delay Pulse | 名称 | 遅延パルス |
| 説明 | coming soon... | |
| Playback | 名称 | 音声再生 |
| 説明 | 音声ファイルを再生するコンポーネント。デフォルトで入っているMihoの音声のほか、C:\Users\[ユーザー名]\Documents\From The Depths\Sounds内に入れたファイルを認識する。0以上の数値が入力されたときに再生される | |
| ① | 説明 | 誰の音声を再生するかプルダウンから選択できる |
| ② | 説明 | 音声ファイルがまとめられているときはここから選択可能 |
| ③ | 説明 | 「#+ファイル名」で再生する音声ファイルを指定できる |
| Delay | 説明 | 入力ノードに数値が来てからどの程度遅れて再生するか設定できる。上限と下限を0~10秒の間で設定可能 |
| Audible distance | 説明 | どの範囲まで音が聞こえるか設定できる。上限と下限を1~5000mの間で設定可能 |
| Pitch | 説明 | 再生時の音声のピッチを設定できる。上限と下限を0.1~10の間で設定できる ※音程と一緒に再生速度も変わる |
| Doppler | 説明 | 音声のドップラー効果の強さを設定できる。上限と下限を0~1の間で設定できる |
| Generic block setter | 名称 | 汎用ブロック設定 |
| 説明 | 数値を設定できるアイテムに対してBBから値を設定できる。ブロックのアイテム名の後ろにある(#○)はいくつのアイテムを設定しようとしているかの数 | |
| Block name filter | 説明 | そのブロックについている名前(shift+Nで付けられる奴)でフィルターを設定できる ※名前については"完全一致"ではなく"含む"なので命名時注意! |
| 項目② | 説明 | 設定したいアイテム |
| 項目③ | 説明 | そのアイテムのどの値を設定するか |
| Maths Evaluator | 名称 | 演算評価 |
| 説明 | 最強の演算装置。第一入力末端から第五入力末端までの入力をExpession内に記述された式で演算し、その値を出力する。出力末端は最大で5つで、式が1個ならすべて同じ値を出力する 追記:ver3.9.0.0より入力末端と出力末端の個数はアルファベットと同じ26個に増加しました | |
| Expression | 説明 | ここに記述された式の演算を行う 例:a=3 b=10 c=1の時、(a*b)/c → 出力値30 複数の式をまとめる時、(a*b)/c,a+b+c → 第一出力末端の出力値30、第二出力末端の出力値14 v3.9.1.0より改行ができるようになりました |
| Icon width | 説明 | ノードの幅を5~200ピクセルの間で設定する |
| Show documentation | 説明 | ここに各演算子や入力変数名、関数などの説明がある内容については以下の通りである |
| Constants/Inputs 以下定数と入力値(オペランド) | ||
|---|---|---|
| Pi | 説明 | 円周率(3.14159265358979) |
| Right | 説明 | x方向のベクトル成分(1をセット) 例:Right*10→(10.0 0.0 0.0) |
| Up | 説明 | y方向のベクトル成分(1をセット) 例:Right*10→(0.0 10.0 0.0) |
| Forward | 説明 | z方向のベクトル成分(1をセット) 例:Right*10→(0.0 10.0 0.0) |
| a | 説明 | 第1入力末端入力値 |
| b | 説明 | 第2入力末端入力値 |
| c | 説明 | 第3入力末端入力値 |
| ︙ | ︙ | ︙ |
| z | 説明 | 第26入力末端入力値 |
| Functions 関数(※一部順不同) | ||
| (戻り値の型) (関数の形) | 訳文 | ※戻り値の型についてはnumber(数値)とvector(ベクトル)の要素はdouble型(v3.9.0.0~)、integer(整数)はlong型です |
| number Sin(number x) | 訳文 | xの正弦を数値で返します。xは度数で認識されます 例:Sin(30)→0.5, Sin(-30)→-0.5 |
| number Cos(number x) | 訳文 | xの余弦を数値で返します。xは度数で認識されます 例:Cos(60)→0.5, Cos(240)→-0.5 |
| number Tan(number x) | 訳文 | xの正接を数値で返します。xは度数で認識されます 例:Tan(45)→1 |
| number Sqrt(number x) | 訳文 | xの平方根を数値で返します 例:Sqrt(625)→25 |
| number Asin(number x) | 訳文 | xの逆正弦を度数で返します 例:Asin(1)→90 |
| number Acos(number x) | 訳文 | xの逆余弦を度数で返します 例:Acos(-1)→180 |
| number Atan(number x) | 訳文 | xの逆正接を度数で返します 例:Atan(1)→45 |
| number Atan2(number y, number x) | 訳文 | 点(x, y)に対応する角度を度数で返します 例:Atan2(√3/2, 1/2)→60 |
| number Exp(number x) | 訳文 | ネイピア数eのx乗を数値で返します 例:Exp(1)→2.71828182845905, 1/1+Exp(1)^-x→シグモイド関数σ(x) |
| number Log(number x) | 訳文 | xの自然対数を数値で返します 例:Log(Exp(1))→1 |
| number Pow(number b, number p) | 訳文 | bのp乗を数値で返します 例:Pow(5, 2)→25 |
| number Abs(number x) | 訳文 | xの絶対値を数値で返します 例:Abs(-3.14)→3.14 |
| vector Abs(vector v) | 訳文 | vの各要素の絶対値をベクトルで返します 例:Abs(-2, 0.5, -4.44)→(2, 0.5, 4.44) |
| number Sign(number x) | 訳文 | xの符号を数値(-1, 0, 1)で返します 例:Sign(123.123)→1, Sign(-456)→-1, Sign(0)→0 |
| number Round(number x) | 訳文 | xに最も近い整数を数値で返します。小数第一位の四捨五入で最も近い整数が決定します 例:Round(1.499)→1, Round(100.5)→101 |
| number Floor(number x) | 訳文 | xの小数点以下を切り捨てた値を数値で返します 例:Floor(1.499)→1, Floor(100.5)→100 |
| number Ceil(number x) | 訳文 | xの小数点以下を切り上げた値を数値で返します 例:Ceil(1.499)→2, Ceil(100.5)→101 |
| number Max(number a, number b, [number c]) | 訳文 | aとbとcのうち最も大きい数値を返します。cは無くても機能します 例:Max(3.14, 3.1415, 3.141592)→3.141592, Max(3.14, 3.1415)→3.1415 |
| number Min(number a, number b, [number c]) | 訳文 | aとbとcのうち最も小さい数値を返します。cは無くても機能します 例:Max(3.14, 3.1415, 3.141592)→3.14, Min(3.14, 3.1415)→3.14 |
| integer Max(integer a, integer b, [integer c]) | 訳文 | aとbとcのうち最も大きい整数を返します。cは無くても機能します 例:Max(5, 10, 15)→15(int), Max(5, 10)→10(int) |
| integer Min(integer a, integer b, [integer c]) | 訳文 | aとbとcのうち最も小さい整数を返します。cは無くても機能します 例:Min(5, 10, 15)→5(int), Min(5, 10)→5(int) |
| number Max(vector v) | 訳文 | vの成分のうち最大のものを返します 例:Max(a(4, 3, 4))→4 |
| AnyType If(number condition, AnyType if true, AnyType if false) | 訳文 | If構文です。If(数値に関する判定式, 正のとき、偽のとき)のように使います。入れ子にすることで複数の条件分岐が可能です 例:If(a>10,10,a)→aが10を超えたら10のまま、10以下はそのままaを出力する 例:If(a>10,10,if(a<0,0,a))→aが10を超えたら10のまま、10以下のときに0未満であれば0のまま、それ以外はそのままaを出力する |
| AnyType If(integer condition, Anytype if true, Anytype if false) | 訳文 | 上記の関数の整数バージョン |
| text String(AnyType to be a string, [text format code]) | 訳文 | v3.9.0.0で追加 C#のToString()メソッド、簡単に言えばエクセルのデータ形式と同様の働きをします。text format codeは無くても機能します。詳しくはToStringメソッドでの書式指定(Qiita)を見てね(他力本願寺) 例:String(3.14, "c")→"$3.14", String(3.14, "e")→"3.140000e+000", String(3.14, "##.##")→"3.14", String(3.14)→"3.14"(文字列で出力されることに注意!) |
| vector Vector(number x, number y, number z) | 訳文 | x~zを用いて3次元行ベクトルを返します 例:Vector(1, 2, 3)→(1, 2, 3) |
| integer Int(number x) | 訳文 | xを四捨五入して整数xとして返します 例:Int(3.14)→3(int) |
| integer Int(integer x) | 訳文 | xを整数xとして返します。よくわかりませんが安全のため追加されているとのこと 例:Int(3)→3(int) |
| integer Int(text s) | 訳文 | sを整数xとして返します。整数として返せない場合は整数0を返します 例:Int("5")→5(int), Int("3.14")→0(int), Int("abcde")→0(int) |
| number Num(integer x) | 訳文 | xを数値xとして返します 例:Num(4)→4 |
| number Num(number x) | 訳文 | xを数値xとして返します。よくわかりませんが安全のため追加されているとのこと 例:Num(4)→4 |
| number Num(text s) | 訳文 | sを数値xとして返します。数値として返せない場合は数値0を返します 例:Num("3.14")→3.14 |
| vector ToUniversal(vector standard coord) | 訳文 | v3.9.0.0で追加 Positionノードのスタンダード座標(Unityゲームエンジン上の座標)をユニバーサル座標で返します 例(第1入力末端aにPosition[Standard]をつないだ状態で):ToUniversal(a)→(対応した3次元行ベクトル) |
| vector ToStandard(vector universal coord) | 訳文 | v3.9.0.0で追加 Positionノードのユニバーサル座標をスタンダード座標(Unityゲームエンジン上の座標)で返します 例(第1入力末端aにPosition[Universal]をつないだ状態で):ToStandard(a)→(対応した3次元行ベクトル) |
| vector LocalPosToGlobalPos(vector local position, vector parent position, rotation parent rotation) | 訳文 | 自機のローカル座標系での位置をワールド座標系での位置に変換します(※1:編者未使用につき正しくない場合があります) |
| vector GlobalPosToLocalPos(vector global position, vector parent position, rotation parent rotation) | 訳文 | 自機のグローバル座標系での位置をローカル座標系での位置に変換します(※1) |
| rotation LocalRotToGlobalRot(rotation local rotation, rotation parent rotation) | 訳文 | 自機のローカル座標系での回転をグローバル座標系での回転に変換します(※1) |
| rotation GlobalRotToLocalRot(rotation global rotation, rotation parent rotation) | 訳文 | 自機のグローバル座標系での回転をローカル座標系での回転に変換します(※1) |
| vector LocalDirToGlobalDir(vector local direction, rotation parent rotation) | 訳文 | 自機のローカル座標系での方向をグローバル座標系での方向に変換します(※1) |
| vector GlobalDirToLocalDir(vector global direction, rotation parent rotation) | 訳文 | 自機のグローバル座標系での方向をローカル座標系での方向に変換します(※1) |
| rotation FromToRot(vector from, vector to) | 訳文 | 第一引数のベクトルから第二引数のベクトルへの回転をクォータニオンで返します |
| rotation FromEuler(number pitch, number yaw, number roll) | 訳文 | Pitch(x), Roll(y), Yaw(z)の角度をクォータニオンとして返します。x, y, zはOrientation inputから取得しなくても問題ありません |
| rotation FromEuler(vector angles) | 訳文 | ベクトルのx, y, z成分からなるオイラー角をクォータニオンとして返します |
| vector ToEuler(rotation angles) | 訳文 | オイラー角からx, y, zの角度を返します |
| number Angle(rotation r) | 訳文 | クォータニオンからその方向の単位ベクトルの角度を数値として返します(※1) |
| number Angle(vector v, vector w) | 訳文 | ベクトルvとベクトルwの2点間の角度を返します |
| vector Axis(rotation r) | 訳文 | クォータニオンからその方向の単位ベクトルを返します(※1) |
| vector setX(vector vector, number new x) | 訳文 | 第一引数のベクトルのx成分を第二引数で置き換えます(※1) |
| vector setY(vector vector, number new y) | 訳文 | 第一引数のベクトルのy成分を第二引数で置き換えます(※1) |
| vector setZ(vector vector, number new z) | 訳文 | 第一引数のベクトルのz成分を第二引数で置き換えます(※1) |
| vector outputV(number i) | 訳文 | i番目の出力末端における直前のフレームの出力を返します。直前の出力がベクトルでなかった場合は(0, 0, 0)を返します(※1) |
| number output(number i) | 訳文 | i番目の出力末端における直前のフレームの出力を返します。直前の出力が数値でなかった場合は0を返します 例:a,(a>output(1))+output(2)→","で出力先が変わるため、"a"がoutput(1)に格納され、"(a>output(1))+output(2)"がoutput(2)に格納されます。aが0より大きくなると直前のaであるoutput(1)を超えるためa>output(1)がtrueすなわち1となるので1+output(2)の結果がoutput(2)に入ります。これはいわゆるカウンタです(下の方で解説します) |
| Properties 属性(※一部順不同) | ||
| number (vector v).x | 訳文 | ベクトルvのx成分を返します 例(第1入力末端にベクトル(1,2,3)をつないだ状態で):a.x→1 |
| number (vector v).y | 訳文 | ベクトルvのy成分を返します 例(第1入力末端にベクトル(1,2,3)をつないだ状態で):a.y→2 |
| number (vector v).z | 訳文 | ベクトルvのz成分を返します 例(第1入力末端にベクトル(1,2,3)をつないだ状態で):a.z→3 |
| number (rotation q).x | 訳文 | v3.9.0.0で追加 クォータニオンqの第一引数を度数として返します。.xは.pitchと書いても機能します 例(第1入力末端にRotation[Quaternion]をつないだ状態で):a.x→(対応した角度), a.pitch→(a.xと同様の角度) |
| number (rotation q).y | 訳文 | v3.9.0.0で追加 クォータニオンqの第二引数を度数として返します。.yは.yawと書いても機能します 例(第1入力末端にRotation[Quaternion]をつないだ状態で):a.y→(対応した角度) |
| number (rotation q).z | 訳文 | v3.9.0.0で追加 クォータニオンqの第三引数を度数として返します。.zは.rollと書いても機能します 例(第1入力末端にRotation[Quaternion]をつないだ状態で):a.z→(対応した角度) |
| number (vector v).magnitude | 訳文 | ベクトルvの大きさを数値で返します 例(第1入力末端にベクトル(2,4,4)をつないだ状態で):a.magnitude→6 |
| number (vector v).sqrMagnitude | 訳文 | ベクトルvの大きさの2乗を数値で返します 例(第1入力末端にベクトル(2,4,4)をつないだ状態で):a.sqrMagnitude→36 |
| rotation (rotation r).inverse | 訳文 | クォータニオンrの共役クォーニタオンr̅(回転はそのままにxyz軸がすべて反転)を返します 例:(第1入力末端にRotation(0°,356°, 0 ゚ )をつないだ状態で):a.inverse→(0°,4°, 0 ゚ ) |
| Operators 演算子(※一部順不同) | ||
| number (number x) + (number y) | 訳文 | x + y 例:1 + 2→3 |
| integer (integer x) + (integer y) | 訳文 | x + y 例:1(int) + 2(int)→3(int) |
| number (integer x) + (number y) | 訳文 | x + y。整数と数値が逆でも数値が返ってきます 例:1(int) + 2→3, 1 + 2(int)→3 |
| text (text x) + (text y) | 訳文 | v3.8.2.0で追加 x + y 例:"Advanced" + "Cannon"→"AdvancedCannon" |
| vector (vector v) + (vector w) | 訳文 | v + w 例:(1, 2, 3) + (4, 5, 6)→(5, 7, 9) |
| number (number x) - (number y) | 訳文 | x - y 例:1 - 2→-1 |
| integer (integer x) - (integer y) | 訳文 | x - y 例:1(int) - 2(int)→-1(int) |
| number (integer x) - (number y) | 訳文 | x - y。整数と数値が逆でも数値が返ってきます 例:1(int) - 2→-1, 1 - 2(int)→-1 |
| text (text x) - (text y) | 訳文 | x - y。文字列yが1字のときは、文字列xに含まれるすべての文字列yが取り除かれます 例:"AdvancedCannon" - "Cannon"→"Advanced", "aabbabab"-"b"→"aaaa", "aabbabab"-"bb"→"aaabab" |
| vector (vector v) - (vector w) | 訳文 | v - w 例:(1, 2, 3) - (4, 5, 6)→(-3, -3, -3) |
| vector (vector v) x (vector w) | 訳文 | v x w。ベクトル積です 例:Forward(0, 0, 1) - Up(0, 1, 0)→(-1, 0, 0) (※Unityでは左手系のため通常とはベクトルの向きが異なること、Z軸が正面であることに注意しましょう) |
| number (number x) * (number y) | 訳文 | x * y 例:2 * 3→6 |
| integer (integer x) * (integer y) | 訳文 | x * y 例:2(int) * 3(int)→6(int) |
| number (integer x) * (number y) | 訳文 | x * y。整数と数値が逆でも数値が返ってきます 例:2(int) * 3→3, 2 * 3(int)→6 |
| number (vector v) * (vector w) | 訳文 | v * w。スカラー積です 例:(1, 2, 3) * (4, 5, 6)→32 |
| vector (rotation r) * (vector v) | 訳文 | ベクトルvをクォータニオンrだけ回して得られるベクトルを返します |
| vector (number x) * (vector v) | 訳文 | ベクトルvをx倍したベクトルを返します。数値とベクトルが逆でもベクトルが返ってきます 例:2*(1, 2, 3)→(2, 4, 6) |
| vector (integer x) * (vector v) | 訳文 | ベクトルvをx倍したベクトルを返します 整数とベクトルが逆でもベクトルが返ってきます 例:2(int)*(1, 2, 3)→(2, 4, 6) |
| rotation (rotation r) * (rotation s) | 訳文 | クォータニオンrにクォータニオンsの回転を上乗せします |
| number (number x) / (number y) | 説明 | x / y 例:13125 / 10000→1.3125 |
| number (integer x) / (integer y) | 説明 | x / y 例:13125(int) / 10000(int)→1.3125 |
| number (number x) / (integer y) | 説明 | x / y。整数と数値が逆でも数値が返ってきます 例:13125 / 10000(int)→1.3125 |
| vector (vector v) / (number x) | 訳文 | ベクトルvをxで除したベクトルを返します 例:(1, 2, 3) / 5→(0.2, 0.4, 0.6) |
| vector (vector v) / (integer x) | 訳文 | ベクトルvをxで除したベクトルを返します 例:(1, 2, 3) / 5(int)→(0.2, 0.4, 0.6) |
| vector (vector v) / (rotation r) | 訳文 | ベクトルvをクォータニオンrだけ逆に回して得られるベクトルを返します |
| number (number x) % (number y) | 説明 | xをyで割ったときの余りの数値を返します 例:5 % 2→1 |
| integer (integer x) % (integer y) | 説明 | xをyで割ったときの余りの整数を返します 例:5(int) % 2(int)→1(int) |
| number (number x) ^ (number y) | 説明 | xをy乗した数値を返します 例:5 ^ 2→25 |
| number (integer x) ^ (integer y) | 説明 | xをy乗した数値を返します 例:5(int) ^ 2(int)→25 |
| number (vector v) ^ (number x) | 説明 | ベクトルvの大きさのx乗を数値で返します 例(第1入力末端にベクトル(2,4,4)をつないだ状態で):a ^ 3→216 |
| number (T x) = (T y) | 説明 | 同一の型x, yに対し両者が等しければ数値1を、等しくなければ数値0を返します 例:3 = 3→1, 3(int) = 3(int)→1, "3(int)" = "3(int)"→1 |
| number (T x) != (T y) | 説明 | 同一の型x, yに対し両者が等しくなければ数値1を、等しければ数値0を返します 例:3 != 3→0, "a" != "b"→1 |
| number (number x) > (number y) | 説明 | xがyより大きいなら数値1を、以下なら数値0を返します 例:1 > 1→0 |
| number (integer x) > (integer y) | 説明 | xがyより大きいなら数値1を、以下なら数値0を返します 例:1(int) > 1(int)→0 |
| number (number x) >= (number y) | 説明 | xがy以上なら数値1を、未満なら数値0を返します 例:1 >= 1→1 |
| number (integer x) >= (integer y) | 説明 | xがy以上なら数値1を、未満なら数値0を返します 例:1(int) >= 1(int)→1 |
| number (number x) < (number y) | 説明 | xがy未満なら数値1を、以上なら数値0を返します 例:1 < 1→0 |
| number (integer x) < (integer y) | 説明 | xがy未満なら数値1を、以上なら数値0を返します 例:1(int) < 1(int)→0 |
| number (number x) <= (number y) | 説明 | xがy以下なら数値1を、より大きいなら数値0を返します 例:1 <= 1→1 |
| number (integer x) <= (integer y) | 説明 | xがy以下なら数値1を、より大きいなら数値0を返します 例:1(int) <= 1(int)→1 |
| number (number x) & (number y) | 説明 | xとyが共に≠0なら数値1を、どちらかが=0なら数値0を返します 例:1 & -1→1, 0 & 2→0 |
| number (integer x) & (integer y) | 説明 | xとyが共に≠0なら数値1を、どちらかが=0なら数値0を返します 例:1(int) & -1(int)→1, 0(int) & 2(int)→0 |
| number (number x) and (number y) | 説明 | x=0なら数値xを、x≠0で数値yを返します 例:0 and 5→0, -1 and 5→5 |
| integer (integer x) and (integer y) | 説明 | x=0なら数値xを、x≠0で整数yを返します 例:0(int) and 5(int)→0(int), -1(int) and 5(int)→5(int) |
| number (number x) | (number y) | 説明 | x, yのどちらかが≠0なら数値1を、共に0なら数値0を返します 例:0 | 5→1, 0 | 0→0 |
| number (integer x) | (integer y) | 説明 | x, yのどちらかが≠0なら数値1を、共に0なら数値0を返します 例:0(int) | 5(int)→1, 0(int) | 0(int)→0 |
| number (number x) or (number y) | 説明 | x=0なら数値yを、x≠0で数値xを返します 例:0 or 5→t, -1 or 5→-1 |
| integer (integer x) or (integer y) | 説明 | x=0なら整数yを、x≠0で整数xを返します 例:0(int) or 5(int)→5(int), -1(int) or 5(int)→-1(int) |
| number -(number x) | 説明 | xに-1掛けたものを数値で返します |
| integer -(integer x) | 説明 | xに-1掛けたものを整数で返します |
| vector -(vector v) | 説明 | ベクトルvの逆ベクトルを返します |
| number +(number x) | 説明 | xを返します |
| integer +(integer x) | 説明 | xを返します |
| vector +(vector v) | 説明 | ベクトルvを返します |
| number !(number x) | 説明 | x=0なら1を、≠0で数値0を返します |
| integer !(integer x) | 説明 | x=0なら1を、≠0で整数0を返します |
| AnyType (number condition)?(AnyType if true):(AnyType if false) | 訳文 | conditionに0以外の数値が入ったとき、if true部分を、それ以外はif false部分の計算結果を返します。if(a=0,if false,if true)もしくはif(a!=0,if true,if false)で同様の出力を得られます 例:a?1:-1→a=0のとき-1、a≠0のとき1を返します。 |
| AnyType (integer condition)?(AnyType if true):(AnyType if false) | 訳文 | 上記の演算子の整数バージョン |
alpha test 4.3.0.11で追加・変更されたコンポーネント
| 英名 | 名称、説明 | |
| 追加 Anchor | 名称 | ピン留め |
| 説明 | BBの作業面において、設置した場所にTabキーを押下して即座に移動できる。設置した順に視点が切り替わる。右側のEditorの一番下のプルダウンから選択して移動することもできる | |
| 追加 Quaternion Splitter | 名称 | クォータニオン→オイラー変換 |
| 説明 | クォータニオンをオイラー角(pitch, yaw, roll)の3つに分割し、それぞれアウトプットノードに出力する | |
| 追加 Vector3 Splitter | 名称 | ベクトル分解 |
| 説明 | 3次元ベクトルを各成分(x, y, z)に分解し、それぞれアウトプットノードに出力する | |
| 追加 Vector3 Combiner | 名称 | ベクトル合成 |
| 説明 | 各成分(x, y, z)に相当するインプットノードの値から3次元ベクトルを出力する | |
| 追加 Vector Magnitude | 名称 | ベクトル長 |
| 説明 | ベクトルの長さを出力する | |
| 追加 Distance 2D | 名称 | 2点間距離 |
| 説明 | 2点間の座標からXZ平面座標での距離を出力する | |
AI Breadboardにのみあるノード
インプット
| ノード名 | 名称、説明 | |
| Primary target info | 英名 | 現照準中情報 |
| 説明 | 今ターゲットにしている敵と自ビークルとの情報 | |
| 第一出力末端 | 説明 | 目標が存在すれば1、なければ0を出力 |
| 第二出力末端 | 説明 | 目標との距離(m)を出力、なければ0を出力 |
| 第三出力末端 | 説明 | 目標の高度(m)を出力、なければ0を出力 |
| 第四出力末端 | 説明 | 自ビークルから見た目標の方位角度を出力 |
| Steering point info | 英名 | 操舵点情報 |
| 説明 | AIがvehicleの操作を始める点の情報 | |
| 第一出力末端 | 説明 | 操舵点が存在していれば1、なければ0を出力(マニューバ設定の有無) |
| 第二出力末端 | 説明 | 操舵を開始する目標との距離(m)を出力 |
| 第三出力末端 | 説明 | 操舵を開始する目標の高度を出力 |
| 第四出力末端 | 説明 | 操舵を開始する自ビークルから見た目標の方位角度を出力 |
コンポーネント
中間演算系
| ノード名 | 名称、説明 | |
| Behaviour selector | 英名 | ビヘイビア選択 |
| 説明 | 現在AIに設定されているビヘイビアを選択する。0以外を入力で指定したビヘイビアを稼働(ビヘイビアの追加/削除後は再度ノードを張り付ける必要がある。やらないとnoneかmissingに)。稼働中は1を出力、停止中は0を出力する | |
| Manoeuvre selector | 英名 | マニューバ選択 |
| 説明 | 現在AIに設定されているマニューバを選択する。0以外を入力で指定したマニューバを稼働(マニューバの追加/削除後は再度ノードを張り付ける必要がある。やらないとnoneかmissingに)。稼働中は1を出力、停止中は0を出力する | |
実用例
output関数は数を覚えておける関数です。
ちょっと前のことが分かると言ったほうがいいかもしれません。"メモリ"として使うには一工夫必要です。
〇書き方とはたらき
このように書きます。
| output(1) |
1式目にaを出力し、2式目の出力を見ます。
また|1+1,1-1|のようにカンマで式を区切ることで一つのノードで複数の式を共存させることが出来ます。
出口を式の数だけ増やすと、例の式なら一番目から2が、二番目から0が出力されます。
output(ア)のアは参照する出口を指定するものです。
1を入力
File not found: "1.gif" at page "Bread Boad"[添付]
出力は1でした。
入力する数が1,2,3…と増えていくとどうでしょうか。
File not found: "1234.gif" at page "Bread Boad"[添付]
一時停止で注意して見ると、出力が入力より一拍遅れています。
output関数は"出力の一瞬過去"の数字を出力しているのです。ですから、始めに1を入力した時も0が1に変わるのに一拍の遅れがありました。
具体的に一瞬とは、デルタタイムという時間の最小単位で約0.02秒程です。
〇メモリにするための一工夫
記憶が一瞬では困るので、覚えていられるよう工夫してみましょう。
以下は作例です。
出口が複数あるものは最後の出口が目的の出力です
- 覚えたり忘れたりを制御するために入力b増やしました。
普段はaをそのまま出力、b入力でその時点のaを保持します。
b?output(1):a 普段はaをそのまま出力、b入力でその時点のaを保持します。 入力 入力の説明 数式 出力 出力の説明 a 保持したい数 b?output(1):a output(1) a⇔aを保持 b 保持と忘却(0か否か) 普段は0を出力、b入力でその時点のaを保持します。bが0になると0に戻ります。 入力 入力の説明 数式 出力 出力の説明 a 保持したい数 b?output(1):a,b?output(1):0 output(1) a(内部利用) b 保持と忘却(0か否か) output(2) 0⇔aを保持 最初は0を出力、b入力でその時点のaを保持します。0経てbを再び入力すると、その時点のaに更新します。 入力 入力の説明 数式 出力 出力の説明 a 保持したい数 b?output(1):a,b?output(1):output(2) output(1) a(内部利用) b 保持と忘却(0か否か) output(2) 0⇒aを保持⇒保持内容を更新 - 入力cを増やして"覚える"と"忘れる"を分けました。
最初は0を出力、b入力でその時点のaを保持します。c入力で0に戻ります。(b優先) 入力 入力の説明 数式 出力 出力の説明 a 保持したい数 b?output(1):a,b?output(1):output(2)*!c output(1) a(内部利用) b 保持(0か否か) output(2) 0⇔a c 忘却(0か否か) 最初は0を出力、b入力でその時点のaを保持します。c入力で0に戻ります。(c優先) 入力 入力の説明 数式 出力 出力の説明 a 保持したい数 b?output(1):a,b?output(1)*!c:output(2) output(1) a(内部利用) b 保持(0か否か) output(2) 0⇔a c 忘却(0か否か) ↑の異式。(c優先) 入力 入力の説明 数式 出力 出力の説明 a 保持したい数 b?output(1):a,c?0:b?output(1):output(2) output(1) a(内部利用) b 保持(0か否か) output(2) 0⇔a c 忘却(0か否か) - 入力は増やさず数の状態を条件にしました。
aが0になると、aが0でなくなるまで0になる前のaを保持します。 入力 入力の説明 数式 出力 出力の説明 a 0以外の保持したい数
0で保持a+!a*output(1) output(1) a⇔aを保持 普段は0を出力、aが0になると0になる前のaを保持します。 入力 入力の説明 数式 出力 出力の説明 a 0以外の保持したい数
0で保持a,!a*(output(1)+output(2)) output(1) a(内部利用) output(2) 0⇔aを保持 aが変化すると変化前のaを次の変化まで保持します。 入力 入力の説明 数式 出力 出力の説明 a 保持したい数
数の変化で保持a,!(a=output(1))*output(1)+(a=output(1))*output(2) output(1) a(内部利用) output(2) 0⇒aを保持⇒保持内容を更新 aが前回より大きければ更新します。 入力 入力の説明 数式 出力 出力の説明 a 保持したい数
保持内容を上回ると更新a>output(1)?a:output(1) output(1) 0⇒aを保持⇒保持内容を更新 aが前回より大きければ更新します。b入力で0に戻ります。 入力 入力の説明 数式 出力 出力の説明 a 保持したい数
前回を超えると更新a>output(1)?a:output(1)*!b output(1) 0⇒aを保持⇒保持内容を更新 b 忘却(0か否か)
〇メモリを応用してタイマーを作ろう
何秒から数え始めたかをメモリで覚えておけばタイマーが作れそうです。
以下は作例です。
出口が複数あるものは最後の出口が目的の出力です
| a入力からc秒間1を出力。 | ||||
|---|---|---|---|---|
| 入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
| a | タイマー開始(0か否か) | a?b+c:output(1),output(1)>b | output(1) | 保持開始タイムに任意の秒数を足したもの(内部利用) |
| b | Total(Timeのタブにあります) | output(2) | 0⇒1(C秒間)⇒0 | |
| c | 任意の秒数 | |||
| a入力からc秒後に一瞬1を出力。 | ||||
| 入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
| a | タイマー開始(0か否か) | a?b+c:output(1),output(1)=b | output(1) | 保持開始タイムに任意の秒数を足したもの(内部利用) |
| b | Total(Timeのタブにあります) | output(2) | 0(C秒間)⇒1(一瞬)⇒0 | |
| c | 任意の秒数 | |||
| 普段は1を出力、a入力からc秒間だけ0を出力。 | ||||
| 入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
| a | タイマー開始(0か否か) | a?b+c:output(1),output(1)<b | output(1) | 保持開始タイムに任意の秒数を足したもの(内部利用) |
| b | Total(Timeのタブにあります) | output(2) | 1⇒0(C秒間)⇒1 | |
| c | 任意の秒数 | |||
〇ラッチを作ってみよう
スイッチを押している間だけしか部屋の明かりが点かなかったら大変不便ですね。a=1といった条件分岐だけではそんなスイッチになってしまいます。
ここまでは数字を覚える"メモリ"でしたが、次はONかOFFかだけのスイッチ、"ラッチ"です。
条件を満たしたことを覚えていられるよう工夫してみましょう。
以下は作例です。
出口が複数あるものは最後の出口が目的の出力です
| a入力でON、aが0になってもONを保持します。bが入力でOFFにします。(OFF優先) | ||||
|---|---|---|---|---|
| 入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
| a | ON(0か否か) | (a+output(1))*!b>0 | output(1) | 0⇔1 |
| b | OFF(0か否か) | |||
| ON優先 | ||||
| 入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
| a | ON(0か否か) | (a+!b*output(1))>0 | output(1) | 0⇔1 |
| b | OFF(0か否か) | |||
| OFF優先 | ||||
| 入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
| a | ON(0か否か) | b?0:a?1:output(1) | output(1) | 0⇔1 |
| b | OFF(0か否か) | |||
| ON優先 | ||||
| 入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
| a | ON(0か否か) | a?1:b?0:output(1) | output(1) | 0⇔1 |
| b | OFF(0か否か) | |||
| OFF優先 | ||||
| 入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
| a | ON(0か否か) | b?0:a|output(1) | output(1) | 0⇔1 |
| b | OFF(0か否か) | |||
| ON優先 | ||||
| 入力 | 入力の説明 | 数式 | 出力 | 出力の説明 |
| a | ON(0か否か) | a?1:output(1)*!b | output(1) | 0⇔1 |
| b | OFF(0か否か) | |||
メモリに似た機能ですが変化する数を保持せず済むのでメモリより短く書けます。
ONかOFFだけ保持するので、可否を0と1で表すタイプの演算子と相性が良いです。
ONは0でなければいいというのも楽チンです。
〇カウンタを作ろう。
output(1)+1と書くとどうなるのでしょうか。
鳥を数えるカチカチ、カウンタを作ってみましょう。
| output(1)+1 |
前回の出力に1を足して出力すると書いてあるので、どんどん数が増えていきます。
これを一瞬だけ作動させて1づつ足そうと思います。
以下が作例です。
出口が複数あるものは最後の出口が目的の出力です
- まず一瞬だけ作動する式を考えます。
a入力で一瞬だけ1を出力します 入力 入力の説明 数式 出力 出力の説明 a 作動(0か否か) !a,a?output(1):0 output(1) aが0の間は1を出力します(内部利用) output(2) 0⇒1(一瞬)⇒0 ↑の異式 入力 入力の説明 数式 出力 出力の説明 a 作動(0⇔1) a,a>output(1) output(1) aを出力します(内部利用) output(2) 0⇒1(一瞬)⇒0 - 次に入力中は数が増加し、入力が無いときは数を保持する式を考えます。
a入力で出力がデルタタイムごとに+1し、a入力が0のときは現在の数を保持します。 入力 入力の説明 数式 出力 出力の説明 a 開始(0か否か) a?output(1)+1:output(1) output(1) 0,1,2,3… a入力で出力がデルタタイムごとに+1し、a入力が0のときは現在の数を保持します。b入力で0に戻ります。 入力 入力の説明 数式 出力 出力の説明 a 開始(0か否か) b?0:a?output(1)+1:output(1) output(1) 0⇔0,1,2,3… b 忘却(0か否か) - 二つの式を繋ぐとカウンターになります。
a,a>output(1) _output(2)を接続_ a?output(1)+1:output(1) - 式を一つにまとめました。
aが0から1に変わる度に+1します。 入力 入力の説明 数式 出力 出力の説明 a カウントする信号(0⇔1) a,(a>output(1))+output(2) output(1) aを出力(内部利用) output(2) 0,1,2,3… aが0から1に変わる度に+1します。b入力で0に戻ります。 入力 入力の説明 数式 出力 出力の説明 a カウントする信号(0⇔1) a,b?0:(a>output(1))+output(2) output(1) aを出力(内部利用) b 忘却(0か否か) output(2) 0⇔0,1,2,3… aが0から1に変わる度に+1します。上限bに達すると0に戻ります。 入力 入力の説明 数式 出力 出力の説明 a カウントする信号(0⇔1) a,b=output(2)?0:(a>output(1))+output(2) output(1) aを出力(内部利用) b カウントの上限 output(2) 0⇒0,1,2,3…b⇒0 aが変動する度に+1します。b入力で0に戻ります。 入力 入力の説明 数式 出力 出力の説明 a カウントする信号 a,b?0:!(a=output(1))+output(2) output(1) aを出力(内部利用) b 忘却(0か否か) output(2) 0⇔0,1,2,3…
〇自機と敵機の高度を比較し、PIDへ出力。
コメント
- 乙です!わかりやすい素敵! -- EMR? 2019-10-14 (月) 17:08:25
- DrivesとPropulsionに補足ですが、複数入力があった場合に前者は値を上書き(或は動作不良?)、後者は値を加算します。 -- EMR? 2019-10-14 (月) 17:17:35
- Maths Evaluatorの出力末端は複数の式をカンマで区切って書き、式の数だけ末端を増やしてあげると前から順に出力されます。 -- EMR? 2019-10-14 (月) 17:23:53
- "a+b,b+c"で1番目の末端からa+b、2番目からはb+cの結果が出力されます。 -- EMR? 2019-10-14 (月) 17:39:00
- 関連して、number output(x)はどの末端から前回出力した値を出力するかを(x)に数字で書いて指定できます。 -- EMR? 2019-10-14 (月) 17:35:00
- なので"a+b,b+c,output(2)"と書けば末端からは、1番a+b、2番b+c、3番1フレーム前までのb+cを出力となるそうで。 -- EMR? 2019-10-14 (月) 17:51:53
- あじゃじゃいますうう! -- うぃれ? 2019-10-17 (木) 20:28:56
- 編集できれば追加オナシャス!!( -- うぃべ? 2019-10-17 (木) 20:29:55
- 編集経験と整った作文りょくがないのれす!!やるだけやってみます -- EMR? 2019-10-19 (土) 01:28:20
- Propulsion、Maths EvaluatorとExpression、number output(x)の箇所に追加しました。やって実感、wikiを編集なさる方の尊さ…! -- EMR? 2019-10-19 (土) 03:38:18
- アジャイマアアス!!さぁ仲間入りを( -- うぃべ? 2019-10-20 (日) 12:51:16
- 調査ありがとうございます。参考例貼ってみました。もっときれいにしたいですが、ひとまず実例とか見れたら楽な人もいるかなと思って。もしかしたらツールで作成したほうよいのかもしれないですね。 -- 2019-10-21 (月) 23:55:13
- 具体的な使用方法に移動させときますねー -- 2019-12-15 (日) 20:57:30
- 編集できれば追加オナシャス!!( -- うぃべ? 2019-10-17 (木) 20:29:55
- output関数についての解説を作ってみました。 -- EMR? 2019-12-31 (火) 04:10:55
- 「便利なoutput関数」の作例にrubyさん作テンプレートを改変して適用しました。-- EMR? 2020-01-01 (水) 23:49:56
- 式の誤りを修正しました。 -- EMR? 2020-01-01 (水) 23:52:40
- 目次から飛べるように展開内の題だけ外に出しました。 -- EMR? 2020-01-01 (水) 23:54:15
- 船底の左右にスクリューを取り付け、左舷側をroll_rightにし、右舷側をroll_leftに設定した場合、通常のPIDブロックでは問題なくroll角の制御が出来るのですが、bread_boadのPID機能を使用する場合、左舷と右舷のスクリューの設定を逆にしないと上手くいきません。バグなのでしょうか? -- 2020-01-03 (金) 22:27:51
- たしかブレボではロールの扱いが逆だったと思います。 -- EMR? 2020-01-11 (土) 13:51:29
- v2.6.1でノード制限が140から990になったため該当記述を修正。 -- EMR? 2020-06-24 (水) 20:12:01
- 一部スタイルが崩れていたのと誤字脱字の修正、可読性が悪くなっていた部分を修正しました -- うぃべ? 2020-06-29 (月) 02:18:14
- switch使って「普段はゼロでGキーが入力されたらn秒間1を出力するよ」というのを作りたいんですが、第二にゼロ入力してるはずなのに何故か1がずっと出力されっぱなしになってしまいます。Timerだと指定秒ごとに起動。コレ何をもってON入力と扱われるんですかね……? -- 2020-09-21 (月) 01:21:00




