Unreal Engine : C++ クラスを削除する
- Visual Studio 上で削除対象のクラスの .h と .cpp を削除します
- Visual Stdio 2015 の Remove ではプロジェクトから削除するだけのようなので、エクスプローラーを開きファイルの実体も削除しておきます
- Visual Studio 上でソリューションをビルドします
- このタイミングでの Unreal Engine のエディタからのコンパイルは、先ほど削除したファイルが見つからない、というエラーで失敗しました
- Unreal Engine を一旦終了し、再度開きます
- Content Browser でクラスが消えていることを確認します
Content Browser からは削除やリネームができないんですね。
使っていないクラスを消すくらいならば大した問題はなさそうですが、クラスを継承した Blueprint が存在したりする場合や、削除ではなくクラス名の変更をする場合などはいろいろとややこしくなりそうです。
参考
Unreal Engine : C/C++ コードからのログ出力
コンソール(Output Log)へのログ出力と、ゲーム画面上へのログ出力の2通りの方法でログを確認できます。
Console ログ出力
UE_LOG(カテゴリ名, ログレベル, テキストフォーマット, テキスト引数)
を使用します。
カテゴリなし
// LogTemp は定義なしで使用可能なカテゴリです UE_LOG(LogTemp, Warning, TEXT("%s: Hello!"), __FUNCTIONW__);
単一ファイル用カテゴリ
// このカテゴリを使う .cpp 内で定義します // カテゴリ名を "(ダブルクオーテーション)で囲んで文字列として定義する必要はありません DEFINE_LOG_CATEGORY_STATIC(LogCategoryName, Warning, All); UE_LOG(LogCategoryName, Warning, TEXT("%s: Hello!"), __FUNCTIONW__);
複数ファイル用カテゴリ
// (プロジェクト名).h に書きます DECLARE_LOG_CATEGORY_EXTERN(LogCategoryName, Warning, All); // (プロジェクト名).cpp に書きます DEFINE_LOG_CATEGORY(LogCategoryName); // ログを出すところで UE_LOG(LogCategoryName, Warning, TEXT("%s: Hello!"), __FUNCTIONW__);
ログレベルの種類
レベル | 備考 |
---|---|
Fatal | コンソールにログを出力すると同時にゲームをクラッシュさせます (試しにコンストラクタに書いてみたらエディタの方がクラッシュしました…) |
Error | ログテキストは赤色 |
Warning | ログテキストは黄 |
Display | ログテキストは灰色 |
Log | Log 以下のレベルのメッセージはコンソールには出力されず、ログファイルにのみ記録されます (とドキュメントからは読み取れますが、自分の環境では Log までは Output Log に出力され、Verbose 以下から表示が消えました) |
Verbose | |
VeryVerbose | |
All | 実態は VeryVerbose です(All = VeryVerbose と定義されています) |
画面ログ出力
GEngine->AddOnScreenDebugMessage(id, 表示時間, テキスト色, 表示するテキスト)
を使用します。
GEngine は利用できない可能性があるので、AddOnScreenDebugMessage を呼び出す前にその有無をチェックする必要があります。マクロを書いておくと楽です。
#include "EngineGlobals.h" #include "Runtime/Engine/Classes/Engine/Engine.h" // 第1引数に -1 以外の数値を渡すと、前にその数値を使って出力したログを上書きします。-1 の場合は常に上書きせずログが追加されます。 // 第2引数は表示する時間(秒) #define DISPLAY_LOG(fmt, ...) if (GEngine) GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, FString::Printf(TEXT(fmt), __VA_ARGS__)); DISPLAY_LOG("%s: Hello at line %d", __FUNCTIONW__, __LINE__);
参考
Unreal Engine : Blueprint/UserWidget.h が Visual Studio で認識されない
- (プロジェクト).Build.cs ファイルに UMG を使うための依存関係を設定する
- 一度 Visual Studio を閉じ、エクスプローラーで .uproject ファイルを選択して右クリックメニューから "Generate Visual Studio project files" 選択する
これで Visual Studio のソリューションファイルが更新され、Blueprint/UserWidget.h が開けるようになり、 intellisense による UUserWidget などに対する補完も効くようになります。
// UMG を使う際に Games/(Project)/Source/(Project).Build.cs に必要な設定。Public の "UMG" と、Private の "Slate", "SlateCore"。 PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "UMG" }); PrivateDependencyModuleNames.AddRange(new string[] { "Slate", "SlateCore" });
参考
Unreal Engine : Starter Content を後から追加する
- Content Browser の Add New ボタン(左上緑色)を押して Add Feature or Content Pack を選択
- Content Packs タブから Starter Content を選択して Add to Project ボタンを押す
新規プロジェクト作成時のテンプレートとして使用できる他プロジェクトの Blueprint や C++ のコードも、Add Feature or Content Pack から追加可能。
Unreal Engine : C++ プロジェクトの作成でエラー
Common Tools for Visual C++ 2015 がインストールされていないせいでした。そういえば、Visual Studio 2015 はデフォルトでは C++ が入っていないんでしたね。
Visual Studio 2015 を Unreal Engine で使用するために必要な設定は以下のとおりです。
- 無料開発ツール - Visual Studio Community 2015 から Visual Studio 2015 Community をダウンロードします
- 自分の場合はすでに一部はインストール済みだったので Update を選択(次のダイアログが出てくるまで結構時間がかかりました)
- Update 終了後に出てくるダイアログで Modify を選択します
- インストールする機能を選択できるので、Programming Languages -> Visal C++ -> Common Tools for Visual C++ 2015 にチェックを入れて Next、Update と進みます
- 完了後 は PC の再起動が必要です。再起動後、Unreal Engine で C++ のプロジェクトが作成できるようになります
ちなみに最初に出たエラーメッセージの内容は以下の通り。
Running C:/Program Files/Epic Games/4.10/Engine/Binaries/DotNET/UnrealBuildTool.exe -projectfiles -project="E:/Project/UnrealEngine/BatteryController/BatteryController.uproject" -game -rocket -progress -2015 Visual C++ 2015 toolchain does not appear to be correctly installed. Please verify that "Common Tools for Visual C++ 2015" was selected when installing Visual Studio 2015. Discovering modules, targets and source code for game... UnrealBuildTool Exception: ERROR: Failed to find cl.exe in the default toolchain directory C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\../../VC/bin/amd64\cl.exe. Please verify that "Common Tools for Visual C++ 2015" was selected when installing Visual Studio 2015.
参考
Android : Overflow Menu で表示されるメニューに Horizontal の ImageButton 列を表示したかった(Chrome みたいに)
この画像の、メニュー上部に戻るボタンやお気に入りボタンが並んだものを作ろうとしたわけですが…
方法
具体的な方法は調査中であるものの、どうやら PopupWindow もしくは ListPopupWindow を使ってゴリ押しで実装するしかないようです。
あまり面倒なことはしたくなかったので、費用対効果を考えてとりあえず保留に。気が向いたらまた調べることにして、参考リンクだけ並べておきます。
参考
- android - Chrome-like display of menu - Stack Overflow
- ListPopupWindow | Android Developers
- android - ListPopupWindow not obeying WRAP_CONTENT width spec - Stack Overflow
- Android : Get view Reference to a Menu Item - Stack Overflow
- how to make animation for popup window in android - Stack Overflow
- android - Changing overflow icon in the action bar - Stack Overflow
Android : Runtime Permission 対応
Android 6.0 (Marshmallow, API level 23)に導入された Runtime permission に対応しようと思って調べたところ、インターネット接続に利用していた ACCESS_NETWORK_STATE と INTERNET は自動でパーミッションが付与される Normal Permissions という種類の権限に属していることがわかりました。
ゆえに結果的に今回対応は行わなかったのですが、今後に備えて参照したリンクだけまとめておきます。 対応のフローとしては、上2つの参考リンクでRuntime Permission 対応が必要な権限かを調べる → 具体的な対応方法を3つ目の参考リンクのサンプルに沿って実装する、という形になりそうです。
参考
- System Permissions | Android Developers
- ユーザに許可を求める必要のある権限のリストは、上記ページの Table 1. Dangerous permissions and permission groups に掲載されています
- Normal Permissions | Android Developers
- こちらはユーザに許可を求める必要のない権限のリスト。ユーザー目線で見ると「許可しない」という選択ができません。
- Working with System Permissions | Android Developers
- Runtime Permission への具体的な対応方法はこちら
オーバービューの説明的なビデオはこちら。