こんにちは。トイロジックでプログラマーをしているNです。『グリッチバスターズ:スタックオンユー』ではプレイヤーキャラクターやギミック、武器やアイテムなど様々なものの実装を担当していました。今回はその中でもプレイヤーキャラクターの実装について簡単に紹介したいと思います。

ControllerとPawnの関係

UEではユーザーの入力を受け取るControllerクラスと操作される対象であるPawnクラスが用意されており、Controllerが接続しているPawnを切り替えるだけでユーザーが操作する対象を変更することが可能となっています。

本作でもソロプレイ時に味方AI操作に切り替えるロボットに乗るといった部分で操作対象の切り替えが使用されていますが、このとき【どの情報をどこに保持しておくのか】が重要になってきます。

キャラクターの体力や装備している武器の情報はキャラクターのものなのでPawn側に、カメラやエモート情報は操作するプレイヤーのものなのでController側にというようにその情報は誰のものなのかといったことを主な基準として切り分けを行っています。

ControllerPawnに分けての実装はエネミーをプレイヤーが操作する、といった実装も簡単にできるためデバッグやパラメータ調整にも有効なのでおススメです。

機能のComponent化

プレイヤーキャラクターは面白さを追及する過程で最も機能の追加/削除が多い部分のひとつです。試行錯誤の結果によっては仕様の一部を変更や削除したりと変化が大きいため、開発後半には”機能の追加に時間がかかる”,”意図せぬ不具合が発生する”といった問題が発生してしまいがちです。

本作では仕様に対して必要な機能を細かく分け、Componentごとに機能を実装することを徹底したため試行錯誤を多く行うことができました。ただし、Componentを増やした際は”不要なTickを無効化にする”、”必要のないCollisionは無効化する”といった作業を行わなければ処理負荷に影響がでてしまうので注意が必要です。

位置同期についての工夫

本作には「ジャンプポイント」というスプラインに沿って移動を行うことができるギミックがあります。このギミックは上に他プレイヤーを乗せた状態や他プレイヤーの上に乗った状態(以下合体状態と記載します)でも起動可能なものです。本作では自分の操作していないキャラクターの位置情報はServer経由で通知された情報へ一定の時間をかけて変化させることで位置合わせを行っているため、合体状態では他のプレイヤーが微妙に遅れてしまい見た目的に違和感が生じてしまいます。

そこで「ジャンプポイント」起動後から射出されて着地するまでの間、位置の同期を無効化して各ローカルにおける計算結果を利用することで合体中も違和感のない見た目となるようにすることができました。また、起動する前の状態や着地してから一定時間の間、その場から動けないようにすることで位置同期の有効/無効の切り替え時に位置生じる大幅なズレを緩和するといった工夫もしています。

今回は『グリッチバスターズ:スタックオンユー』におけるプレイヤーキャラクターの実装について簡単に説明させていただきました。プレイヤー部分はゲームの内容によって実装方法が変わるので奥が深く、ここには書ききれなかったこともありますがこの記事が少しでも参考になれば幸いです。

著者紹介 NT
2016年に新卒としてトイロジックに入社。主にプレイヤーやギミックなどインゲーム周りを担当。みんなであそべるゲームがすき。

トイロジックでは現在、一緒に働くプログラマーを募集しています。

不明点などもお気軽にお問い合わせくださいフルリモート採用も行っております、ご応募お待ちしております!