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

Wonder Rabbit Projectのなかのひとのブログ。主にC++。

UE4/C++: UMaterialInstanceDynamic を生成したり UPrimitive 的な何かにセットしたりするコードスニペット的なメモ

// ぱたーん1: マテリアルインスタンスダイナミックを複数の何かのマテリアルとして使いまわしたい場合 // 1.1. AActor 系のどこかなどで、とりあえずマテリアルインスタンスダイナミックをマテリアルアセットから作る: auto m = UMaterialInstanceDynamic::…

UE4 Plugin: SVG Importer Plugin

概要 UE4 で SVG をテクスチャーで扱いたかったけれど、 svgpp など使ってちまちま実装するよりも $19.99 で SVG Importer Plugin を買った方が楽そうだし、マーケットプレイスでも ☆5 が幾つもついているので試してみようかな、と思い試してみた記録。 SVG …

UE4-4.19 で Material Layers を試用する手順

概要 従来の UE4 では「マテリアルのレイヤーブレンド機能」=「マテリアル関数の合成機能」でした。4.19以降で試験実装された "Material Layers" を使うと「マテリアル関数」ではなく、新たなアセットとして追加される「マテリアルレイヤー」と「マテリアル…

UE4/C++: 4.18 以降発生するクリップボードのAPI仕様変更に伴う警告と必要な修正

状況 FGenericPlatformMisc::ClipboardCopy または FGenericPlatformMisc::ClipboardPaste を使用している場合、UE4-4.18 以降で API の仕様変更に伴う警告が翻訳時に発生する。 warning C4996: 'FGenericPlatformMisc::ClipboardCopy': FPlatformMisc::Clip…

UE4/C++: 4.18 -> 4.19 エンジンアップデートトラブル; `UMaterialInstance::GetVectorParameterValue` の仕様変更と "Material Layers"

現行プロジェクトに必要なプラグインの 4.19 対応も進んできたので、手元のプロジェクトを 4.18 から 4.19 へエンジンアップデートしてみました。エンジンの仕様変更によるトラブルがあったので対処方法と併せて紹介します。 4.18 -> 4.19 における UMateria…

UE4/C++: JSON/XML/portable-binary 等の汎用シリアライズライブラリー cereal に UE4 の各種型を非侵入型アダプターで対応させるライブラリー cereal-UE4 を公開しました

cereal-UE4 GitHub - usagi/cereal-UE4: cereal ( C++ serialization library ) adapter for UE4 ( Unreal Engine ) types cereal について https://uscilab.github.io/cereal/ 近年モダンな C++er にしばしば使われていると思われる JSON / XML / Binary ( …

UE4: std::unordered_map だと少し面倒だけど TMap なら簡単にできる Key の書き換え

// てきとーな TMap TMap< FString, int32 > m; m.Add( "hoge", 123 ); m.Add( "fuga", 234 ); m.Add( "piyo", 345 ); // マップの対を逐次参照で列挙しつつ Key を書き換える for ( auto& p : m ) p.Key = p.Key .Replace( TEXT( "g" ), TEXT( "G" ) ) .Rep…

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

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

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

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

UE4: Blueprint 向けに提供する C++ 関数を pure に定義するメモ

1. AActor などの派生型でメンバー関数を pure にしたい場合 UFUNCTION で BlueprintCallable フラグを付けたメンバー関数を const 定義すれば自動的に blueprint でも pure になる。 2. UBlueprintFunctionLibrary 派生型の static メンバー関数を pure に…

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

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

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

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

キーボード: Azio Retro Classic Posh

美しいキーボードというのも魅力的なもので、 Azio Retro Classic Posh を Makuake で購入していたものが昨年末に届き、数日間使ってみた。 タイプライターの「カチッ」を再現。ヴィンテージ感溢れる高性能キーボード。 | クラウドファンディング - Makuake…

A Poem of "Hello, World!" using C++

0. はじめに この記事は 初心者C++er Advent Calendar 2017 の DAY 24 に寄稿したものです。 概要 「C++初心者向けの記事を書く」というお題のアドベンカレンダーがあったので、私が思いつく限りで兎にも角にも "Hello, World!" を出力する C++ を使ったコー…

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 Q5 のこたえ、マクローリン展開による sin/cos の高速化に潜んでいた大きな誤差を生じるバグ

概要 この記事を書くきっかけは先日書いた記事 CPP-QUIZ from Unreal 2017 ( part-1/2; 出題編 ) の Q5. について、こたえとして掲載したコードについて、 Twitter にて @nekketsuuu さんから次のようなご指摘を頂いた事でした。ありがとうございます @USAGI…

CPU: Intel が SIMD 命令の拡張にアフィン変換を追加する、という話の中身と影響する分野について

Intel が SIMD 命令の拡張にアフィン変換を追加するらしい(参考2) との事で、 "Intel® Architecture Instruction Set Extensions and Future Features Programming Reference" (参考1) を見てきました。アフィン変換は Computer Graphics 界隈の人々が反…

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 の価格にも "これくらいなら" とポチってしまうか…