C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

UE4

UE4: バイナリー配布や実行時リンク向けのライブラリーを UE4 プロジェクトへ組み入れる方法を mecab で解説

概要 UE4 のプロジェクトの C++ コードへ UE4 とは特に関係の無い一般のライブラリーをリンクするのは少々面倒な事がある。ヘッダーオンリーなライブラリー、例えば Eigen や stb あるいは Boost の一部をリンクするような場合は困らない。しかし、バイナリ…

UE4: Blueprint 向けに WorldContextObject が必要な機能を提供する際に暗黙的に WorldContextObject を扱わせられるように C++ コードで対応する方法

概要 状況の例として、 Blueprint へ特定のアクターを引っ張り出させる次のような実装を提供したいとする。 設計上必ず1つ AMySpecialActor が配置されていて、 // 定義はどうあれ、どこかに定義され1つだけは常に配置される AMySpecialSomething アクター U…

UE4: スクリーンサイズ可変に対応したスクリーン座標へのUMGの表示のブループリント備忘録

アクターのロケーションなど適当な World 座標を基準にHUD風にUMGを表示したい場合、 World 座標から ConvertWorldLocationToScreenLocation で得られるスクリーン座標をそのまま Set Render Translation へ放り込むとスクリーンサイズ可変の場合には実際の…

UE4: FHttpModule 系の HTTP リクエスト機構を使い "同期処理" する方法

概要 UE4 で HTTP リクエストを飛ばしたい場合、 HTTP モジュールを有効化し、 FHttpModule::Get で得たオブジェクトから FHttpModule::CreateRequest し、 IHttpRequest のプラットフォームのオブジェクトを得て URL 等の必要なリクエストパラメーター及び …

UE4: 点や線を簡易的に3D空間内へ描画する方法、あるいは UKismetSystemLibrary::DrawDebug 系の紹介

概要 見栄えはともかく、3D空間内の任意の座標へ、点や線、あるいは立方体や球などを、さっくりと簡単に表示したい事がしばしばあります。特にデバッグ用途でそのような表示機能を上手く仕込んで置くと開発効率が向上します。 そのような場合に、わざわざ Bi…

UE4: TPSカメラの当たり判定を on/off する簡単な方法、あるいは USpringArmComponent のそれについて

概要 TPS テンプレートで生成されるような、プレイヤーの回りにぐるぐるとカメラを回す実装ではしばしば床、天井、柱、地形、キャラクター、その他の何らかの物体に対して「カメラの当たり判定」が有って欲しい状況と無い方が好ましい状況、あるいは実行中の…

UE4: UnrealWebServer Plugin が 1.4+ のバージョンアップで URL ハンドラーの path ワイルドカードと接続情報からの path の取得に対応

概要 プラグインのバージョン情報の定義は 1.4 のままですが、 UnrealWebServer が更新され、新機能が追加されました。今回追加された新機能は以前にバグレポートとパッチをなかのひとへ送った際に「ついでに将来的にこんな機能にも対応してくれたら嬉しいな…

CPP-QUIZ from Unreal 2017 ( part-2/2; 答え編 )

(この記事は前の投稿 CPP-QUIZ from Unreal 2017 ( part-2/2; 出題編 ) に対応する答え編です。) 2. こたえ Q1. float 型の [ 0.0 .. 1.0 ] の値を uint8 型の [ 0 .. 256 ) へ写像したかった 出題のソースコードでは、 "出力が 255 となる元の値の範囲" …

CPP-QUIZ from Unreal 2017 ( part-1/2; 出題編 )

0. はじめに この記事は C++ Advent Calendar 2017 の DAY 1 に寄稿したものです。 初日は楽しい記事が良いだろうと考え、クイズ形式で C++ コードを楽しむコンセプトで記事を書くことにしました。今年は UE4 の C++ 実装を眺める時間が業務でも多くなりまし…

Real Unreal Engine C++ 2017-12 (part-5/5)

(はてなブログの記事あたりの容量制限のため前の部分 §1.10. までは前の記事でどうぞ→Real Unreal Engine C++ 2017-12 (part-4/5) - C++ ときどき ごはん、わりとてぃーぶれいく☆) 1.11. UE4/C++ における入門的な「スレッド」ライブラリーの std 互換性 s…

