2016年2月13日土曜日

アクションゲーム制作 記録 その1

すごく久々の更新

今年の頭(2016初頭)から前々からアクションゲーム制作をやりたいなぁと
心におもっていただけだったのをついに行動に移すことにした。

企画内容は

・アクション要素がある → プレイヤーを自分で操作
・合戦っぽい要素がある → 大勢がぶつかり合う
・シュミレーションもちょっと混ぜるか → 味方のユニットをある程度指揮できる
・でもシンプルなものがいい → 操作は簡単
・PC向け

みたいなぼんやりとしたところから初めて近しい機能や遊びをもった
ゲームのプレイ感やよいところわるいところをまとめて・・・・
ベースにするゲーム性も目標をブラさないようにさだめ・・・

仕様書も作成してC#も勉強しつつ・・・

ついに仕様書は エクセル15ページに及ぶ物量になって、
キャラデザを知り合いの方に相談してやってもらえることになったので、
そちらの資料も作成して・・・

気が付けば1月が終わり、2月も半ば・・・

ちょっと後々のメモというか今後に生かせるように作業記録をブログにかいていこうかなんて
思い至る。


とりあえず1~2月頭までの進捗


戦闘関連

・大勢のキャラの登場

単純に前々からキャラごとに使用するマテリアルやメッシュ情報がインスタンスを一回だけしたものを参照する形にする場合はメモリを食わないのは知っていたのだけど、
InstanceとDestroyを繰り返すと「なんか重いなぁ」状態になっていた。

調べるとどうもこのInstとDestを頻繁に繰り返すことでガベージコレクションっていうメモリ解放の処理の際に危険を及ぼすらしく、このままでは出せて画面に20体くらいが限度なのか・・・?

と途方にくれてたら知り合いから「オブジェクトプール」というこれまた便利な方法があるということを聞き調査、スクリプトを試しに書いて機能を理解したので、キャラの死亡や復活のシステムはこいつを主体に動かすことになった。

あとステージセットアップ時に大量のキャラがGetCompornentをすることになるのをさけるために、
動的な参照はプールマネージャにまかせて、静的な参照はあらかじめプレハブで登録することにした。

ただオブジェクトプールシステムの性質上オンオフ切り替えのため、
復帰時の処理をどうするかが問題になったけどこれまたいろんなゲームのキャラ制御みてると
だいたい予測がついたのですぐに解決した。(肝心のなにをみて予測したか覚えてないw)
これメモになってるのか!?

ダメージ数値表示、エフェクト表示も実装。

ダメージ表示だが、RectTransformで制御するんだけどこれUIがスクリーンオーバーじゃなくて、
カメラ前表示だった場合普通にCanvasの下にいれててもワールド空間の座標を流し込むと、
いちいちWorldtoScreenSpaceとかやんなくてもいいようだ。

ただ大きさを一定にできないから、カメラの距離に応じてなにかしこうもうか悩み中。

それ以外だと映ってないのにUIが見えたりどっかとんでいったりとひどいことになる・・。
どうしたもんか。

・味方、敵AI

1クラスでAI制御を全部やろうとして複雑化、Update内容がとんでもないことになっていたのだけど、ステートマシンという概念を見つけて導入。

とりあえずまだ全部は書き直せてないけどうち1体のステート管理を完了する。
そこで Interfaceやクラス継承、仮想化とかの基礎を覚える。


Unityには関係ないんだけど、
Pythonにクラス継承があることをここにきてはじめて知る。
(いままで3年も使っててしらなかったし、多重継承できるってきいて余計ビックリ)

まぁMayaでの作業の効率化とか程度のスクリプティングだと
まったく使用しなくていいのだけどもw

リグシステムも複数のクラスは作ってたりはしたけど、今見ても継承するほどじゃなかった。
まぁところどころここもっと汎用性高くできるんじゃないの?とかいうところは
C#の基礎やったおかげで、オブジェクト指向プログラミングの便利さの片鱗にふれいろいろアイデアは思いついたので機会があれば書き直してみたいw
(これはUnity作業と関係ないw)


・アニメーション・モデル

まだ本番モデルがないので仮の別モデルを読み込んでアニメーションつけて、
プレイヤーのコンボシステムや移動関連を実験中

ゲーム用のモデルじゃないからマテリアル数と骨数がはんぱなくて重いw
でもおっぱいは揺れる(手付け&やる気アップ)

やっててよかったモーションデザイナー!
でも本番の揺れものはさすがに物理使いたいw


・ステータス関連

ステータスというクラスを定義してあらゆるキャラクターのステータスの箱を用意、
一人一人が持つ形をやめて、ステージ読み込みなどの際にメモリには最小限の情報だけが残ってそいつを関連するやつだけが見に行けるようにした。

レベルアップシステムは導入するつもりなのだけど、
キャラごと個別じゃなくて全員同じステータスの計算式を使う予定だから、
レベルをなげれば自動で計算結果が返ってくるクラスを作成してそいつを呼び出すことにした。


その他


・画面遷移

ほぼほぼ必要な機能と要件をまとめきった。
あとはUIを仮置きしてデータセーブとか読み込むべき情報といらない情報等を
洗い出してメモリになにをもたせるかの仕様を切る。



1か月半くらいで自分的にかなり大きく前進したと思う。
土日をメインにすすめてるからまだまだ先は長いけど
頑張っていくぞー。




0 件のコメント:

コメントを投稿

【モーション記事じゃない】Python 辞書の作成時の登録順番を維持

あまぐりです。 最近作業中階層が非常に深かったり、 飛びまくってるところへ度々アクセスすることが多いんですね。 ので、エクスプローラーさんと行き来することが多いんですが、 案件変わるたびに入れ替えたりお気に入りフォルダやショートカットが 多大なことになってきて古いの...