僕の私のUnrealな日々

UE4のBluePrintを使って小さなギミックを作ったりしてます。ブログを通じて情報共有ができたらなと思います。

ホラーゲーム「米砂原醫院」をリリースしました。


お恥ずかしい限りです。

一年数カ月ぶりのブログ更新となります。

 

この度DorsalFinStudioというインディーゲームスタジオで米砂原醫院というゲームをリリースしました。

store.steampowered.com

(前回真砂楼をリリースを記載した際に技術的な事を書きますと記されていましたが今だ行っていません。多分もうやらないと思います。)

 

担当箇所は

・プログラム全般

・性格の悪さがにじみ出ている部分のゲームデザイン

・楽曲制作

 

主要メンバーも特に変わっていませんが、今回はアートの方が増え、UIデザイナー、3Dキャラクターモデラーの方に携わっていただきました。(詳しくはクレジットを見てください、もれなく登場人物全員プロ)

 

開発に関して

制作方針に関しても同じです。

・エンジンを改造しない

UEC++を触らずBlueprintで完結させる

 

開発中UE5がリリースされましたが、見送りました。

発売時期が決まっていたため安定性を求めた形になります。

発売が一年後とかだったら移行していたと思います。

 

開発のテーマ

前作で頂いた意見から

・ゲーム部分の強化

・ジャンプスケア以外のギミックを増やす

・主人公の心の声を出す(字幕)

などゲーム部分の強化を図りました。

また本編以外の機能として廃墟探索モードを追加しました。

 

技術的な部分ではMetaHumanの検証も兼ねています。

ゲームに登場する医院長と看護婦をMetaHumanで作成しています。

そもそもゲームでMetaHumanを使えるのか、運用しきれるのか今回検証を行いました。結果としてはゲームに必要ないレベルのテクスチャやマテリアルが多すぎっ!という感想でした。そのまま使うよりかはゲームの対応スペックに応じて調整が必要かと思います。(最適化担当のtekktekk氏がもしかしたら詳しく書いてくれるかも)

twitter.com

 

 

真砂楼との相違点

・ギミックのインタラクトに対し条件によって発生するイベントが違う

・自立型AI

・廃墟探索モード

・字幕システム

となります。

 

ギミックシステムに関して

真砂楼では1つのインラタクトギミックに対し、1つのイベントでしたが米砂原醫院では進行フラグによって出すイベントを変更する必要がありました。

 

なので真砂楼から根幹のシステムの再設計を行いました。なので若干挙動が違ったりします。

 

スプレットシートでギミックの条件を管理していました。

こちらに関しては次の作品が発売する前にはこのブログに残したいと思います。多分。気が向けば。頑張る。

(ブログの書き方が忘れたのでスライド形式に多分する)

 

自立AIに関して

・自立AIが動き回っている

詳しい仕様はかけませんが、これが一番めんどくさかった。

このAIは

・徘徊モード
・追跡モード

の2つ実装したのですが徘徊モードがめんどくさい。

今回のゲームでは部屋を行き来する必要があります。つまり部屋に行くには複数のドアを開けてる必要があります。この仕組が非常にめんどくさい。

 

最初移動中にRayを飛ばして当たったドアを開けるようにしたのですが、目的地のルートではないドアに反応する不具合が発生。

最終的にはエネミーのポジションから目的地のポジションまでのパスを取得しそれにそってRayを飛ばしてルート上にドアがあるかを見ていました。ドアのお陰で非常にめんどくさかった。

 

ただ完成して気づいたのですが、この徘徊部分プレイヤーから全く見えないため正直ドアを開く音を慣らしてドアは開かずにすり抜けるのでもよかったなと。

工数の無駄でした。ゲーム全体の完成図を想像して作れない力不足。反省。残念。

 

結果AIはめんどくさい!

 

廃墟探索モードに関して

今回カメラモードを実装しました。

www.youtube.com

こちらはCineCameraの機能をフル活用しています。

カメラ操作はUE4エディターでの操作と同じにしているので普段UE4を触っている人なら接しやすいかと。是非廃墟で写真撮りたい人は使ってみてください。

 

ディレクターも嬉しそう

 

最後に

ゲームを2作もリリースできたことに対し本当に奇跡的な事が続いているなと思っています。関わってくださった方々、そしてプレイしてくれた方々に感謝します。

 

