RPG Bakinで移動させるC#スクリプトを組む

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

正直なところ移動させるならエディタ側で組んだ方がいいよねって感じですが、 移動はゲームの基本でもあるのでそれをスクリプトで組めるようになりましょうという挑戦です。

今回はコードを書かずに座学的な感じになります。

プログラミングの知識(変数やクラスの概念)がある程度ないとついていくのは難しい内容になっているので注意してください。

まずはプレイヤーを移動させる

プレイヤーをスクリプトで移動させるためにはマップシーンのプレイヤーを参照する必要があります。

プレイヤーはどこで参照できるのか

まず基本的に現在いるエリアの「mapScene」という変数がベースとなるのでそこから取得していきます。

mapSceneとはなんなのか

BakinObjectを継承したクラスであれば公開変数であるMapScene形のmapScene変数を扱うことができます。

じゃあMapSceneクラスとはなんなのか

MapSceneはYukar.Engine.SceneBaseを継承したクラス。

内容としては「メニューを含むマップ移動中の処理全般を管理するクラス」となっています。

MapSceneクラスにはGetHeroという関数があるが、mapSceneは公開変数としてMapCharacter型のhero変数を持っています。

heroはGetHeroをした結果のものが入っているのでとくにGetHeroをする必要は今のところないです。

簡単に言うとmapScene.heroとするとマップ上のキャラクターに対して処理が可能になります。

hero変数はMapCharacterクラスなのでその関連のメソッドを使えます。

MapCharacterクラスとは

MapCharacterクラスはキャラクターの移動やらいろいろな処理を持っています。

試しに「mapScene.hero.getDirectionDigital()」でプレイヤーが向いてる方向を取得できるか試してみたら、問題なく取得できました。

上記の関数で取得できるのは以下のようになってます。

  • 向きは東西南北で数値が固定
    • UP:0
    • DOWN:1
    • LEFT:2
    • RIGHT:3

これを利用すれば向かわせたい方向に進めることができそうですね。

プレイヤーを指定の方向に移動させるには

プレイヤーを移動させる処理は大体3パターンあります。(ような感じがする)

  1. 瞬間移動させる
  2. 指定の位置まで力を加えてループ処理で移動する
  3. 指定の位置まで指定した値で移動する

瞬間移動

こちらは指定した座標に瞬時に移動させたいときとかに使用します。

ループ処理して動かすように作られていないので、気を付けましょう。

指定の位置まで力を加えてループ処理で移動する

これが結構曲者で、例えば与えた「0.2f」と力を加えるとその力でキャラが移動していく感じです。

瞬間移動と違って毎フレーム実行させる必要があるので、ループ処理で使うのがメインです。

この関数については結構狙った位置に移動させるのは難しく感じました。

指定の位置まで指定した値で移動する

2Dゲーム的な移動としてはコチラのほうが使いやすい感じでした。

後に紹介するグリッド移動なんかはコチラの処理を使ったほうが理想の動きを再現できたので、 個人的にはこの指定の位置まで指定した値で移動させる処理を使います。

まとめ

  • マップのオブジェクトは「mapScene」でアクセスする。
  • マップにいるプレイヤーキャラクターは「mapScene.hero」でアクセスする。
  • マップにいるプレイヤーキャラクターの向きは「mapScene.hero.getDirectionDigital()」で取得できる。
  • プレイヤーを移動させるには3パターンの方法がある
    1. 瞬間移動させる
    2. 指定の位置まで力を加えてループ処理で移動する
    3. 指定の位置まで指定した値で移動する

次回は実際に移動処理のサンプルコードを組んでみましょう。

©2024 あるてなそふと