ロジックの教科書


ここは、マルチで対戦するためのジックのサンプルデータを、解説していく場所です。
自分がロジックを組む上で気になった箇所の説明も加えていきます。
リスポーンロジック、勝利判定ロジック、マップによる妨害ロジック等について加筆していく予定です。


リスポーンロジック

①基本リスポーンロジック

ここでは、「Rキーを入力した時と、マシンが10%の以上のダメージを受けた時に、5秒後リスポ―ンするロジック」を紹介します。
ここで説明するロジック基本リスポーンロジックのデータ
+ 内容はこちらから
ロジックの流れとしては、
1. Rキーを押す or マシンが10%以上のダメージを受けると、変数が+1される。
2. 変数が1の時に、一定時間カウントし、プレイヤーをリスポ―ンし、再度リスポーン可能な状態に戻す。
となります。
個別の説明は以下に続きます。

L.1-1

[ON KEY PRESSED]トリガーにRを設定する事で、Rキーを押したときに次のイベントが実行されます。
  • ローカル変数{respawn} を +1 します。

L.1-2

[ON MACHINE DAMAGE]トリガーにDAMAGE LEVEL 10%を設定する事で、機体が10%損傷したときに次のイベントが実行されます。
  • ローカル変数{respawn} を +1 します。

L.1-3

[ON VARIABLE]トリガーに ローカル変数{respawn} = 1 を設定する事で、ローカル変数{respawn} = 1のときに次のイベントが上から順番に実行されます。
  • 5秒待ちます。
  • プレイヤーをリスポーンします。
  • ローカル変数{respawn}を0にします。

以下、このロジックにまつわる補足です。
Q.変数って何?
A.変数は、「名前のつけられる箱」だと考えてください。
 今回は、箱に{respawn}という名前をつけました。
 そして、今回のロジックでいえば、Rキーが押されたら{respawn}という名前の箱の中にモノを1つ入れる、箱の中にモノが1つだけ入った状態になったときにリスポーンを行う、といったイメージです。

Q.変数名は respawn じゃないとだめなの?
A.いいえ。変数名はなんでもOKです。
 簡単にロジックを試してみたい場合は、A、B等簡単な文字にするのもよいでしょう。
 ただし、変数を多用する場合では、変数名を抽象的な記号にすると覚えるのが大変です。
 そこで、今回のように変数名に意味を持たせる方法が便利です。

Q.ローカル変数、グローバル変数とは?
A.変数にはグローバル変数とローカル変数の2種類があります。
 グローバル変数はどこからでも参照できる変数です。
 ローカル変数は、そのオブジェクト内でのみ参照できる変数です。
 例えば、このロジックで用いる変数をグローバル変数にした場合、違うバウンディングボックスでも同じグローバル変数{respawn}を参照するため一人がリスポーンしようとすると全員が同時にリスポーンされます。
 複数のバウンディングボックスにそれぞれ別のグローバル変数を割り当て上記のリスポーンロジックを設定する事でも対応できますが、人数分の変数をその都度入力するため手間がかかります。
 一方で、今回説明したリスポーンロジックではローカル変数を使っているため、同じ名前の変数でも各バウンディングボックス毎に別のローカル変数、別のロジックとして計算されます。

Q.ローカル変数はどうやって設定するの?
A.トリガーとして使う場合、イベントとして使う場合でそれぞれ説明します。

 [トリガーにおいて]

 地球儀のようなマークがグローバル変数、指紋のようなマークがローカル変数であることを示しています。
 グローバル、ローカルの切り替えはこのマークをクリックすることで行います。

 [イベントにおいて]

 変数を変更するイベントにおいて、SCOPE OF CHANGEの下の欄が ≪GROBAL≫となっているときはグローバル変数です。
 ローカル変数にするには、この欄をクリックし、次にローカル変数を設定したいオブジェクトを次にクリックすると反映されます。

Q.変数 {respawn} +1 なのはなぜ? 変数{respawn} =1 ではだめなの?
A.変数 {respawn} =1 の際にリスポーンするロジックを設定した例を考えてみましょう。
リスポーンをするためにRキーを押すと、[ON KEY PRESSED]トリガーによって変数 {respawn} =1となり、リスポーンロジックが発動します。
リスポーンの待機時間の間に、再度Rキーを押すと、再び[ON KEY PRESSED]トリガーによって変数 {respawn} =1が代入されます。
この時、システムは現在のリスポーンロジックを中止し、再度リスポーンロジックを最初から実行します。
その結果、Rキーを連打し続けると、システムはリスポーンロジックを何度も最初から実行しようとするためロジックが進みません。
ボタンの連打はプレイヤーの操作なので注意すれば済む事ですが、リスポーン中にHPが尽きた場合も同様の現象が起きます。
このリスポーンの重複を防ぐためにこのような設計になっています。


②自動給弾付きリスポーンロジック

ここでは、①のリスポーンロジックに加えて、マシンに自動給弾を行い、リスポーンを開始したら給弾停止、残弾を0にするロジックを紹介します。
ここで説明するロジック自動給弾付きリスポーンロジックのデータ
+ 内容はこちらから
ロジックの流れとしては、
A-1. Rキーを押す or マシンが10%以上のダメージを受けると、変数が+1される。
A-2. 変数が1の時に、プレイヤーの残弾を0し、一定時間カウントし、プレイヤーをリスポ―ンし、再度リスポーン可能な状態に戻す。
B-1. 変数が0の時にプレイヤーに給弾し、一定時間待ち、変数を更新する。

