>100 Views
December 19, 25
スライド概要
講演者:Sig
「Unreal Engine Meetup Connect - Vol.5」の講演資料です。
アーカイブ動画:
https://youtu.be/QmiIUspC4Sg
イベントページ:
https://leon-gameworks.connpass.com/event/374463/
Unreal Engine をメインとするゲーム会社、株式会社Leon Gameworks のアカウントです。
UEを触らないために UEを触る方法 デザイナーのためのプロトタイプ開発事例
話すこと - 研究用プロトタイプの開発事例を紹介 - エンジニア、デザイナーの分業 - UEを知らないデザイナーがストレスなくデザインできる環境を用意 - 「イテレーション(調整とテストを繰り返す)」をしてもらうこと
自己紹介 Sig @Sig_RS ・インディーゲーム開発(最近お仕事に押し出され中……) ・フリーランスとして諸々の開発・デザイン・研究など ・ドーナツ大好き! ・部屋がすぐに散らかる
プロトタイプを作る時間がある! そうだ、マルチプレイのゲームを作ろう
想定プロジェクト概要 - マルチプレイローグライトアクションRPG(最大4人のマルチを想定) プロトタイプとして1ヶ月ほど制作 仮アセット+簡易システムでテスト優先(使用アセットはモーションとエフェクトのみ) 試しに組んでみたところ……
想定プロジェクト概要 バランス調整が難しい! キャラの能力値とバフやスキル能力による数値が加算・乗算されていくゲームデザイン ビルド(成長志向)を選ぶ幅があり楽しいが、すぐにバランス崩壊してしまう バランスや数値のデザイン・調整は、1人じゃやってられないかも……
そこで 来たれデザイナー!未経験大歓迎! と言える環境作りのテストも兼ねてみることに
設計思想 ①デザイナーが数値などを自由に調整できる環境を作る ②デザイナーがエンジンになるべく触らないことを目指した開発 学習コストの低減、エラーの予防 ③モジュール化 × データ化 × イテレーション高速化 デザイナーだけでイテレーション(調整→テスト→調整のサイクル)をしてもらう
設計思想 技術的な複雑さ、学習コストをデザイナーから取り去る 基本的にスプレッドシートやDataAssetなどでデータいじりが完結するようにした デザイナーに複雑な操作をさせないことを信条に デザイナーの領分は数字やグラフ、ボタンいじりでほぼ解決する - 数値入力がメイン。あとはレベル上でオブジェクトが動かせればOK!
トピック 1. スキルの設計、数値調整 2. NPCや敵キャラクターの簡易AI調整 3. 敵グループの設計 4. その他の調整 5. まとめ
1. スキルの設計・調整
すべてをスキルに キャラクターがとるアクションのほぼすべては「スキル」という単位でモジュール化 キャラクターが使う技はもちろん、通常攻撃や回避行動、オブジェクトへのインタラクショ ンやチャットの送信に至るまで、 移動以外の行動は、ほぼすべてスキル内に処理を収めた 通常攻撃 ガード・回避行動 チャットの送信
BP_Skillの仕様 BP_Skill キャラクターに BP_Skillコンポーネントを付与 BP_Skill_Basis BP_Skill_HeavySwing BP_Skill_Guard BP_Skill_DodgeRoll BP_Skill継承クラスたち
BP_Skillの仕様 柔軟性を設けるため、イベントを一律で用意 - 詠唱時、詠唱完了時 - スキル発動時、ヒット時 - スキルが中断されたとき(内的要因、外的要因) - 遅延発動トリガー
BP_Skillの仕様 BP_Skillは、処理の柔軟性が欲しくActorComponentクラスを継承している…… ・が、蓋を開けてみればTickなどはほぼ使わず、UObjectクラスで十分そうだった 次からはUObjectでいきたい ・敵キャラの行動もほぼすべてが「スキル」扱いで、専用のロジックは「どのプレイヤーを 狙ってどのスキルを使うか」というAI的な部分くらい ・インタラクションやチャット送信など、汎用的な機能は「BP_Skill_Basic」スキルとし て、キャラクターごとに統合して埋め込んだ
BP_Skillで定義するパラメータ スキルには多くのパラメータがあるため、数値調整を一括でデザイナーに任せられるように 例えば…… スキルを使用可能なキャラクタークラス(職業) スキルの入力タイプ(即時発動、ホールド入力など) スキルが作用するターゲット(味方、敵、すべてのキャラクター) スキルレベル スキル威力(ダメージ) スキル威力(体勢を削る力) 詠唱時間 クールダウン時間 スキルの射程 スキルの効果範囲 スキル使用時、強制的にキャラが相手の方を向くか? AoE(効果範囲)が可視化されるか? 詠唱中断が可能か? コスト(MP) コスト(スタミナ) キャラクターのステータスに依存する比率(筋力) キャラクターのステータスに依存する比率(魔力) 特殊注釈
スキルパラメータ調整 スプレッドシートで一括管理! スキルレベル1~レベル5までのステータスを個別に設定可能
入力ミスの防止 プルダウンメニューを使い、想定外の値が入らないようにして事故防止
DataTableのインポート スプレッドシートをcsv形式で保存→UEにDataTableとしてインポート
Auto-Reimport設定 エディタ設定からAuto Reimport設定が可能 スプレッドシートを編集→保存すると、自動的にプロジェクトにも反映される やっておくと超便利!
Auto-Reimport設定
2. NPCや敵キャラクターの簡易AI調整
NPCの行動調整 タイムライン・条件式で大部分の行動制御を行う
NPCの行動調整 ActionEvent スキルのロジックで完結する行動 UniqueAction 回避→距離に応じたキャンセル行動など
NPCの行動調整
行動調整スプレッドシート紹介
行動調整スプレッドシート紹介
特殊パラメータ 距離に応じた行動分岐やプレイヤーの行動への反応アクションなど、 特殊な行動についてはこちらで対応した (ここもできるところから汎用化したい)
3. 敵グループの設計
敵グループの構成 敵グループの構成もデザイナーが編集可能
DataAsset構造 PrimaryDataAssetで規格をつくり、DataAssetで定義する TroopData: トループ情報の構造体 TroopTier: トループの難易度 TroopCategory: トループ種別 EnemyClass Lv RefHPRate RelativeLocation 敵キャラクターのクラス 敵レベル 基準HP(難易度補正に使用する値) 出現座標
Enumを使おう 選択肢を限定し、入力ミスの防止に有用な変数
Enumを使おう 選択肢を限定し、入力ミスの防止に有用な変数
4. その他の調整
リワードの数値調整
イテレーション支援ツール
5. まとめ
結論 新要素の実装に注力できる! とても重要 人の数だけイテレーションできる! 特にマルチプレイでは必須 UGCっぽい遊びを開発に取り入れ、盛り上がることができる! 好評なものを取り入れ、本実装していこう
おまけ RPC編 RPCの発火仕様で結構戸惑った スキルのモジュール化でかなり解決 プレイヤー座標のラグの解決 ある程度許容し、座標やステートの同期処理の簡易なものを自前で用意した (いわゆるゴムバンドを起こさないのを重視し、スキル発動やダメージのタイミングで座標補正)
告知 / サウンドミドルウェア解説記事 https://qiita.com/SigRem UE5 + サウンドミドルウェア ADX記事の歩き方マップ(用途別逆引き) https://qiita.com/SigRem/items/ac7e71c4a9dcf352cc09 記事数が全部で80以上あるので「記事の歩き方マップ(逆引き)」を見てください シチュエーション別に参照したい記事が見つかるはず!
ご清聴ありがとうございました!