遂に発売!聖剣伝説3 Trials of Mana!
合法エロゲやら性剣伝説やらいろいろ言われてますが遂に発売しました
聖剣伝説3 Trials of Mana
皆様!どうぞ!!!!よろしく!!!!!!!!!!お願いします!!!!!!!!!!!!!!!https://t.co/S9EQ7fyvbshttps://t.co/LipnowTD4W
— たいら (@DJ_HIRAYOSI) 2020年4月23日
思い出せばいろいろ苦労しました。
そう・・・とても・・・苦労しました・・・
しかしこうやって無事に発売され、昨今では実況プレイで生配信などでユーザーの声が聞ける!良い時代になりました。
評価の方は概ね好評。中には「リメイクとはこうあるべきだ。ほかのリメイクも聖剣伝説を見習うべきだ」と評価していただいてありがたい限りです。
個人的にはもう少し面白さを求められたのではゲフンゲフン
私自身はSteam版を購入予定ですので現時点(2020/4/24 22:00)ではまだプレイできないのですが、今からプレイするのが楽しみです(死ぬほどプレイしたはずなんですけど楽しみです)
いろいろ知見や実装方法などたまったので、一部分をこう使えば良いよね、といったことをブログ化しても良いかもしれないですね。
ということで皆様、聖剣伝説3 Trials of Manaをよろしくお願いいたします!
新モニターを購入した
あまり大きくないモニターがほしくてつい買ってしまった。
12000円。まぁ安くはないけどなかなか満足の行く買い物だったかなと思う。
ついでに部屋の掃除もして作業環境を整えた。
※真ん中下の奴は液タブ
最近スマホ二台持ちしたいなぁとか思い始めてきたけど、ほしい端末がありすぎて困る。でも二台持ちしたからといって何に使うかといわれると、用途が思い浮かばない。
なのでここは「買う理由が値段なら買うな。買わない理由が値段なら買え」という信条にさらに「用途を考えて迷うなら買うな」が追加されました。
まぁ当たり前のことなんだけどね。
本当に欲しいものだったら値段がいくらでも買うと思うし、必要ないかも?なものが安かったらとりあえず買っとこって言って結局使わないことが多くなる。
今後は物を買う前はこれを口に出そうと思う。そうしたらより良いお金の使い方ができそうだ。
日記的なブログ記事はもしかすると初めてかもしれない。最初で最後の可能性はなくもない。
Oculus QuestをUE4で使う備忘録
忘年会でOculusQuest当てたので
忘年会でオキュラス当たってとても気分が良い。これからまた仕事に戻るけどそんなのは全部帳消しや!!! pic.twitter.com/opK7Ljd12c
— たいら (@DJ_HIRAYOSI) 2019年12月27日
帰宅即開封の儀 pic.twitter.com/9dPp5bbSAd
— たいら (@DJ_HIRAYOSI) 2019年12月27日
UE4.24.1
何番煎じかわからんけどとりあえず備忘録ってブログ名だし・・・いいよね!
①USB接続のType-Cを購入
https://www.amazon.co.jp/dp/B01LQ26IYM/ref=cm_sw_r_tw_dp_U_x_AS2bEbBQSPVQT
NintendoSwitchですでに購入済みだった。ラッキー
②Oculus アプリをPCにインストール
たぶんOculus Linkとかで調べてPCゲーやろうとしている人は既に入ってるはず
www.oculus.com
Rift Sのソフトウェアをダウンロード・インストール
③Oculus Questを開発者モードにする
kimono-oyaji.com
④Android Codeworksをインストール
EngineInstallPath\UE_4.XX\Engine\Extras\AndroidWorks\Win64 CodeWorksforAndroid-1R7u1-windows
AndroidSDK4.4.2用をインストール。
上記完了後下記バッチからAPI19を選択してインストール
NVPACK\android-sdk-windows\tools android.bat
⑤プロジェクトを作成。
取りあえずVRテンプレート。C++でやりたい場合はBlankとかで。
⑥UE4でAndroid用設定
プロジェクト設定->プラットフォーム->Android
最低限のSDKバージョンとターゲットSDKバージョンを19以上にする
Oculus モバイルデバイス向けのパッケージにOculusQuestを追加
上記完了後一応再起動する
⑦セットアップ完了!あとはお好きにVR開発ライフを!
詰まった点
①VRプレビューしてもプレビューできない
→OculusLinkでPCとOculusQuestを接続しておく必要がある。
②OculusQuestのそもそも初期設定ができない
→iPhone or Androidで対応のOculusアプリをインストールして初期設定
③コントローラーが動かない
→なんか適当にやったら治った。謎(調べないと)
過去にこんな講演してるんで開発に役立ててやってください
BuildConfigration.xmlの備忘録+α
Engine\Programs\NotForLicensees\UnrealBuildTool\BuildConfiguration.xml
↓
Engine\Saved\UnrealBuildTool\BuildConfiguration.xml
↓
C:\Users\username\AppData\Roaming\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml
↓
C:\Users\username\Documents\Unreal Engine\UnrealBuildTool\BuildConfiguration.xml
この順番で読み込まれる。後に読み込まれるやつほど優先度が高い。
+α
AndroidとかWindowsなど、プラットフォームに分けて処理
#if PLATFORM_○○(ANDROIDとかWINDOWSとか)
#endif
プロジェクトC++コードをバッチでビルドする備忘録+α
for /f "tokens=1,2,*" %%A IN ('reg query "ROOTKEY\SUBKEY" /v "VALUEKIND" ') do if "%%i"=="RegistoryKey" SET GET_VALUE=%%k %GET_VALUE%Engine/Build/BatchFiles/Rebuild.bat GameProjectEditor Win64 Development -Project="uprojectpath\project.uproject" -WaitMutex -FromMsBuild pause
エンジンインストールしてるパスを取得して中にバッチリストの中からRebuildバッチを指定してプロジェクトをリビルドする感じ。多分行ける。
"GameProjectEditor "部分は各プロジェクト名に応じて変わる。気を付けるべし。
もちろんBuild.batもある。
ROOTKEYメモ
HKEY_LOCAL_MACHINE → HKLM HKEY_CURRENT_USER → HKCU HKEY_CURRENT_CONFIG → HKCC HKEY_CLASSES_ROOT → HKCR HKEY_USERS → HKU
↓↓↓もっと詳しく↓↓↓
www.atmarkit.co.jp
これ見てもわからない人はレジストリ触ろうとしないでね。(今回は編集してないけど)
↑の記事が消えていたとき用
レジストリの構成要素 レジストリとは、Windowsシステム内部の各種設定値を保存しておくためのデータベースである。 システムの設定やソフトウェアの構成内容、ユーザーごとの環境設定など、Windows OS内で動作しているさまざまなコンポーネントがこのレジストリを参照して動作している。 レジストリ中には、ツリー状の「キー」が構築されている。 トップにあるのが「ルートキー」、その下にあるのが「サブキー」だ。 それらの中に、幾つかの「値」が設定されている。値は名前と種類(型)、データで構成されている。 これは「ユーザー環境変数」を保持しているレジストリキーの例である。
+α
~powershellで特殊パス取得~
Desktop | C:\Users\accountname\Desktop | |
Programs | C:\Users\accountname\AppData\Roaming\Microsoft\Windows\Start Menu\Programs | |
Personal | C:\Users\accountname\Documents | |
MyDocuments | C:\Users\accountname\Documents | |
Favorites | C:\Users\accountname\Favorites | |
Startup | C:\Users\accountname\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup | |
Recent | C:\Users\accountname\AppData\Roaming\Microsoft\Windows\Recent | |
SendTo | C:\Users\accountname\AppData\Roaming\Microsoft\Windows\SendTo | |
StartMenu | C:\Users\accountname\AppData\Roaming\Microsoft\Windows\Start Menu | |
MyMusic | C:\Users\accountname\Music | |
DesktopDirectory | C:\Users\accountname\Desktop | |
MyComputer | ||
Templates | C:\Users\accountname\AppData\Roaming\Microsoft\Windows\Templates | |
ApplicationData | C:\Users\accountname\AppData\Roaming | |
LocalApplicationData | C:\Users\accountname\AppData\Local | |
InternetCache | C:\Users\accountname\AppData\Local\Microsoft\Windows\Temporary Internet Files | |
Cookies | C:\Users\accountname\AppData\Roaming\Microsoft\Windows\Cookies | |
History | C:\Users\accountname\AppData\Local\Microsoft\Windows\History | |
CommonApplicationData | C:\ProgramData | |
System | C:\Windows\system32 | |
ProgramFiles | C:\Program Files | |
MyPictures | C:\Users\accountname\Pictures | |
CommonProgramFiles | C:\Program Files\Common Files |
~リダイレクタ修正~
UE4Editor.exe ProjectName -run=fixupredirects
ウインドウのアクティブ・非アクティブの瞬間を取得する方法の備忘録
どうやらApplicationLifecycleComponentというものがあるらしいので使ってみた。
結果->失敗
モバイル機のみらしい・・・
ということでエンジンを見てみた。
WindowsApplication.cppで色々制御を行っていてFWindowsApplication::ProcessDeferredMessageという関数があったのでここにApplicationLifecycle(FCoreDelegates::)のデリゲート呼び出したら行けそう。
WindowsApplication.cpp 1543行目~
int32 FWindowsApplication::ProcessDeferredMessage( const FDeferredWindowsMessage& DeferredMessage ) { if ( Windows.Num() && DeferredMessage.NativeWindow.IsValid() ) { HWND hwnd = DeferredMessage.hWND; uint32 msg = DeferredMessage.Message; WPARAM wParam = DeferredMessage.wParam; LPARAM lParam = DeferredMessage.lParam; ==================================================省略================================================== ~~~~~~~1980行目くらい // Window focus and activation case WM_ACTIVATE: { EWindowActivation ActivationType; if (LOWORD(wParam) & WA_ACTIVE) { ActivationType = bForceActivateByMouse ? EWindowActivation::ActivateByMouse : EWindowActivation::Activate; } else if (LOWORD(wParam) & WA_CLICKACTIVE) { ActivationType = EWindowActivation::ActivateByMouse; } else { ActivationType = EWindowActivation::Deactivate; /********↓ここを追加↓*********/ FCoreDelegates::ApplicationWillEnterBackgroundDelegate.Broadcast(); } bForceActivateByMouse = false; UpdateAllModifierKeyStates(); if ( CurrentNativeEventWindowPtr.IsValid() ) { BOOL Result = false; Result = MessageHandler->OnWindowActivationChanged( CurrentNativeEventWindowPtr.ToSharedRef(), ActivationType ); return Result ? 0 : 1; } return 1; } break; case WM_ACTIVATEAPP: UpdateAllModifierKeyStates(); ==================================================省略================================================== }
行けました。
if (LOWORD(wParam) & WA_ACTIVE) else if (LOWORD(wParam) & WA_CLICKACTIVE)
こいつらどう挙動がちがうんだろう。
マウスでアクティブ化したときとalt+tabとかでアクティブ化した時の場合分けやろ(多分)
暇な時に要検証・・・知ってる人いたら教えて下さい。
12/29追記
Twitterで教えてもらいました
感謝です。
docs.microsoft.com
場面転換的なクロスフェードの備忘録
お久しぶりでございます。
平成も終わり令和になりましたので久しぶりの記事を書きます。今回はクロスフェードの実装。
クロスフェード自体は一瞬で終わるので、クロスフェードの中でも、ワープや場面転換に使えそうなクロスフェードを実装。
一瞬で終わるクロスフェードの実装
マテリアル作成してMaterialDomainをPostProcessにして以下の通りにノード組んでBPでLerpを0-1で変動サせていくだけ!簡単!
↑に追加実装をしてみる。
今回はこんな感じで実装。
SceneCapture2Dを使います。なんかこの間登壇したときもその前登壇したときもこれについて喋った気がする。SceneCapture2D大好き。
例えばこんな感じで配置(ここに配置しているのはSceneCapture2Dではなく、普通のカメラです。)
今回の実装用にマテリアルを組み直し。
このときマテリアルの設定のBlendableLocationの設定次第ではかなり絵が暗くなるので、ポストプロセス的に問題なければ、BlendableLocationはToneMapping前にしておくと良いでしょう。(実はなんで絵が変わるかは雰囲気でしかわかってない。教えてほしい・・・切実に)
次にBPの実装
今回は汎用性は何も考えずにレベルブループリントに書いていく。
scenecapture2dで使う用のrendertarget生成
パラメータ変更用にDynamicMaterialInstanceを生成(処理負荷的に少しでも抑えるために、SceneCapture2Dの毎フレームのキャプチャー処理をオフに)
クロスフェード前処理
Lerpのパラメータ更新にはタイムラインノードを使用
以上で完成。
上記のままだと1回しかできないので、各々使い方に応じて適宜追加・修正してください。
なお激重なので基本的にはFrameGrabberを使うか、エンジン改造でシェーダー書かないとダメそうかも。