となります。
個別の説明は以下に続きます。
今回は、重複する部分があるため更新した部分を赤色にしています。

L.2-1

[ON KEY PRESSED]トリガーにRを設定する事で、Rキーを押したときに次のイベントが実行されます。
  • ローカル変数{respawn} を +1 します。

L.2-2

[ON MACHINE DAMAGE]トリガーにDAMAGE LEVEL 10%を設定する事で、機体が10%損傷したときに次のイベントが実行されます。
  • ローカル変数{respawn} を +1 します。

L.2-3

[ON VARIABLE]トリガーに ローカル変数{respawn} = 1 を設定する事で、ローカル変数{respawn} = 1のときに次のイベントが上から順番に実行されます。
  • プレイヤーの残弾を0にします。
  • 5秒待ちます。
  • プレイヤーをリスポーンします。
  • ローカル変数{respawn}を0にします。

L.2-4

[ON VARIABLE]トリガーに ローカル変数{respawn} = 0 を設定する事で、ローカル変数{respawn} = 0のときに次のイベントが上から順番に実行されます。
  • プレイヤーの全武器に2発の弾を給弾します。
  • 2秒待ちます。
  • ローカル変数{respawnに0を足します。}

L.2-5

[ON START SIMULATION]トリガーに ローカル変数{respawn} = 0 を設定する事で、このバウンディングボックスにいるプレイヤーがシミュレーションを開始したた時に次のイベントが実行されます。
  • ローカル変数{respawnを0にします。}}

以下、このロジックにまつわる補足です。
Q.プレイヤーに給弾する際にEACH WEAPONとかMACHINEとか、給弾の記号とかどういう意味?
A.{EACH WEAPON}は各武器それぞれに対して行う操作、{MACHINE}はマシン全体に対して行う操作になります。
 例えば、L.2-4の画像のように{EACH WEAPON} +2 という給弾をすると、すべての武器に2発の弾が給弾されます。
 大砲を4門置いていた場合、各門に2発ずつ弾が給弾されるため8発撃てることになります。
 一方で、{MACHINE} +2 という給弾をすると、マシン全体で2発しか給弾されません。
 したがって、4砲の大砲を置いても2門からのみ弾が出て弾切れ、という状況になります。
 また、大砲や弓矢は発射数と給弾数が1対1で対応しますが、火炎放射器は給弾1に対して0.25秒の攻撃が可能となります。

 次に、各記号の示す意味についてです。
 besiegeの給弾可能な武器種としては、砲系(大砲と拡散砲)、火炎放射器、クロスボウの3つがあります。
 記号によって、どの武器種に対する操作かを選ぶ事ができます。
記号 意味
全武器種に対して実行
砲系に対して実行
火炎放射器に対して実行
クロスボウに対して実行
ランダムで3つのうち1つの武器種に対して実行

Q.L.2-4の、「ローカル変数{respawnに0を足します。」は必要なの? 0を足すってなんで?}
A.必要です。ここが自動給弾ロジックの肝でもあります。
 ①基本リスポーンロジックの補足でリスポーンが重複する話をしましたが、変数をトリガーとするロジックでは、「変数が更新されて、一致する場合には毎回実行する」ものだと思ってください。
 自動給弾の過程について説明していきます。
 (A)まず、シミュレーション開始時にL.2-5のロジックによって、ローカル変数{respawn} =0 が代入されます。
 (B)すると、自動給弾ロジック(L.2-4)のトリガーに一致するため、L.2-4のロジックが実行されます。
 (C)L.2-4のロジックの最後で ローカル変数{respawn} +0 という操作が行われると、 ローカル変数{respawn} は 0+0 となり、
 再度 ローカル変数{respawn} =0 が代入される事になります。
 これは(B)のトリガーに一致するため、(A) → (B)→(C)→(B)→(C)→(B)…とループしていくことになります。
 ただしこれはプレイヤーが健常な状態である時の場合です。
 もしプレイヤーがリスポーン操作を行うと、ローカル変数{respawn} は1以上の数字になります。
 その状態で(C)のロジックに入ると、ローカル変数{respawn} が0に戻ることはなく、給弾が中止されることがわかると思います。
 リスポーンするとローカル変数{respawn】=0 という操作が行われるため、再度自動給弾が行われます。


勝利ロジック

③特定のエリアにオブジェクトを運ぶとゲージが進行するロジック(輸送戦)

④特定のエリアに居座ることでゲージが進行するロジック(占領戦)

⑤撃破された時に相手チームのゲージが進行するロジック(デスマッチ)


妨害ロジック

⑥破壊されると一定時間後自動で再生成する壁ロジック

⑦特定の条件でプレイヤーをターゲットするミサイルを射出するロジック

⑧線路のポイント切り替えロジック


その他

⑨マシンをスキャンするロジック

タグ:

+ タグ編集
  • タグ:
最終更新:2018年10月08日 11:34
|新しいページ |検索 |ページ一覧 |RSS |@ウィキご利用ガイド |管理者にお問合せ
|ログイン|