投稿

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

約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を中心に行う。