3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

UE4 で入力周り考察(2)

Last updated at Posted at 2015-12-31

環境

UE 4.10.0
Visual Studio 2015

概要

Unreal Engine 4 を触ってみて動作を確認する
入力周り考察(1)の続き
http://qiita.com/maprog/items/56c8e6d91b81c74e8f07

本文

入力管理クラスの確認

アプリケーションで管理している(はず)の入力を管理している場所を探していた所
FSlateApplication クラスを見つけた。このクラスは、各種プラットフォーム毎
に実装しなければならないアプリケーションのフレームワークを抽象化したクラス
のようだ。
メンバ関数を確認してみると PollGameDeviceState という関数がある。察するに
これが各種入力デバイスを、各種プラットフォームの API から取得する関数だと
思われる。という事は、このクラスが各種プラットフォームの入力データを管理して
いる可能性は高い。幸いにしてこのクラスはシングルトンなのでアプリケーション側
からアクセスは簡単にできる。

FSlateApplication にアクセスしてみる

とりあえず、インスタンスにアクセスして、コンパイルしてみる

[コード]
※ SlateApplication.h をインクルードする事
const FSlateApplication& rApp = FSlateApplication::Get();

すると、リンクエラーが発生する。
Visual Studio 2015 Express だからか、リンクエラーのメッセージが文字化け
していてはっきりしないが、リンクエラーなのでモジュールが見えていないのだろう。
いつものようにライブラリを追加するのか?と思ったが UE4 のビルドシステムは通常
のアプリケーションと違う為、確認が必要だと思い再び調査を開始

UE4 のビルドシステム

UE4 のビルドシステムは、どうなっているのだろうか?
コードのホットリロードに対応している事から、エディタで作成したコードはモジュール
化されている事は明白だ。windows の場合は dll として出力されている。
dll 出力の際に、いくつかのビルドシステムが連携している。
とりあえず Build.cs を確認してみると、以下のコードがあった。

[コード]
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore" });

PrivateDependencyModuleNames.AddRange(new string[] { });

上記コードでは、モジュール作成の際に依存関係を持つモジュールをリンクするものだと
推察される。FSlateApplication にアクセスする場合、ここにモジュールを追加すれば
参照できるに違いない。コードを以下のように修正して、プロジェクトをリビルドしてみた。

[コード]
PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "Slate" });

PrivateDependencyModuleNames.AddRange(new string[] { });

無事、リンクエラーを回避できた。

マウスカーソルの値を取得する

ようやく本題に戻る。
FSlateApplication クラスからマウスカーソルの座標をログとして表示する関数を作成して
みた。アウトプットログにマウスのスクリーン座標が表示されるはず。

[コード]
void Func()
{
const FSlateApplication& rApp = FSlateApplication::Get();

FVector2D pos = rApp.GetCursorPos();
UE_LOG(LogTemp, Warning, TEXT("cursor pos : %f %f"), pos.X, pos.Y);

}

まとめ

FSlateApplication クラスはアプリケーションを抽象化したクラス。
アクセスするには Build.cs に "Slate" モジュールを追加する必要がある。
シングルトンなので、アクセスできれば後は必要な関数を呼び出すだけで良いようだ。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?