投稿

2022の投稿を表示しています

BluePrintからC++ Functionを呼ぶ手順

イメージ
Projectを作成 Tools->New C++ Class... Blueprint Function Libraryを選択, Next>をクリック Nameに好きなLibrary名(ここではNacashaFunctionLibrary)を入れ、Create Classをクリック 以下の Messagega表示されたらOKをクリックしUE editorをクローズ後、プロジェクト内にできた*.slnをダブルクリックしVisual Studio 2019を起動する。 この後、コンパイルをするかを聞いてくるのでYesをクリッするとVS2019が立ち上がる。 VS上でCtrl+Shift+Bを押し、コンパイルを開始する。以下のメッセージが表示だれたら正常にプロジェクトにC++クラスが追加されBPから使用する環境が出来上がったことになる。 2>[8/9] Link UnrealEditor-CPPtoBP.dll 2>   Creating library C:\Users\nakas\Documents\Unreal Projects\CPPtoBP\Intermediate\Build\Win64\UnrealEditor\Development\CPPtoBP\UnrealEditor-CPPtoBP.suppressed.lib and object C:\Users\nakas\Documents\Unreal Projects\CPPtoBP\Intermediate\Build\Win64\UnrealEditor\Development\CPPtoBP\UnrealEditor-CPPtoBP.suppressed.exp 2>[9/9] WriteMetadata CPPtoBPEditor.target 2>Total time in Parallel executor: 25.30 seconds 2>Total execution time: 27.68 seconds ========== Rebuild All: 1 succeeded, 0 failed, 1 skipped ========== クラスにUFUNCTIONを定義してコンパイルする。 ここは時間があるときに書く F5を押すとUE5が起

BlueprintからC++のメンバーをアクセスするためのマクロ

