プレイヤーの速度を変更したい

Created at
Updated at

シリーズ初心者です。プレイヤーの速度を変更するにはどうすればいいのでしょうか?

Comments

Created at

たぶん、それを簡単に行う方法はありません。だれかがプレイヤーの速度を変更するアドオンを作らないといけないのではないかと思います。


Created at
Updated at

 アドオン作れないか試してみたんですけど、ちょっと難しそうです。初心者の方に伝わる内容ではないのですが、一応理由を説明します。

 現時点のアドオン制作に関する知見はこちら(https://yakuentei.jp/article/gamedev/unity_rmu_addon/)に詳しくまとめられているのですが、ざっくり言うとアクセス修飾子と呼ばれるものがpublicであればアドオンで仕組みを書き換えられるというものです。

 なんですが……プレイヤーの速度はprotectedというアクセス修飾子で定義されています。なので現状では書き換えられなさそうなんですね……。

 

 ちなみになんですが、プレイヤーの速度はCharacterOnMap.csの53行目に定義されていますので、そこの数字を変えれば移動速度が変わります。数字を変えるだけなら初心者の方でも可能かと思いますので、直接ソースを弄っちゃった方がいいかもですね。

 あんまり大きな数字にしすぎると、当たり判定とかで不具合が出るかもなのでほどほどの値にした方がいいですが……。

 

 イベント処理で移動させる場合の移動速度やイベントの移動速度はまた別に用意されていますが、そちらは元々1/8~4倍を選べるので、今回は割愛します。


Created at
Updated at

このように、カスタム移動の対象をプレイヤーとした上で移動速度の変更を行うことで

プレイヤー自身の速度を変更することができるかと思います。

36_Tg1_U_Qbq_Y8_RMKQ_7m_Iko_Lg_4337312930

Created at

ちょっと違ったアプローチになりますが、Unityはゲーム内の再生速度をTime.timeScaleで管理してるのでそちらを操作して速度を速めるというのはどうでしょうか?(全体が加速するので難点はあると思います)

また、紫苑もみじさんの仰ってるCharacterOnMap.csも見てみました あまり詳しくないのですが、653行目にある

        public void SetCharacterSpeed(float speed) {            _moveSpeed = speed;        }

こちらのメソッドを呼び出すことでプレイヤーの速度を変更できませんか?


Created at

上の方の、紫苑もみじさんの投稿で紹介されていた記事を執筆した者です。

まず、直接ソースコードを編集する場合の例ですが、 Assets/RPGMaker/Codebase/Runtime/Map/MapManager.cs の SetDashForAllPlayerCharacters() メソッド (2305 行目) で、以下の 2 行のように SetCharacterSpeed() を呼ぶ処理を「追加」すると出来ることを確認しました。

_actorOnMap.SetCharacterSpeed(3.75f * 4); _partyOnMap?.ForEach(v => v.SetCharacterSpeed(3.75f * 4));

ちなみに 3.75 は Unite 側の初期値 (CharacterOnMap.cs で定義されている値) で、上記の例では 4 倍にしているので、歩行速度が 4 倍速になります。 (もっと早くしたいのなら、8 とか 16 とか試してみても良いです)

 

また、上記をアドオン化したものも、記事の方に追加いたしました。 だいぶ行数が増えますが、直接 MapManager.cs を編集することを避けられます。

まずは、直接 MapManager.cs の書き換えから試す方が楽 (2 行追加するだけ) だと思いますので、試していただけたらと思います。