Real Unreal Engine C++ 2017-12 (part-4/5)

(はてなブログの記事あたりの容量制限のため前の部分 §1.9.4 までは前の記事でどうぞ→http://usagi.hatenablog.jp/entry/2017/12/01/ac_ue4_2_p3) 1.9.5 FMath に含まれる型 FMath には3次元の可視空間を扱う上で必要な形状や数値を扱うための型も定義され…

Real Unreal Engine C++ 2017-12 (part-3/5)

(はてなブログの記事あたりの容量制限のため前の部分 §1.9.3 までは前の記事でどうぞ→Real Unreal Engine C++ 2017-12 (part-2/5) - C++ ときどき ごはん、わりとてぃーぶれいく☆) 1.9.4. Fmath の真価 前項では FMath について少し残念な結果も見えたが、…

Real Unreal Engine C++ 2017-12 (part-2/5)

(はてなブログの記事あたりの容量制限のため前の部分 §1.8. までは前の記事でどうぞ→http://usagi.hatenablog.jp/entry/2017/12/01/ac_ue4_2) 1.9. UE4/C++ における入門的な「数学」ライブラリーの std 互換性と独自性 1.9.1. FMath における C++ CRT 互…

Real Unreal Engine C++ 2017-12 (part-1/5)

0. はじめに この記事は Unreal Engine 4 (UE4) その2 Advent Calendar 2017 の DAY 1 に寄稿したものです。 1. 概要 std 慣れしたプロフェッショナルとしてある程度の経験と知識のあるベテランの C++er でも UE4 フレームワークの C++ ソースコードと対峙す…

UE4: クラスファイルにたいてい仕込むログマクロの糖衣マクロ

UE4 に C++ コードファイルを追加する場合、特に UCLASS では規模がよほど小さくない限りたいてい定義するログマクロの定義と糖衣を紹介。 // MyHoge.h // コンパイラーオプションで MYHOGE_ENABLE_LOG=1 など明示的に渡されない場合でも // デバッグビルド…

UE4: UnrealWebServer-1.4 の GetData に文字列末尾が汚染されるバグを見つけたので応急対処法

1. UnrealWebServer Unreal Web Server – IsaraTech 2. 問題 UnrealWebServer-1.4 の GetData API の返り値の文字列の末尾がランダムな文字群で汚染されるバグに遭遇した。高頻度で汚染される。 GetData API は POST のリクエストボディー全体を一括取得する…

UE4: 4.17.2 -> 4.18.1 プロジェクトのアップデートで発生した Warning と Error と対処メモ

若干の調査は必要なものの何れも些細な単純な置き換えで済む問題だけで済んだ。 Warning 1. AddTorque は AddTorqueInRadians に置き換えよ warning C4996: 'UPrimitiveComponent::AddTorque': Use AddTorqueInRadians instead. Please update your code to …

UE4: Free Voxel Plugin の作者が Marketpalce にて $99.99 で売り出された Voxel Plugin に痛烈なコメントを付けている件

Marketplace に出品された問題のプラグインは↓の "Voxel Plugin" https://www.unrealengine.com/marketplace/voxel-plugin 知らずに一見すると素晴らしいボクセル地形のプラグインと錯覚してしまい、 $99.99 の価格にも "これくらいなら" とポチってしまうか…

UE4: コンポーネントをアタッチする状況により潜む罠

今回紹介する「コンポーネントのアタッチ状況により潜む罠」は3つ以上のコンポーネントを"縦"にアタッチ(†)する場合に生じる可能性のある罠です。 例として、2つの USceneComponent と1つの UStaticMeshComponent を"縦"にアタッチする状況を幾つか挙げま…

UE4: 4.18 で追加された VSCode プロジェクト生成に少しだけ追加すると便利な事

1. launch.json の <ProjectName>Editor (DebugGame) の args に -game を追加する UE4Editor に -game を追加して実行すると、 UE4Editor の IDE のユーザーインターフェース類を表示せずに擬似的に直接プロジェクトのバイナリーを実行したのと同様の状態でデバッグ実行</projectname>…

UE4: 4.18 で VSCode に UE4Editor が対応したのでロストテクノロジーをメモしておく

Note: この記事は UE4Editor の公式対応で VSCode では不要になるロストテクノロジーについてメモするものです。 UE4Editor の VSCode 対応については参考1、参考2をどうぞ。 私はこれまでもVSCodeに幾つかのコマンドラインをカスタム定義して与えてUE4のプ…

UE4: 4.18 で Static Mesh のコンテキストメニューから Create Destructible Mesh できなくなっていた件と解決方法

事象 4.17.2 ではコンテントブラウザーで任意の Static Mesh を右クリックして現れるコンテキストメニューにあった Create Destructible Mesh が 4.18.0 では消えてしまい、代わりに "Remove Vertex Colors" が出現しているように見える。 原因 4.18.0 から …

UE4: C++ クラスで実装したアクターのコンポーネントの OnComponentBeginOverlap.AddDynamic 等がうまく動作しない時に確認すること

「C++ でアクターを実装し、 StaticMeshComponent のオーバーラップイベントを受けたい、と思ったがなぜか StaticMeshComponent に OnComponentBeginOverlap.AddDynamic した this の TriggerEnter が呼ばれない。」 そんな時には UFUNCTION が TriggerEnter…

UE4: C++ コード から C++ クラスまたは Blueprint のアクターを FindObject して SpawnActor する方法

UE4/C++er も Blueprint クラスを C++ コードから使用する必要がある場合はまま生じます。C++で実装するよりも Blueprint で実装した方が都合の善いクラスを C++ で実装したクラスから扱いたい場合にどうするか、 SpawnActor する場合を例に、 C++ クラスを…

趣味のゲーム、作り始めました😃

うちのこ🐰 今日から作り始めたゲームのプレイヤーキャラクター😀 ちょっとまだぎこちない動きだけど、止まったり歩いたり跳ねたり匂い嗅いだり警戒したりできるようになりました😃 Usagi Itoさん(@usagi_wrp)がシェアした投稿 - 2017 10月 14 4:05午前 PDT

UE4のエンジンアップデートで調整済みのBPを消し飛ばしてしまった備忘録

UE4で開発中に編集するコンテントにはプロジェクトごとに管理されるユーザー定義のソースやブループリントやマテリアルの他に、エンジンのコンテントを参照するものが含まれる事があります。例えば、 BP_Sky_Sphere とか。 今回のやらかした記録はそのUE4の…

UE4: 4.16 から 4.17 へアップグレードした際に遭遇した諸問題と解決について

4.16で開発していたプロジェクトを4.17へアップグレードした際に遭遇した問題と解決方法を整理します。 問題と解決方法 1. 4.15 向けのプラグインがビルド不能に陥った レベル内の重力を器用に扱いたい場合に便利なプラグインとして CustomGravityPlugin (…

UE4/C++: アクターのメンバー関数内で AActor 派生の任意のユーザー定義型のオブジェクトを列挙する方法

// TActorIterator で AActor 派生の任意のユーザー定義型のオブジェクトを列挙 // AHogePawn は列挙したい AActor 派生のユーザー定義型 // GetWorld() は AActor のメンバー関数 { auto counter = 0; for ( TActorIterator< AHogePawn > i( GetWorld() ); …

UE4/C++: メッシュのマテリアルやテクスチャーをC++コードで制御する方法

要点を整理しようと思ったらソースの例示しかない記事になりました(ノω・)テヘ // マテリアルをロードしてメッシュへ設定する // mesh: UPrimitive またはその派生型( UStaticMeshComponent, UProceduralMeshComponent など)のポインターオブジェクト // elem…

UE4/C++ Tick が来ない!そんなときのトラブルシュート備忘録

「Tick が来ない!」、たまによくあるのは私だけでしょうか。 UHogeFugaComponent の TickComponent が来ない、 AHogeFugaActor の Tick が来ない、などなど。そんな場合の備忘録です。 疑い(1): bCanEverTick が false コンストラクター等で bCanEverTick …