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

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

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

MSVC++ BUG: C Preprocessor is not capable empty argument

MSVC++(2017; cl.exe-19.11.25547) で C プリプロセッサーのマクロが空の引数を受け付けない C++11/14/17, C99/11 に対する規格違反を報告しました。 https://connect.microsoft.com/VisualStudio/feedback/details/3144014 概要 #define X( X0 ) something …

C++: C プリプロセッサーで定義されるマクロに空のパラメーターを渡す合法性

背景 ソースコード中に大量の少し複雑なアクセサー大量に定義する必要があり、久しぶりに C プリプロセッサーのマクロでアートする機会がありました。マクロを組み上げる上で1つ気になる事が生じました。「マクロに空のパラメーターを渡すのは合法か?」と。…

UE4 の EULA と GPL 、プラグインが内包するソースで確認が必要だったはなし

UE4 EULA と GPL UE4/EULA では UE4 と一緒に使ってはダメなソースコードのライセンスを明記しています。一部抜粋。 Other Restrictions Non-Compatible Licenses You may not combine, Distribute, or otherwise use the Licensed Technology with any code…

UE4: UnrealWebServer Plugin が 1.4 にアップデート、機能追加& UE-4.18 対応

UE4 プロジェクトから簡単にウェブサーバーを建てるのに便利な UnrealWebServer プラグインがアップデートされました。今回の更新では開発元の IsaraTech. のなかの Thomas さんから「キミがリクエストしていた機能つけてアップデート公開したよ!」とお知ら…

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: 柄の付いた道具の当たり判定

1. 導入 例として「つるはし」の当たり判定を考えてみる。 岩につるはしが当たって効果がある部分は"柄"(一般に木製の棒; stick)ではなく、その先に装着した"頭"(一般に鋼鉄製; head)の部分だけ。便宜上のゲーム表現では柄は当たり判定なし、頭だけ当た…

スマートフォンが落下などにより画面を使用不能に陥った場合の対処方法

Zenfone Go がトイレへ駆け込む際にトイレットペーパーを補充しようとしている間に棚から落ちて画面が死にました。 まあ、操作できません。しかし、幸いな事にこの Android 端末は USB デバッグ機能が ON に設定されています。そこで Vysor を PC の Chrome …

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