今後まとめるほどではない情報に関してはDorsalFinStudioのTwitterにちょこちょこ書いて行こうと思います。

twitter.com

 

 

ゲームのシステムに関して気になるところがあればTwitterのDMに連絡くれれば答えられる範囲ではありますが、返信しますのでよろしくです。

 

後、このブログには書いてないですけど真砂楼Switch版出ていますので!

store-jp.nintendo.com

よろしくお願いします!

 

【概要編】ホラーゲーム「真砂楼」発売しました。

恥ずかしながら戻ってまいりました。

数年ぶりの更新となります。

 

ひっそりとインディーでゲームを作っておりました。

f:id:Bussan_dayo:20210403183221p:plain

 

youtu.be

 

 

store.steampowered.com

買ってください。 (現在超絶最強の賛否両論の評価)

ゲーム内のラジオは自分なので声優としてもデビュー作だから買ってね。

 

ゲームの設計や仕組みなどに更新していこうとは思っていますが、やるやる詐欺が多いブログなのでやるかわかりません。

またゲーム実装に関しては特に難しいことをしなかったプロジェクトなので特筆して書くこともないです。(SteamAudioとか最適化は自分担当じゃないからわからない)

(ギミック系をモーションではなくシーケンサーで完結させたのはちょっと特殊かも・・・

トレーラーに関しては絵コンテ書いてそこから字幕含めシーケンサーで作ったのもちょっと特殊かも・・・)

 

開発体制

ディレクター、背景、ゲームデザインのあかたねさん

twitter.com

 

プログラム、ゲームデザインの自分

twitter.com

サウンド、最適化のTekktekkさん

twitter.com

がメインで開発を進めておりました。

 

開発期間は1年 基本土日作業

となります。

 

プロジェクトの方針としてとにかくリリースさせることだったのでどれだけ最短でゲームを完成させられるかをメインの指標として掲げました。

 

UE4に関して

UE4は素のエンジンを使用しています。エンジンに手を入れるとバージョンアップの作業工数が発生するためやらない事は最初決めていました。

そのため立案の段階でUE4が不得意とすることはやらなず(そもそも不得意なことをさせる時点でおかしい)UE4に優しい仕様に合わせる形にしました。

 

5年もUE4触ってると得意なことと不得意なことは瞬時に見抜ける特殊能力を得れるものですね・・・。

 

実装に関して

プロジェクトに関しては全てBlueprintで作成しています。

理由としましては

UEC++の恩恵が受けたとしてもゲームの質が上がるジャンルではない

・土日作業になるためNullアクセスでエディタークラッシュして他の人が作業が出来なくなるリスクを減らす

・BPにすることで何か大量の修正を行う事が発生した場合に作業を分散できる

などUEC++のメリットよりデメリットのほうが大きくなってしまったためとなります。

アクションゲーム以外の大規模プロジェクトだとシステムはC++、ロジックはBPであるべきですが少人数なので保守の観点でもBPのみで完結させる形としました。

(95%BPのゲームをコンシューマーで出した経験があるので特に不安はありませんでした。)

 

このゲームはローカライズに対応しており、ゲームの初回起動時にSteamクライアントにアクセスして言語を取得する必要がありましたがマーケットプレイスにBP化したプラグインがあったので金で解決しました。

 

 

書くの疲れてきたのでこのあたりにしますが、今回ゲームを出すに当たり様々な仮説を立てて勧めていたのでいつかその結果も共有できればと思います。

 

 後多分SteamAudioや最適化系は結構知見が溜まったのでTekkTekkさんがブログでまとめると思うのでそちらを見てください(自分もよくわかってない)

 

個人的な話

個人的に嬉しかったのは

・20代の目標だったインディーでゲーム発売を達成出来たこと。

・トレーラーの評判が良かったこと。

・自作の曲をゲーム内に入れられたこと。

・沢山の人が配信、実況してくれたこと。

RTAやってくれたこと

など色々と数え切れません。

 

soundcloud.com

 

この一年土日削ってゲーム作ってよかったなぁとしみじみ思います(高校の同級生から結婚報告きたときは何やってるんだろ・・・と思いましたが!!!)

みなさんもゲーム作りましょ!!

 

ではさよなら~!

自分用記事一覧

 

2018年 8月

過去記事書きなおします。

時が経ち今のルールに則ってない処理方法の修正及びバージョンアップによって意味のなくなった記事の削除を行います。

