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

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

tips

UE4/C++: http(s) リクエストに FHttpModule 系を使う場合の OnProcessRequestComplete/FHttpRequestCompleteDelegate の成否フラグの注意どころ

UE4 の FHttpModule の OnProcessRequestComplete / FHttpRequestCompleteDelegate には若干、罠どころがある // UE4/C++ でフレームワークに用意された方法で HTTP リクエストを発行し、 // HTTP レスポンスを得て何かしたい場合のコード例 auto http = &FH…

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: 点や線を簡易的に3D空間内へ描画する方法、あるいは UKismetSystemLibrary::DrawDebug 系の紹介

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

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

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

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

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

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

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

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

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

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++ クラスを…

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

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

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

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

UE4 の UCLASS の定義の基底クラスに名前空間を使っている子が居る場合の不幸と安直な回避策について

現状の UE4 で C++ の namespace を使おうと思っても面倒事が増えるだけなので、現実問題としてはわざわざ UE4 の C++ コードを記述するに当たっては namespace を用いないほうが賢い。少なくとも UE-4.16 現在は。 しかし、そうは言っても、世の中の素敵な …

UProceduralMeshComponent などの UMeshComponent のマテリアルを実行時にC++で変更する方法

特に UProceduralMeshComponent を使う場合など UMeshComponent 系のメッシュ mesh のマテリアルを実行時に変更したい場合は以下のようにする。 mesh->SetMaterial ( 0 // Note: マテリアルをセットしたいメッシュ内のセクション番号 , Cast<UMaterial> // Note: 今回は</umaterial>…

UProceduralMeshComponent::UpdateMeshSection_LinearColor で一部の引数(頂点属性)だけ更新する方法

以下のコードの結果は同じです・w・ // code-1 ... mesh->CreateMeshSection_LinearColor ( 0 , vertices , indices , normals , texcoords0 , vertex_colors , tangents , true ); // code-2 ... mesh->CreateMeshSection_LinearColor ( 0 , vertices , in…

Color programming tips with C++ samples: RGB24(16777216色)に対しHSL24は十分な分解能を持っているか?

今回は色の話。PCでは長らく16777216色を誇るRGB24がディスプレイはじめ色を取り扱う際の標準として利用されてきた。RGBなのかBGRなのかなどは今回の本題では無いのでスルーする。また、制限された環境におけるRGB16やRGB15であるとか65536色中同時256色であ…

GCC4.7.1: C++11 と OpenMP のちょっと惜しい関係

C++11から言語仕様のスレッディング周りが強化され、thread、atomic、mutexなどなど言語標準機能として扱える様になり、ちょっとやそっとやそれなりの用途でもintel TBBやBoost.Threadに頼らずにマルチスレッディングソフトウェアを開発し易くなりました。 …

openSUSE-12.2 / Razor-qt : キーボードのリピート間隔などを簡単に設定する方法

状況 デスクトップ環境にKDE Plasmaを選択すればデフォルトでインストールされるKDEの設定パネルからキーボードレイアウトやリピート間隔を簡単に設定できる。 しかし、Razor-qtにはその様なコンフィグレーションツールが無い。 参考 Razor-qt@github https:…

memo: openSUSE-12.2; systemctl start fam.service が failed するのを解決する

状況 設置仕立てのcourier-imap-sslにthunderbirdで繋いでみたら矢鱈ととんでも無い勢いで Jan 2 03:45:16 LH-SVR5 imapd-ssl: Error: Input/output error Jan 2 03:45:16 LH-SVR5 imapd-ssl: Check for proper operation and configuration Jan 2 03:45:16 …

memo: yast に firewall が無いと思ったら? openSUSE-12.2

状況 yast ... あれ、firewallの設定ない? 理由 zypper se firewall リポジトリのデータを読み込んでいます... インストール済みのパッケージを読み込んでいます... S | 名前 | 概要 | 種類 --+------------------------------------+---------------------…

memo: install ChiliProject 3.3 to openSUSE-12.2

ChiliProject公式の以下にopenSUSE-11.3へのインストールがまとめられているが、これはやらない。 https://www.chiliproject.org/projects/chiliproject/wiki/Installation_on_OpenSUSE_11_3 最新安定版をbundle使って入れましょう。以下の後半を参考に。 ht…

Google Spreadsheet における indirect のTipsと concatenate の必要性

状況 Google Spreadsheet にて vlookup 等の引数に indirect を用いて別シートの範囲を参照させようとした。 しかし、 sheet1!A1 = "hoge" sheet1!B1 = "fuga" sheet1!C1 = vlookup( B1, indirect( A1 + "!A:B" ) ) こんな感じでは失敗する。 問題の指摘と解…

Qt / qmake / 簡単なリソースファイルの取り扱い方

先の記事のあーうーから、結局自前で簡単なスクリプトを qmake の .pro に書いてみる事にした。 状況 .cxxなどの通常のビルド対象の他に、 .qml とか .png とか .mp3 とかそういう外部リソースファイルがある場合に、 qmake が生成する Makefile でよしなにD…

Linuxの小技 sudo su -c command

/sbin のコマンドなんかは sudo で権限だけ昇格してもパスの都合使えない事もある。そんな時は、 sudo su -c command とすると sudo の認証管理で su -c command が実行され、 su はログイン時に /etc/profile を処理するので通常管理者権限のパスも処理され…

egrepの結果の表示順序とsort、シェルを便利にオレオレ関数を作りましょう。

(※今回はリアルにLinuxの入門講座を受講している程度の方へ、って感じのtipsみたいな形になりました。)あるディテくトリーに、 1 2 3 4 5 6 7 8 9 というファイル名で同じデータの書き込まれたテキストファイルがあったとしましょう。 % /bin/ls 1 2 3 4 5…

CMakeの公式チュートリアルをC++11脳で読み進めるにゃ・w・

cmakeについて漸く自分でも使ってみようと思いチュートリアルをC++11仕様に勝手に脳内変換しながら読むなどしていた。C++11erがcmakeを学習する際に初めに困る事は恐らく「g++にstd=c++11を渡す方法」だと思う。cmakeを習得済みならば困る事は無いはずだが、…