Edited at

UE4におけるUMLの使い方、ステートマシン図、クラス図、シーケンス図

More than 1 year has passed since last update.


概要

この記事はUnreal Engine 4 (UE4) Advent Calendar 2016の20日目の記事です。

UMLを使用して開発する際特に重要なダイアグラム

ステートマシン図

クラス図

シーケンス図

についての解説をします。


使用したソフト

astah* communityを使用しています。

仕事で使わなければ無料で良いソフトが使えます。

仕事の場合それなりの値段(初回3万円、維持1万円/年)します。


実装するもの

https://youtu.be/XatNfbloN-M

完成予想図

色の付いてるボールが仮想敵

HPが3になっていて、3回弾がヒットすると赤(死亡状態)になります。

もう一回ヒットするとHPが回復し、通常の色へ戻ります。


1、設計

UMLを使用する場合、3つの段階に分かれます。

設計、コンパイル、微調整、の順番で行います。

まずは設計の段階の説明になります。

三つの図を使用してプログラム全体を大雑把に設計します。

・ステートマシン図

・クラス図

・シーケンス図

各図にはそれぞれ役割が有り、適切に図を使用して設計する必要があります。


1-1、ステートマシン図による設計

まずはステートマシン図でスケッチです。

キャラがどのように動いて欲しいかをイメージしながら書きます。



・●はスタート地点

・緑に入るとHPが回復

・HP0で赤

・HP-1で緑へ戻ります。


1-2、クラス図による設計

次にクラス図を書きます。

前の項目で作成したステートマシン図はマトキャラAが所有しています。

各クラスが周りのクラスとどのように関連しているかを記述します。


1-3、シーケンス図による設計の妥当性検証

次にシーケンス図でクラス図、ステートマシン図で

書いた物が成立するかの確認をします。

シーケンス図は作成する前にシナリオを考えます。

この図では

1、メインキャラが弾発射

2、弾が空中を進んでいく

3、弾がマトキャラAにヒット

4、マトキャラAのHPが減る。

以上のシナリオを考えました。

「このタイミングでステートマシン図はこう遷移する」

「このタイミングでクラス図のこの機能を使う」

と言った事に注意しながらシーケンス図を作成してください。

繰り返しますが、シーケンス図の目的は各図の妥当性検証です。


2、コンパイル

UMLで設計した物を言語に直します。

UMLで設計したモデルを

BlueprintのVisualScriptやC言語へ変換します。

ここの引き出しの数により、設計の幅が広がります。

図の表記1個 = 実装方法1個

を意識して作成します。


2-1、ステートマシン図のBlueprintコンパイル

幾つか図は有りますが特にステートマシン図のコンパイルは

頻出、かつ汎用性が高いので説明させていただきます。



ステートマシン図の実装例

他にも色々なコードの書き方を用意しておくと設計の精度が上がります。


2-2、ステートマシン図の遷移条件チェック



これがBluePrintでのステートマシン図実装例の一部です。

HPが0になると変数(State)に1(死んでる状態へ遷移)を書き込みます。

HPがマイナスになると変数(State)に0(生きてる状態へ遷移)を書き込みます。

これはステートマシン図上での遷移条件の実装であると確認できます。


2-3、ステートマシン図の遷移した時、Enterの処理



Stateが0になったタイミングでマテリアルをgreenに変更、HPが3に回

Stateが1になったタイミングでマテリアルをredに変更


2-4、ステートマシン図に対して1対1で対応

1-1で書いたステートマシン図のどの部分が

どのようにコンパイルされているかが分ると思います。

「図を書くと自動的にコードが決まる」事が理想です。


3、微調整

全てのUML図をコンパイルだけで行えれば良いのですが

そう理想的には行きません。

その場に合わせて必要な部分を付け足します。

ただし、これは決まったやり方は有りません。



すみません。

微調整は状況によって好きに実装するだけなのでサンプルらしいサンプルは無いです。


サンプルコード

サンプルコード

上記UMLの図を実装してみたコードです。


注意

UMLをコード化することをコンパイルと言ってるのは我流のやり方で、

一般的ではないかもしれません。

正しい言い方が有ったら教えていただけると助かりますです。

あと、UMLをこのように使う方法(シーケンス図を妥当性検証としちゃう辺りとか)

も我流で、一般的かどうかは知りません。