古い記事からメスを入れていきます。週一で。

あとドロンジョに踏まれる記事は必ず消します...

必ず....

 

 

物忘れが激しい自分が見やすいように作った記事一覧です。

宣伝です。

第4回ぷちコンで3位をいただきました。

[UE4] 第4回UE4ぷちコン、最優秀賞作品発表! | historia Inc - 株式会社ヒストリア

 

受賞したゲームの実行ファイルです!

unrealbussan.hatenablog.com

 

是非遊んでみてください!

 

2015年に作ったギミックたち - 僕の私のUnrealな日々

 

 

チュートリアル的な奴

UE4:Eventノードを使った簡単なBluePrintの作り方

色々あって悲しくなった記事です。

 

実装編

Widget

 ・タイトル画面でのボタンの設置について

ポーズ画面の作り方

 

VR

Oculusを使ってMMDに壁ドンしてもらう方法

簡単なOculus(VR)用のメインメニューの作り方

UE4+VR:画面の中心とオブジェクト(アクター)が重なった時にイベントを発生させるブループリントについて 

 

Player側の実装系

一人称と三人称の切り替えのBluePrintの作り方 (New:画像を入れ替えたためノードが少し見やすくなりました。)

カメラを動かした一人称と三人称の切り替えの実装について 

アサルトライフルのブループリントの実装について 

アクターへのターゲットのロックオンのブループリントの実装について 

リロードなどのステートマシンを使用しないアニメーションの実装について 

プレイヤーのKey入力を取得するActorの簡易的な実装

 

スローモーションの実装について

走ってくるゴブリンに物理シミュレートを使って転ばせる方法

 

サウンド系

サウンドの音量とピッチをBluePrintで上げ下げする

 

ギミック系

Gateを使った手動扉の実装について

アクターをマウスを使って回転させる 

ジップラインのブループリントの実装について 

ターザン(ぽい)ギミックを実装する。

 

被破壊メッシュ系

被破壊メッシュを使用してアサルトライフルで壁を壊す。

 

その他

レベルブループリントを用いないカメラの切り替えについて

キャラクターを変えた簡単なローカルマルチの実装について

構造体 実装メモ

メモ:NavMeshを動的にする 

コナミコマンドなどのコマンド入力の実装

:BoxCollisionのスケールをLineTraceでHitしたLocationまで伸ばすBPについて

 

マテリアル系

アクターのフェードアウトの実装について 

ギャグアニメによく使われるフェードアウトの作成 

オブジェクトのアウトラインをM_Highlightを使って光らせる。

 

配布物

:電子ロック 配布あり

TheForestっぽいクラフトのギミックのマクロの配布と使い方

 

BluePrint研究(気になったノードを調べる奴)

Random Point in Bounding Box メモ 

マテリアル研究

水に覆われてる球体について

マテリアル:Rotatorを使用してテクスチャを回転させる時に四隅に出てくる部分を消す 

その他

UE4:アセット購入時に使用できないネット専用クレカについて 々

UE4:アニメーションシーケンスでのNiagaraエフェクトの再生方法

 f:id:Bussan_dayo:20181124183629p:plain

 

お疲れ様です。

 

現在Chaos of warという変なゲームを作成中です。

 

このプロジェクトではカスケードそしてNiagaraを使用しています。

 

まだアーリーアクセスなのか、カスケードのようにアニメーションシーケンスでエフェクトを設定して確認する及びアタッチ機能がありません・・・。

 

f:id:Bussan_dayo:20181124172942p:plain

 

 

f:id:Bussan_dayo:20181124173027p:plain

 

そのため通知BPにてこの機能を補完することにしました。

f:id:Bussan_dayo:20181124183710p:plain

 

エフェクト提供:@torisutamoyasitwitter.com

 

まず通知BPの特性を説明します。

通知BPはサウンドやエフェクトをアニメーションシーケンス内にて発生及びスポーンさせることが可能です。

 

続きを読む

UE4:WheeledVehicleを用いたアクターへの乗車処理

 

f:id:Bussan_dayo:20181111175113p:plain

 

どうもです。

 

製作中のゲームで車への乗車処理を作成しました。

 

 

 簡易的な作成方法をまとめようと思います。

(マルチだとカメラカクつきが出たため処理を変えました。)

 

 

(手が上がっているのは気にしないで・・・・)

 

仕様

