2015年12月27日

導入記事も下に書いておきました。導入されたい方は続きを読んで下さい。
公開したものはGitHubのReleaseページにアップロートしてあります。
今回公開したバージョンは1.0.0となっています。

1、Unreal Engine 4のインストール
Epic GamesのウェブサイトからUnreal Engine 4を無料でダウンロード出来ます。まずはこれをインストールして下さい。バージョンは今回は4.10.1で作ってあるので、それをインストールして下さい。
インストールできたらKidCharacterプロジェクトがダブルクリックで開けるようになっていると思います。
ちなみにドキュメントページはここです。ブックマークしておくといいと思います。
https://docs.unrealengine.com/latest/JPN/index.html

2、配布プロジェクトの説明とレベル初期設定
ファイル構成
(ルート)
-Blueprintsフォルダ ゲームの枢軸的な機能を構成するブループリントを分類してます。
 -GlobalFunctions KidCharacterで使っている演算関数を定義してあります。
 -KidCharacter メインブループリントです。中身はあまり弄くらないでいいように作ってますので、あまり見ないのをおすすめ。
-Examplesフォルダ 説明の為の上記のKidCharacterを拡張して遊べるようにしたブループリントが入っています。
 -Level1 導入説明に使うレベルですので、これを開いておいて下さい。
その他:内部リソースなど

ファイルが開けたら出てきますが、コンテンツブラウザの中にBlueprintsフォルダがあり、それを開くとKidCharacterというファイルがあると思います。これはレベル上にスポーンするプレイヤーの、今回配布したクラスです。
2015-12-26 (11)

イントロダクションも兼ねて、初期レベル設定の説明をします。今度はExampleフォルダを開いて、そこにあるLevel1というファイルをダブルクリックで開いて下さい。
2015-12-26 (13)

左側を見て下さい。ワールドセッティングというタブがあるかと思いますが、それを開くとレベルの詳細設定が出来ます。今回はレベルで使用するGameModeを変更する必要があるので、GameModeOverrideのところをGameMode1に変更しておいて下さい。
(ワールドセッティングが出て無ければ、左上のメニューのウィンドウメニューから選んで表示させて下さい。)
2015-12-26 (17)

次に、レベルでのプレイヤーの初回位置を示すアクタであるKidCharacterStart1を配置します。コンテンツブラウザからドラックすれば追加できます。
※右クリック&WASD、QEキーで視点移動。
2015-12-26 (19)

今回配布した参考用ブループリントは、まずGameInstance1というクラスがレベルの初期化情報を持っていて、他のクラスはそれに基づいてBeginPlay時に初期設定をする、という仕組みになっているのですが、KidCharacter1クラスはBeginPlay時に、その初期化情報に書かれた方法でKidCharacterStart1クラスを探して(もしくは、初期化情報にそのまま位置座標が書かれていることもあります)その中に設定してある初期化情報を使うスクリプトを持っています。デフォルトではKidCharacterStart1のPlayerStartTag変数にNoneが入っているものを検索するので、さきほど配置したアクタのその変数はNoneのままにしておいて下さい。あと、プレイヤーはここに初期配置されるということになるので、ブロックに乗ってカメラに向かっているような感じにしておいて下さい。
※右上の半透明のアイコンを選択すると回転ツールなどが切り替えられます。
2015-12-26 (20)

これで設定は完了です。実行してみましょう。ただ、レベルの初期化情報を指定してレベルに入らないと予期しない位置にスポーンしてしまうので(とはいっても、フォールバック機能が働くので、エラーメッセージは出ますが適当な初期設定でちゃんと実行出来ます)、プレビュー用のスクリプトを実行してレベルに入りたいと思います。今回はLevel1_Previewというレベルにそれを記述済みなので、そのレベルから実行するため、開いて下さい。
2015-12-26 (21)

実行は、上の方の右三角の実行マークのボタンを押すとプレイインエディタで開始されます。
2015-12-26 (23)

これで動作可能なキッド君が見れたはずです。操作方法は普通のアイワナの操作に加えて、上下キーで前後方向に移動できますので、少し移動してみてください!
2015-12-26 (25)

以上でイントロダクションは終了となります。

