Bakinで物を押したり引いたりしたい

By Izna on Aug 14, 2024
RPG Developer Bakin 開発日誌 5日目画像部分

ゼルダ風にしたいのでモノを押したり引いたりできるようにしたい……
と思って調べてたら既に先駆者様がいらっしゃったので参考にさせてもらいました。

参考:【Bakinゲーム開発実況#17】押し引きアクションの実装方法!~アクションRPGを作る!~

デフォルトで押す機能があるが……

Bakinのデフォルトに「押して転がせるイベント」という機能が備わっています。

マジか!って思ったけど、大抵こういうものは理想にそぐわない形でしょう。

実際に設置してみて確かに押して動かせるけど、案の定物理演算を利用した挙動でコレジャナイ感がすごいのでやはり自作せざるを得ない状況になりました。

物理演算を使ったゲームであればこれで事足りるかもしれませんね。

ただ、やりたいのは時オカみたいにグリッドに沿った4方向でのオブジェクト移動がやりたいわけですが、ツクールと違ってマップは3Dなのでひと工夫必要です。

実現するための仕組みを洗い出してみる

参考動画の通りにやればできるけどなんでこれが実現できたのか理解してないまま
ってことがあまり好きではないので、仕組みを洗い出してしっかりと理解して実装してみます。

全部やると長くなるのでとりあえずキャラが近づいたらオブジェクトにアクションを起こせる状態になるまでやってみます。

プレイヤーがオブジェクトを押すアクションを実装するためにやるべきこと

まずはやりたいことをざっくりと洗い出してみます。そこから深堀してみましょう。

  • プレイヤーが箱に近づいたら「押す」みたいな表示を出す
  • 条件が満たされているときに決定ボタンを押していると掴みモーションに切り替わる
  • プレイヤーの進行方向に押すとプレイヤーと箱が一緒にその方向に動く

ゼルダの岩を押したりするときの仕組みですね。ここから深堀してみます。

プレイヤーが箱に近づいたら「押す」みたいな表示を出す

この機能を実現するためには以下の要素が必要になります。

  • プレイヤーの座標と箱の座標を知る
  • 条件を満たしているとフラグがオンになる
  • フラグがオンになっていると「押す」文字を表示する

1つずつ見ていきましょう。

  • プレイヤーの座標と箱の座標を知る
    • キャラクターは2Dですが、マップは3DなのでXYZの座標を持ちます。
    • 今回はプレイヤーと箱の距離を知りたいのでXとZの軸を使用します。
    • プレイヤーと箱の座標は常に内部で計算されているのでイベントコマンドで直接取得したり、並列自動実行で常に座標を変数に格納する仕組みを設けておけば変数を参照すればいつでも現在の座標を取得できます。
  • 条件を満たしているとフラグがオンになる
    • 後続の「押す」の条件になるためのフラグ
    • 「押す」を出したい条件としてはプレイヤーと箱の距離が一定の距離になったとき
      • 3Dマップだが、二次元での距離が分かればいいので三平方の定理を使ってプレイヤーと箱の距離を計算する
  • フラグがオンになっていると「押す」文字を表示する
    • Bakinでは文字を画像として表示する機能があるのでデバッグ中はそれを使うといい
    • 本番は自作のイメージなんかを表示するとカッコいい
    • ゼルダだと掴む→押すの順番だが一旦出すことだけを考える

後は条件に応じて押し引き処理を作るだけですね。

続きは動画を参考にしてもらったほうがよいです。

今のところ私はこの機能を使わないので、実際に使うようになったらまた改めてスクリプトで作成してみようと思います。

©2024 あるてなそふと