車に近づいて"E"を押すと車に乗れる

車に乗っている状態でEを押すと戻る

 

使用するもの

Vehicleテンプレート

ThirdPersonCharacterテンプレート

 

 

構成としてはコントローラー側で入力処理を行う。

BaseCharacterを作成しThirdPersonCharacterとDriverCharacterに継承させる。

カメラ処理はBaseCharacterで行う。

 

 

エンジンを起動しVehicleテンプレートを選択します。

f:id:Bussan_dayo:20181108165248p:plain

 

マップに配置されているSedanを選択し、詳細のInputからAutoReceiveinputをDisabledにします。

f:id:Bussan_dayo:20181108170303p:plain

 

続きを読む

UE4:新・簡単なOculus(VR)用のメインメニューの作り方(複数対応編 2018年バージョン)

この記事の複数対応についてTwitterのDMにて質問を受けましたので記事にしました。

UE4:簡単なOculus(VR)用のメインメニューの作り方 - 僕の私のUnrealな日々

 

 

 

BarWIDのコンポーネントプログレスとテキストを起きます。

 

 

 

アンカーは中央に設定してください

f:id:Bussan_dayo:20180826171238p:plain

 

コンポーネントをボックスコリジョンを親にして、子にWidgetを設定してください。

Widgetには先程作成したBarWIDを設定します。

f:id:Bussan_dayo:20180826171339p:plain

BoxのコリジョンをAllBlockに。WidgetをNoCollisionに設定してください

 

BarWID

BarWIDにてパーセントを設定する関数、Textにセットする関数を作成しました。

f:id:Bussan_dayo:20180826171551p:plain

f:id:Bussan_dayo:20180826171614p:plain

 

バインドを作成しテキストに設定を行いました。

f:id:Bussan_dayo:20180826171657p:plain

f:id:Bussan_dayo:20180826171715p:plain

 

LoadBarBP

タイムラインを作成しました。

f:id:Bussan_dayo:20180826171834p:plain

 

5秒間で1になるようなものです。プログレスバーの時間を変更する場合はここの時間の設定を変えてください。 

f:id:Bussan_dayo:20180826171847p:plain

 

 IsLoadingというBoolの変数を作成しました。EventLoadingに処理が走った際、Falseだったらタイムラインの処理が、EventStopLoadingの処理の際はTrueだった場合にタイムラインの処理が入るようにしました。

f:id:Bussan_dayo:20180826172005p:plain

 

処理終了後はOpenLevelを呼んでいます。Name型の変数を作って接続しています。

この変数は編集可能にしてください。

f:id:Bussan_dayo:20180826173808p:plain

 

 

 

ThirdPersonCharacter

 TickからLineTraceの処理を呼んでいます。これはカメラから1000離れた所までトレースを出すといったものです。HitActorにLoadBarBPをキャストで他のBPにあたった時の処理を弾いています。f:id:Bussan_dayo:20180826172154p:plain

 

LoadBPというLoadBarBP型の変数を作成し、変数がNullだった場合変数に入れEventLoadingを呼び出します。また、Traceに失敗知ている場合及びLoadBarBP型ではなかった場合、EventStopLoadingを呼び出し変数を空にします。 

 

f:id:Bussan_dayo:20180826173652p:plain

 

 レベルに配置し、作成した変数OpenLevelにレベル名を入れます。

f:id:Bussan_dayo:20180826173913p:plain

 

 Loadのバーのテキストにレベル名を入れたいのでBeginPlayでSetName関数にOpenLevelを入れます。

f:id:Bussan_dayo:20180826174025p:plain

 

 以上

 

Chaos of War:2月3月の進捗

 

f:id:Bussan_dayo:20180323204031p:plain

 

どうもです。 引き続き作っています。

 

WebPageを作成しました。

www.chaosofwar.com

 

3Dモデル、アニメーション担当が1人増え、5人になりました。 

 

 この2ヶ月で実装したものは以下の通りです。

サウンドの導入

エフェクト及び銃での攻撃のネットワークテスト

仮ゲームルールの追加

その他いろいろ

 

サウンドSEの導入

通常SpawnSoundAtLocationノードを使用してサウンドを再生するのですが、マルチになるとこれがめんどくさい。そこで色々と検証した結果、サウンドSEのみのBPを作成しました。

f:id:Bussan_dayo:20180323195528p:plain

 

続きを読む