TestClass.h UFUNCTION(BlueprintCallable) void TestDo(); UPROPERTY(BLueprintReadWrite) float TestValue; TestClass.cpp void TestClass::TestDo() {     // ここが処理される } こうすることにより、Blueprintよりアクセス可能となる。

Unreal engine: A fatal error occurred. The required library hostfxr.dll could not be found.

イメージ
Unreal engine 5でC++のプロジェクトを作ろうとして以下のエラーが表示されたら.Netのコンポーネントがインストールされていないのが原因である。  An error occurred while trying to generate project files. Running C:/Program Files/Epic Games/UE_5.0/Engine/Binaries/DotNET/UnrealBuildTool/UnrealBuildTool.exe  -projectfiles -project="C:/Users/[User name]/Documents/Unreal Projects/MyProject/MyProject.uproject" -game -rocket -progress A fatal error occurred. The required library hostfxr.dll could not be found. If this is a self-contained application, that library should exist in [C:\Program Files\Epic Games\UE_5.0\Engine\Binaries\DotNET\UnrealBuildTool\]. If this is a framework-dependent application, install the runtime in the global location [C:\Program Files\dotnet] or use the DOTNET_ROOT environment variable to specify the runtime location or register the runtime location in [HKLM\SOFTWARE\dotnet\Setup\InstalledVersions\x64\InstallLocation]. The .NET Core runtime can be found at:   - https://aka.ms/dotnet-core-applaunch?missing_runtime=true&am

Unreal Engine 5 BluePrints アライメントの方法

イメージ
 各のノードの接続部分、 ・接続を直線化を選ぶとGrid単位のスナップで水平線にならなかった接続先のノードラインを水平にできる。 英語版ではStraghten Connection...と表示される。 サブメニューにはすべて接続を直線に整える(これが直線化の意味)のと接続先を個別に直線に整えることが可能な項目が表示される。

BlueprintとGUI、C++とCLI

イメージ
Blueprintで書いているとテキストのほうが効率的では?と思うようになった。昔GUIで操作するよりCLIで操作したほうが簡単で効率が上がると気がついたときと似ているか、BPは本当にシンプルなときだけかな。 以下はリカーシブルコール有のBP  今度やってみるけどC++だったら数行で書ける気がする。

Dual boot Linux and Windows時の時刻のズレを直す。

イメージ
同じPCでLinux使用後Windowsを使うと時刻が9時間ずれる。これを修正するには以下のようにUbuntuで実行すれば解決される。 timedatectl set-local-rtc 1 ※念の為、できるだけソフトウェアを起動せず設定し、Software update中行わないことや、設定後再起動をオススメする。 ズレる理由はWindowsはPCの時刻をローカル時間(日本時間)で保存使用するため、しかし、LinuxはUTC(世界標準時間)で保存使用するためである。 解決策は大きく分けて3つあるが 1.Linuxをローカル時間で動作させる。(上の方法) 2.WindowsをUTC時間で動作させる。 3.両OSとも起動時に時刻をインターネット同期する。 3のWindows側では時刻同期を効率化のため、行わないことがあるので(設定時は上手く動いているようにみえるが後日動かないなど)現実的ではない。 1はオープン・ソースであるLinux側で変更したほうが安定する。世界中のプログラマが対処してくれているからだ(さらに今のWindowsはWindows内でUbuntuを実行できるので対応は安定していると思われる)。逆に2ではWindowsをUTCにするといろいろなソフトウェアがProprietary(クローズ・ソース)なので不具合があっても対処法が限定されるので現実的ではない。 警告:ただし以下のようにまだすべてサポートされているわけではないのでソフトウェアよっては不具合の可能性がある。(Ubuntu 22.04LTS)

UbuntuへKAMVAS Huion 24plusインストール

イメージ
UbuntuへHuion KAMVAS 24plusインストール手順は以下のようにします。(例ではUbuntu 22.04LTSを使用) HuionのサイトからLinuxのドライバをDLします。Ubuntu用debファイルのみのようです(これが私がLinuxでもDebian系(Ubuntu/Mint)を使う理由) ターミナル(Windowsでいうコマンド・プロンプト)を開いて以下をカット&ペーストします。 ただしdebファイル名はドライバのバージョンによってことなります。 sudo dpkg -i HuionTablet_v15.0.0.89.202205241352.x86_64.deb インストール完了後、WINキーを押下後、huionと打ちます。 エンターして、ドライバ制御用GUIを起動、その中のWorking Areaをクリックしてタブレットを使うスクリーンを設定します。ペンとスクリーン位置のキャリブレーションも別メニューから行うことが可能です。 はじめ、以下の表示がされたあと2,3秒表示後、デバイスが認識された画面が表示されます。しかし、変わらない場合はLinuxを再起動してみてください。私はこれで認識されました(上の画像は認識されている状態)。 Youtube(hideさん)のサイトを参考に液タブ描画テスト。絵の下手さは素人なので許して下さい。動作は特に問題はないようです。

Ubuntu 22.04ではGrub2のGUI カスタマイザが削除

 Ubuntu 22.04ではGrub2のGUI カスタマイザ(Grub Customizer)が削除された。 一応、PPAを追加すれば以下のようにインストール可能、バグがあり削除されたようだがいつも最小限の構成にしたいのでTextでカスタマイズを行う。 目的は1度前に選択した場所をデフォルトする。である。 オフィシャル: https://help.ubuntu.com/community/Grub2/Setup 方法 - Open terminal sudo nano /etc/default/grub - Edit GRUB_DEFAULT=saved GRUB_SAVEDEFAULT=true - After save sudo update-grub - Reboot Grub CustomizerをUbuntu以外のリポジトリからインストール: https://ubuntuhandbook.org/index.php/2022/04/install-grub-customizer-ubuntu-2204/ 尚、TIMEOUTを変更したいときは以下を変更。 GRUB_TIMEOUT=10

CitySample Unreal Engine5

イメージ
DLの容量は100G弱。 動きましたBig_city。でもメモリを32GRAM(圧縮されている)使い切っているね。OSトータルで48GBぐらい? FPSは遅い。 一瞬Cyberpunkかと思ってしまう。Tutorialからあるように、露出は人間の目に合わせて自動的にかわる。 暗いところへ行くと明るい場所が眩しくなる。RTも良い感じ。

UE5, Naniteノート

イメージ
参考動画: https://www.youtube.com/watch?v=xUUSsXswyZM   UE5 Naniteは各メッシュのNaniteをチェック。 それだけ。 で、一人で作っていたら3年以上かかりそうな機能(出来るかどうかも不明)を使える。 ※以下は覚えるため私が翻訳しているので正しい保証はない。 Nanite Setup Overview スタティックメッシュのみ(DeformされないMesh) No skeletal meshes No World Position Offset NaniteとNon-NaniteのGeometryを両方持てる Massive poly countsが持てる、なぜなら... より高速でより効率化されてたレンダリングをする 可視出来る部分だけ細かくロードし見せる NaniteをサポートできるMeshを有効にする Nanite meshesはミリオンpolyは必要でないが、サポートされている。 Art Production Pipeline Nanite以前 With Nanite

UE5とWorld Partition

イメージ
https://www.youtube.com/watch?v=ZxJ5DG8Ytog&t=406s 上の動画内、World Partitionのメモである。 Grids内Cell Size等は変更して、自動に反映することが可能 以下が自動化するかの設定場所である。 これらはCmdletからも実行可能である。 説明は省略。 円の中心はPlayerで円は範囲を示す。 白いラインは観ている方向。グリーンがロード、赤がアンロードを示し、Playerが移動するとリアルタイムでそれが行われている。このHLOD機能があるだけでもUE5を使う価値があるというものだ。 HLOD用データはCmdletから可能で別PCでコンバート作業させることができ処理を分散可能である。

UE5のOne File Per Actorのファイル構造とチェックアウト

イメージ
https://www.youtube.com/watch?v=ZxJ5DG8Ytog&t=406s 上の動画内のOne File Per Actorのファイル構造とチェックアウトの説明部を文書化。 One File Per Actorのドキュメントを読むよりも現実的なので比較的頭に入ってくる。 数千バイトから300MBのサイズのファイルからなっている。 フォルダを観ると2021/8/12になっているので最近である。 Moorは8KBだが__ExternalActors__のサブフォルダMoorには以下のように大量なフォルダが存在する。 さらにその中にはいくつかのサブフォルダとデータがある。 これらにはこのワールドのAssetの参照が入っている。 あるActorを変更すると下のように上のフォルダの一部がCheck Outすることができる。 BigRock12, Game/__ExternalActors__/Moor/3D/Y9/AMQ******をチェックアウトするかと表示されている。これによって複数人が並行で作業できるということだ。 自動チェックアウトも設定で選ぶことが可能である。Edit>Editor Preferences>Loading & Saving>SOURCE CONTROL内 有効にするのにはUse External Acotersをチェックすれば良い。

Levelデザインする前に決めるサイズ

 Unreal engineだけに限ったことではないが、Level designする前に決めておくサイズ。この基準を作っておかないとあとで面倒なことになる。 以下のTutorialが考え方の参考になる。 Architectural Scale vs. Game Metrics Architecture -Building Story     4m -Floor depth 1m -Wall depth 0.25m Game Metrics -Character width 0.9m -Character height 1.96m -Character crouch height 1.1m -Character jump Z distance 1.4m -Character jump X distance 4m https://learn.unrealengine.com/course/3754334/module/7274126?moduletoken=UHxxnDLPW8QpVAW8lQxqoJlZD44CzJcqSD72WQNcpD9UNTyUKmWwYhRt7NC5j0tY&LPId=0

約10年ぶりにC++を使って面白く感じた点

 Unreal Engineを使うため、再びC++(約X0年使用)を使うことになったが改良点としていくつか便利と思った。 static_assert(), constexprと関わるとおもうがコンパイル時にAssertを評価してくれる。前にこんなのがほしいと思っていたがしっかり追加されている。 nullptr,昔は#define NULLを使っていたがコンパイル側に組み込まれた。 &&,無駄にコピー処理をおこなわないのが良い。考えた人エライ! string_view,安全に文字を定義できる。 遅まきながらu8がC++20で追加になったのはちょと可笑しかった。はじめはcharを使えばいいのでいらないと考えたようだがc#やpython3, javaを使っている身にとって、まだそんな考えがあったのかとつい思ったw C#で好きな文字書式指定に似たstd::format、変数の個数チェックしてくれる。でもまだC#の$""のほうが直感的で使いやすい。formatではまだ古さを感じる。 atomicでないvolatile変数へのアクセスにワーニングが表示される(C++20, VS2019では/Wall,  /W3で表示しても良い気がするけど) 微妙なのはauto、lambda関数やtemplateに使うためと思われるがあまり使いたくないと思った。乱使用によってコードが汚くなりそう。 もう少し、シンプルなコードになる工夫されていればとちょと感じた。なんか増々ツギハギだらけな言語という印象を受けた。 いまのところ、こんな感じ。

Unreal engine key board binding

イメージ
 Godotなどと同じだがProject Setting内でキーを指定し、codeでBindingする。 void ACollidingPawn :: SetupPlayerInputComponent ( class UInputComponent * InInputComponent ) {     Super :: SetupPlayerInputComponent ( InInputComponent );     InInputComponent -> BindAction ( "ParticleToggle" , IE_Pressed, this , & ACollidingPawn ::ParticleToggle);     InInputComponent -> BindAxis ( "MoveForward" , this , & ACollidingPawn ::MoveForward);     InInputComponent -> BindAxis ( "MoveRight" , this , & ACollidingPawn ::MoveRight);     InInputComponent -> BindAxis ( "Turn" , this , & ACollidingPawn ::Turn); }

熟成されたUnreal EngineのVector class

 UEではIsNearlyZero()のような便利な関数がある。これはfloat型が誤差のため完全に0にならないための誤差を考慮したMethodである。熟成されていないEngineなどはなかったりするのでいちいち作っていた。しかも状況によって範囲をかえたりする調整が必要で思った以上に時間がかかる。 こんなことからUEの熟成度を感じてしまう。 FVector DesiredMOvementThisFrame = ConsumeInputVector().GetClampedToMaxSize(1.0f) * DeltaTime * 150.0f; if (!DesiredMOvementThisFrame. IsNearlyZero ()) { }

ゲーム中に押したくない仮想ディスクトップのショートカット

イメージ
ゲームでは不要な 仮想ディスクトップ 特にキャラクタ移動のWASDのDとControlキー(良い位置なのでゲーム用の機能を割り当てるのが普通)を押すと同時に隣のWindowsキーを押してしまい発生する。 その場合、ゲーム画面がなにもないDesktopへ変化して、ESportゲームなどは競技中なので戻ろうとしてパニックになる。  ゲーミングキーボードの高性能なものはゲーム中Windowsキーを無効にするものもあるがそれを忘れることも多いし、自動にすることもできるがバグが多く使わなくなった経緯がある。 また時々スピーカとヘッドフォンを変えたいためタスクバーを出したいこともあるのでWindowsキーは無効にしたくないときもある。 もし仮想ディスクトップへ移動したらWindowsキー+Ctrl+F4を押すことを覚えておくとパニックならないが、普通は覚えられないよねw  無効化するのに限る がいまのところなさそうだ。 ゲーム中にたまに押してしまうため、イライラする代表格。 いつのまにか35個の仮想ディスクトップがあったw

Unreal-engineのスタイルガイド

UE スタイルガイド https://github.com/Allar/ue5-style-guide C++ スタイルガイド https://docs.unrealengine.com/4.27/en-US/ProductionPipelines/DevelopmentSetup/CodingStandard/ これらは初めに読んで出来るだけ慣れよう。 これじゃないと違和感が出てくるぐらいに。 ただ最優先はチームに合わせること。

Unreal engineのためPCの性能改善

イメージ
 ADATA XPG GAMMIX S70 BLADE 1TB (読取最大 7,400MB/秒)のSSD初めて購入したがなかなか良い。 PCIe4x4は高速。UEは高スペックPCを必要とするため交換。 尚、まだDefragしていない(Win7からのUpgradeを繰り返しているイメージ)がSSDあまり必要ではない。ADATAサイトからゲットしたClone softはCrashして使えなかった。Youtubeで紹介されていたMiniTool ShadowMaker Freeを使用。  Amazon JPのポイントアップキャンペーンだったのもあった。

Unreal engine, C++ compilerではコンパイルされないマクロ

イメージ
 以下のUObjectのマクロはC++ compilerではコンパイルされず, UE toolsによって使われる。( 実際にはToolによりコードが入る可能性有 ) #define UPROPERTY(...) #define UFUNCTION(...) #define USTRUCT(...) #define UMETA(...) #define UPARAM(...) #define UENUM(...) #define UDELEGATE(...) #define RIGVM_METHOD(...) なので、ココを編集するとUE Editor内(特にDetails)が変化する。 

Unreal engine/DirectXとBlender/OpenGLの座標系

イメージ
 Unreal Engine/Direct X/Unity 左手座標系, left-handed coordinate system Blender/Open GL/Godot/LibGdx 右手座標系,right-handed coordinate system

Unreal Engine開始

 本日からUnreal Engineを開始する。 基本はUE5だが、これは春にリリースされるのでそれまで 4.7を中心に行う。