syui.ai

ue5のgaspとdragonikを組み合わせてenemyを作る

.md

ue5.6でgasp(game animation sample project)をベースにゲーム、特にキャラクターの操作を作っています。

そして、enemy(敵)を作り、バトルシーンを作成する予定ですが、これはどのように開発すればいいのでしょう。その方針を明確にします。

  1. enemyもgaspのcbp_characterに統合し、自キャラ、敵キャラどちらでも使用可能にする
  2. 2番目のcharacterは動物型(type:animal)にし、gaspに統合する
  3. enemyとして使用する場合は、enemy-AI-componentを追加するだけで完結する
  4. characterのすべての操作を統一する

このようにすることで、応用可能なenemyを作ることができます。

例えば、2番目のcharacterは動物型(type:animal)にするというのはどういうことでしょう。

登場するキャラクターを人型(type:human), 動物型(type:animal)に分けるとして、動物型のテンプレートを作る必要があります。そのまま動物のmeshをgaspで使うと動きが変になってしまうので、それを調整する必要があるということ。そして、調整したものをテンプレート化して、他の動物にも適用できるようにしておくと、後の開発は楽ですよね。

ですから、早いうちにtype:humanから脱却し、他のtypeを作るほうがいいと判断しました。

これには、dragon ik pluginを使って、手っ取り早く動きを作ります。

characterのすべての操作を統一するというのは、1キャラにつき1属性、1通常攻撃、1スキル、1バースト、などのルールを作り、それらを共通化することです。共通化というのは、playerもenemy-AI-componentも違うキャラを同じ操作で使用できることを指します。

2番目のキャラクター

原作には、西洋ドラゴンのドライ(drai)というキャラが登場します。その父親が東洋ドラゴンのシンオウ(shin-oh)です。これをshinという名前で登録し、2番目のキャラクターとして設定しました。

3d-modelは今のところue5のcrsp(control rig sample project)にあるchinese dragonを使用しています。後に改造して原作に近づけるようにしたいところですが、今は時間が取れません。

データ構造の作成と適用

ゲームデータはatproto collection recordに保存して、そこからゲームに反映させたいと考えています。

まず基本データをai.syui.aiのアカウントに保存。個別データをplayerのatprotoアカウントに保存する形が理想です。

基本データは、ゲームの基本的な設定のこと。例えば、キャラクターの名前や属性、スキルなど変更されることがない値。

個別データは、プレイヤーが使えるキャラ、レベル、攻撃力など、ゲームの進行とともに変更される値です。

ゲームをスタートさせると、まず基本データを取得し、それをcbp_characterに適用します。ログインすると、cbp_characterの変数(var)に値が振り分けられます。例えば、skill-damage:0.0があったとして、この値が変わります。

しかし、ゲームを開発していると、基本データも個別データも構造が複雑になります。

それを防ぐため、{simple, core} modeのような考え方を取り入れます。必要最小限の構成を分離、保存して、それをいつでも統合、適用できるように設計しておきます。

gaspとdragonikを統合する方法

では、いよいよgaspとdragonikの統合手法を解説します。

まず、abpを作ります。それにdragonikを当て、それをSKM_Dragonのpost process animに指定します。

次に、動きに合わせて首を上下させます。