第四回 テレポート(一対一)
第四回目はテレポ―トで対戦などを想定した一対一の状況で使えるもので 相手を基準とした位置に移動するためのスクリプトの解説です 相手を基準とは相手の目の前に出現など 相手の位置によって移動距離が変わるというものです
相手の位置により移動距離を決めるため 自分と相手の位置を数値化する必要があり 最初に1Pと2Pに別の処理をさせるため1Pと2Pを判別させます スクリプトに最初からあるステージフェイスの最初に 「変数による分岐」を付け空いてるキャラ変数に 変数使用のチェックを入れて「データ:X座標」を設定します ステージフェイスはゲームシステムの基本の「位置:1P顔」「位置:2P顔」で 表示場所を設定でき変数にステージフェイスのX座標を代入することで 1P2Pで別の数値を入れることができ数値により判別できるようになります 「位置:1P顔」「位置:2P顔」のX座標の中間くらいの変数をいれ ○○以上ならなどで1P2Pを判別すると楽です
1P2Pを判別できれば いよいよ計算です 格ツクは画面サイズX640×Y480になってます Xは横軸でYは縦軸の数値で単位は1ドットです 1P側が変数にX座標の数値を足して 2P側が変数にX座標の数値を引けば その差額が間合いの距離になります 互いの位置が入れ替わって引く数値の方が大きくなっても 数値がマイナスになるだけで数字自体は変わりません 1Pがx座標40の位置で2Pがx座標400の位置にいたとすると 40−400=-360になり間合いは360ドットなのが分かります 1Pがx座標400の位置で2Pがx座標40の位置にいたときは 400−40=360になり引く側と足す側が入れ替わっても360ドットなのが分かり 出た数値分のドット数を移動すれば相手と重なる位置に移動できる計算になります 座標移動でドット単位で移動するには 3ケタ目の数値が重要になります 上の画像では3ケタ目に1が入っていてこの状態だと 1フレームあたり1ドット移動します これを先ほど1P2Pのx座標の計算で出た数字分を 1フレームで移動できるドット数に変換すれば相手の位置に移動でき そこから出現したい場所分の移動距離の数値を足せば テレポートの基本は完成になります
ここからはスクリプトを組む説明に入ります まずはプレイヤーのX座標を知るための処理をさせるため プレイヤーにオブジェクトを貼りつけます 先ほどステージフェイスでキャラ変数にX座標を入れていたので1P2Pを分岐します 320は画面の中央にあたり2Pが画面みぎに設定してある場合を想定して 「以上だったら」に設定し2Pの処理に飛ばしてます(1P2Pのステージフェイスがともに中央より右などは数値を変更してください)オブジェクトの設定は「親と同期」「無条件」を設定してください 親と同期させることで常にキャラに張り付いた状態にします 出現OBJ設定はこの先でスクリプトを作り終えたら設定します もう一つの4番目の命令のオブジェクトも同じ設定をしますが こちらは2P側の設定となりますので 1Pと2Pで同じオブジェクトの命令を通らないように 「SG」の移動などで飛ばすように設定してください 上の画像のスクリプトでは1Pは2番目のオブジェクトの命令 2Pは4番目のオブジェクトの命令のみを通るようにしてます
次は1P側のX座標を変数にプラスするスクリプトです まずはスイッチを入れるスクリプトです Xの座標を入れる変数はシステム変数を使いますここではkを使用してます スイッチにも同じシステム変数kを使うことで変数を節約します テレポート系の技が発動するとk変数に10000代入されて スイッチが入るシステムに設定してます システム変数Kが0の時は「I」の画像呼出に行きWAIT1で見えない画像を設定して そのあとに「SG」の移動で再び最初に飛んでループするようにしてます 後半は変数を入れる設定です 先ほどの変数による分岐でシステム変数kに数字が入っていれば 左から5番目の「V」の変数による分岐に飛ばせます ここではシステム変数kにデータ:x座標を「足して」ください 次に「I」の画像呼出を設定してWAIT1で見えない画像を設定します そして「V」の変数による分岐を設定して システム変数kが0と同じならこのスクリプトの最初に飛ぶようにせっていします 最後に「SG」で6番目の「I」の画像呼出に飛ばして システム変数kが0に戻るまでループさせます 1P側の座標の割出の設定はこれで完了です
続いて2P側のx座標を変数にマイナスするスクリプトです 変数は直接マイナスすることができないためすこし複雑になってます 最初のスイッチを入れるスクリプトは1Pと同じです こちらも同じシステム変数kが0以上になれば後ろのスクリプトに飛びます 続いてx座標分をマイナスするスクリプトです ここではタスク変数にx座標代入します 例としてタスク変数:Mを使用しております タスクMに代入させた後タスクMとシステム変数kを-1する設定をループさせ タスクMが0になるまで繰り返せば x座標の数値分をシステム変数kからマイナスすることができます ただし1フレーム内でのループには限界があるので 百の桁や十の桁分まとめてマイナスする必要があります そこでまずは百の桁以上であるか十の桁以上であるかを判別させます
先に+99以上だったらを設定しそのあとに+9以上だったらを設定します ○○以上だったらは一つ上の数字から適応なので+99と入れると100から適応されます この後に1の桁をマイナスするスクリプトを組みます システム変数とタスク変数に-1を「足す」設定を入れればKOです 百の桁と十の桁の飛び先も同じ要領で マイナスする数字を百の桁なら百倍 十の桁らな十倍の数値に設定してください そして計算の後に「SG」の移動の命令を付けて ループするための設定に飛ばします
ループはタスクが0なら計算をストップして システム変数:kが0になるまで待機するループに飛ばします そしてそのあとに「SG」の移動の命令をつくって タスクMが+99以上ならの変数分岐にとばしてください
システム変数:kが0になるまでの待機のループは 「I」の画像呼出で透明が画像を設定しWAITは1に設定して 次に「V」の変数による分岐で システム変数kが0と同じなら このスクリプトの最初に飛ばすように設定してください 最後に「SG」の移動で再び「I」に飛ばせば システム変数が0に戻るまでのループは完成です これで1Pと2Pの設定が完了し 変数の誤差で間合いが分かるようになります
ここからはメインのテレポートに関するスクリプトです スクリプトの流れは 移動前のモーション スイッチを入れるための変数の追加 システム変数を移動に変換する処理 出現or攻撃 という流れになります
移動前のモーションですがどんなものでもOKです 空中に移動などしても大丈夫です
次にスイッチを入れるための変数の処理です 変数を入れるタイミングはシステム変数を移動に変換する処理の 2フレーム(2WAIT)前にしてください スイッチを入れてオブジェが変数を入れるのに1フレーム間を置かないと 不具合が起こる可能性があります スイッチに入れる変数はシステム変数Kに1万の数値を「代入」してください スイッチを入れるための変数はいくらでもいいのですが x座標などと被りにくいものの方がとび先が間違ってたりしたときにわかりやすいです そしてこの変数を入れる時と システム変数を座標移動に変換が終わるまでは 食らい判定は入れないでください 変数を代入したまま処理が行われず食らいモーションに飛ぶと 使用されずに残った変数が不具合の原因になります もし食らい判定を入れる場合は食らいモーションの最初に ここで使用しているシステム変数を0にする処理をおこなってください
続いてはシステム変数を座標移動に置き換える作業です このスクリプトは主に4項目に分かれてます
黄色の部分は分岐 青はシステム変数:kがマイナス時の計算 赤はシステム変数:kがプラス時の計算 緑はこの後に出現や攻撃につなぐ命令です 黄色から赤か青に行った後に緑に行く構造になります
最初は黄色の部分の分岐の設定です まずは一番左の「V」の変数による分岐です これは2キャラが同時にテレポートをしたときに バグが起きないようにシステム変数:kが0の時は 右から2番目の緑の「M」の座標移動の命令に飛ばす設定にしてください とび先はまだ解説してないので完成時に設定してください 同時にテレポートを出した場合後に処理が行われる方は システム変数がすでに使われていて0になっているためこの処理を行います
次はスイッチで入れた分の変数を取り除く命令です -10000を「足す」の設定で入れてください
3つ目は一見最初の命令と一緒に見えますがこれは x軸が重なっていた時の為の処理です ジャンプやすり抜けなどでまれに重なる時があり その時は座標の誤差が0になるので バグが起こらないように入れます とび先は右から2番目の緑の「M」の移動の命令よていです
次はプラスかマイナスかでどちらにとばすかの命令です
システム変数:kが0以上ならに設定しプラス時の計算の最初にとび先を設定ます プラス時の計算のスクリプトが完成したとき プラス時の計算の最初の部分につないでください 先にプラス側に飛ばす設定をしたのであとに設定るす「SG」の移動は マイナス時の計算のスクリプトに設定することになります マイナスの計算のスクリプトが完成したら移動先を マイナス時の計算の最初に設定してください これでは黄色の分岐は完成です
続いては青で囲ってあるシステム変数がマイナス時の計算の解説です
計算のやり方は2P側のx座標マイナスした時のものに近いです
まずはシステム変数を座標移動に変換するにあたって システム変数が百以上や十以上の場合に まとめて計算するための分岐の設定です マイナスの計算なので-99「以下だったら」と設定してください 十の桁の場合も-9「以下だったら」に設定します そしてそのあとに一の位計算を入れます マイナス計算なので0に近づけるため システム変数:kに+1を「足す」 そして座標移動のX軸の移動も+1.00を入力し「足す」にチェックを入れます 3桁目に1.00入れることで1フレームに1ドット移動でき これを変数分座標移動に足せば間合い分進めることになります そしてそのあとに「SG」の移動を設定しておきます 百の桁の計算はこの百倍の数字 十の桁の計算はこの十倍の数字を足す設定をいれます 百の桁の計算の後には「SG」の移動を設定して 十の桁の計算は百の桁の計算の右側に設定してください 十の桁の後の設定は 計算が完了した時に飛ばすためのシステム変数:kが0と同じだったらを設定します とび先は右から2番目の緑の「M」の座標移動に設定よていです
システム変数:kが0と同じだったらを設定した「V」の隣に まだ変数が残っている状況のため 「SG」の移動を設定します 飛び先はシステム変数が-99以下ならと設定した「V」に設定して ループさせるようにしてください これでマイナス時の計算は完了です
次はプラス時の計算です
赤の部分の計算になりますがマイナスの計算のスクリプトとほぼ一緒です 違いはプラスの計算なので システム変数:kが+99「以上だったら」に設定などです 十の桁も+9「以上だったら」に設定してください 上のマイナス時ではシステム変数:kを+1を足していた設定を プラス時なので-1を「足す」に変えてください 百の桁と十の桁の計算もシステム変数:kに プラスになっていた部分をマイナスに変えて下さい 座標移動の方は前に進むのでそのままでOKです
最後は一番右の緑の部分のスクリプトです
緑の最初の命令の「M」の座標移動は 出現位置の設定になります 今のままでは相手とピッタリと重なった位置に出現しますので ここで任意の数字を「足す」設定を入れます
X軸の移動にマイナスを入れることで相手の少し前に出現でき Y軸も設定可能でマイナスの状態だと少し上に出現することができます ただしY軸の移動がプラスだと地面にあたって うまく移動できない可能性があります 次の「I」の画像呼出は 「WAIT」の数値が「1」であればどの画像を使ってもOKです WAITが「1」以外の数字だとすすむ距離が増えてしまうため 必ず「1」にしてください 次の「M」は座標移動のリセットの設定です 一つ前の「I」で移動が完了しているため ここでリセットしておけば不測の事態を防げます リセットの仕方はすべての方向の数値を0にして 「代入」にチェックをいれてください そして最後の「SG」の移動で 出現後取りたい動作のスクリプトに飛ばしもらえば完成です
かなり説明が長いものになってしまいました 飛び先も多いので不具合が出る場合は とび先などがずれてる可能性もありますのでチェックをおねいがいします テレポートはストーリーモードなどで相手が複数いる場合は 座標を計算するオブジェクトを付けるキャラを一人に絞ってください また技が発動時相手後ろにいる場合も対応できてません ゲームによっては頻繁に後ろにいる場合があるかもしれません その場合は移動の計算処理の前に 後方に攻撃判定だけを出してヒット時は 別の移動の計算スクリプトに飛ばし座標移動をマイナスで計算してもらえれば 後ろに対応できると思います これ以外にもいくつか後ろに対応する方法もあるので 状況にあったスクリプトを設定してください
念願のテレポートのスクリプトの解説ページも無事設定できました シルフルでものちの更新でキャラにテレポートを入れていく予定です 説明が雑でまだまだ精進が足りないため わかりにくいとこが多々あると思いますがご了承ください 次回は今回紹介した 計算のスクリプトを紹介したいと思います ループでの変数計算は後に かなり使うことになると思うので先にまとめて紹介しておけば 解説のコーナーも短くまとまるのでは思ってます ライフ計算などもまた解説できれば面白いかなと思ってますので いろいろと書く記事をまとめておかないとですね〜
|