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 への具体的な対応方法はこちら
オーバービューの説明的なビデオはこちら。
Android : gradle で定義された versionName を string リソースとして利用する
Android アプリではバージョン情報として versionCode と versionName があり、以下の様な形で gradle (app) で設定します。
defaultConfig { applicationId "com.example.increment" minSdkVersion 21 targetSdkVersion 23 versionCode 1 versionName "0.1" }
アプリのバージョン情報について TextView などで versionName を表示したい場合は、ここで定義された変数をアプリから参照できるようにするための処理を追加します(下3行)。
defaultConfig { applicationId "com.example.increment" minSdkVersion 21 targetSdkVersion 23 versionCode 1 versionName "0.1" } applicationVariants.all { variant -> variant.resValue "string", "versionName", variant.versionName }
これで、layout系の xml の中などで @string/versionName と指定すると "0.1" という文字列が得られるようになります。
(IDE上では"定義されていません"というエラーが表示されますが、実際にはビルドが通り、きちんと文字列が取得できます)
解説
applicationVariants.all { variant -> ... }
は全ての Build Variant (debug/release といった Build Type と Product Flavor の組み合わせ)に対して処理を行うという意味で、この中の
variant.resValue リソースの種類, リソース名, リソースの値
という構文の記述でリソースを追加で作成しています。
これは com.android.build.gradle.api.ApkVariant 型を持った variant の void resValue(String type, String name, String value)
という関数の呼び出しです。
今回の例ではリソースの値には、defaultConfig で定義された versionName を引っ張ってきており、結果的には以下の行を string.xml に加えたのと同じような効果が得られています。
<string name="versionName">0.1</string>
参考
Android : Error:Execution failed for task ':app:packageRelease'. > Unable to compute hash of .... build\intermediates\classes-proguard\release\classes.jar
ProGuard を有効にした Signed apk を作成しようとした際に発生しました。
Error:Execution failed for task ':app:packageRelease'. > Unable to compute hash of (プロジェクトのフォルダ)\app\build\intermediates\classes-proguard\release\classes.jar
compute hash of で示されていたファイルは存在しておらず、どうやら ProGuard で Warning が検出された場合に、このファイルが生成されないために起こるエラーのようです。
なぜかこのエラーが発生した際のログには ProGuard の Warning 表示がなかったのですが、ビルドし直すと大量に Warning はあったので、proguard-rules.pro に -dontwarn 行を加えたところエラーが解消しました。
自分の場合は Kotlin を使用したため Kotlin 関係の Warning が大量に出ていて、以下の行を追加しましたが、使っているライブラリによって必要な -dontwarn は異なり、参考先では java.nio.file
や com.google.android.gms
に対して -dontwarn を行っていました。
-dontwarn kotlin.dom.* -dontwarn org.w3c.dom.events.*
ProGuard は毎回鬼門です。。。