3、ゲーム開発の説明
ここから先はクラスごとの仕様説明となります。

KidCharacter:
Pawnクラスを継承しています。アンリアルエンジンではPawnはプレイヤーがコントロール出来るアクタという位置づけになっています。
KidCharacterとしては沢山の機能を内蔵しています。出来るだけ普通のアイワナに近づけたつもりですが、物理的挙動がどうしてもNVIDIAのPhysXに頼らざるをえないので、ゲームメーカーのものと比べるとちょっと荒いかなと思う感じになってしまっています。
外見機構的にはInputという名前を冠している入力用関数を呼び出すだけで基本的な入力はコントロール出来るようになっています。

KidCharacterController:
PlayerControllerクラスを継承しています。PlayerControllerクラスはGameModeクラスに指定出来るクラスで、Pawnと合わせてどちらか好きな方でキー入力のイベントを受け取ることが出来ます。今回はKidCharacterのコントローラーのサンプルとして導入しました。キー入力に応じた移動方向などを変えたい場合はここをいじくる必要があるかと思います。
今回配布したバージョンでは、上下左右キーの軸マッピングを読み取り、現在使われているカメラの向きを上キーの移動方向として、それらを90度ずつ回転させた方向を他の上下左右と割り当てて移動するようにしています。必然的にカメラの真ん前で上か下かを押すとぺらっぺらになって見えなくなってしまうんですが、キッド君のモデルをぺらぺらにしか出来なかったので不可抗力です・・・。そのために真下の影を加えてみたということもあります。前後移動を禁止させたい場合は、新しく派生クラスを作ってUp-Down Controll Axis変数をゼロベクトルに設定して使えば出来ます。

Smooth:
物理マテリアルクラスです。コリジョンを作れるクラスにはこれをオーバーライドして指定する欄があるのですが、プレイヤーが衝突するコリジョンの場合必ずこれを使用するようにして下さい。Smoothマテリアルでは摩擦をゼロにしているので、床とこすっているとPhysXの回転ロックがずれるというようなことが無くなってくれます。これをやらないと、プレイヤーの重力の方向が思いのままになってしまったり・・・。

GameMode1:
今回サンプルとして配布した、語尾に1のつくブループリントとなっています。これをレベルに指定すると、KidCharacter1がデフォルトポーンとされるほか、GameOverを表示するだけのHUD1が使われるようになります。他に注意点ですが、GameInstance1をプロジェクト設定のマップ・モードのGameInstance欄に指定しないとレベル初期化情報の保持がうまくいかないので、正しく機能しません。

KidCharacter1:
KidCharacterを派生させたブループリントで、スポーン直後にレベル初期化情報を読み取ってスポーン位置や初期速度などを確定するスクリプトを加えていて、GameMode1用のクラスとなっております。

KidCharacterStart1:
これをレベルに含ませると、直前のレベルからのレベル初期化情報に応じてこれを指定させて、レベルエディット側でスポーン位置などを指定できるようになります。位置座標以外のパラメーターを指定したい場合は、右のほうにある詳細欄から変更して下さい。PlayerInformation変数はそのパラメータの全てとなっていて、PlayerStartName変数の方はレベル初期化情報に同じ変数欄がありますが、検索の指標となります。

GameInstance1:
レベル初期化情報を保持するためのクラスです。これのOpenLevel関数を普通のOpenLevelの代わりに用いれば自然にレベル初期化情報の導入が出来るかと思います。

CameraActor:
アンリアルエンジン側の説明になります。CameraComponentクラスを内蔵していますが、基本的にこちらのほうが高機能ですので、Pawnではこちらをスポーンさせることにしておいて、PlayerControllerのSetBlentTargetWithBlendを呼び出して使用するカメラに指定しておくのがいいと思います。

4、終わり
今回アンリアルエンジンでアイワナを制作するための基礎プロジェクトをこっそり公開させていただきました。初めての方にはすごく訳のわからないものとなってしまっていると思います。申し訳ありません。
今の1.0.0バージョンはまだセーブ部分が足りなくてすぐにゲームが作れる感じではありませんが、とりあえずさわってもらうことは出来ると思いますので、出来るだけ練習してもらえればと思います。

トラックバックURL

コメントする

名前
 
  絵文字