エンジニアもどきのよしなしごと

仕事や趣味の備忘録

Victory Pluginのご紹介

この記事はUnrealEngine 4 (UE4) 其の弐 Advent Calendar 2015の18日目の記事です。

qiita.com

気づいたら開発者っていうよりも、UE4関連の情報を共有・拡散する人になりつつあるUsuiと申します。

昨日は@tarotarokunさんの、「C++を使ったSocketを使った通信周りの書き方」という記事でした。ゲーム同士の通信だけではなく、昨今注目されているIoTデバイスにも応用が利くということで、そちら方面にも興味がある身としては、非常に為になる内容でした。ありがとうございます!

 

さて、今回はVictoryPluginの概要と導入手順、また用意されているブループリントノードを何点か紹介したいと思います。

プラグインを導入した上でのパッケージング等については触れておりませんので、その点ご了承ください。

また、間違いがありましたら、やんわり指摘いただけると助かります(苦笑)

 

VictoryPluginとは?

forums.unrealengine.com

C++コードからしか使用できない機能をブループリントで使えるようにしよう!」という意図の元で、現在も機能の追加が行われているプラグインです。

中身は凡そ200~300個のブループリントのノード群で構成されており、数学計算補助、各種ファイルの読み書き、物理、アニメーション、ネットワークなど、その種類も多岐に渡っています。

 

開発をメインで行っているのは、Rama Iyerさん。

VictoryPlugin以外にも、様々な知見をForumsやEpic Wiki、ご自身のサイトへ投稿されていらっしゃいます。最近Twitterも始められたようです。

RamaさんのTwitter:@ue4code

ご自身が更新したForumsの告知等を行っていらっしゃいますので、興味がわいた方はフォローしてみてはいかがでしょうか?

 

VictoryPluginの導入

  1. Rama's Vertex Snap Editor Plugin - Epic Wikiにアクセスします。

  2. Plugin Release Dates and UE4 Engine Versionsと記載された下に、UE4のエンジンバージョンに対応したVictory Pluginのバージョン(リリース日付)が記載されています。今回はUE4.9.2に対応している「October 14th, 2015」をダウンロードします。

  3. File:VictoryPlugin.zip - Epic Wikiにアクセスし、先ほど確認した日付のzipファイルをダウンロードします。Date/Time欄のリンクをクリックすれば、ダウンロードが始まります。

  4. zip形式のファイルとなっているので、それを解凍します。
  5. 導入したいUE4のプロジェクトフォルダの下(Config, Content等と同じ場所)に、「Plugins」フォルダがあるかを確認します。無ければ作成します。
  6. Pluginsフォルダの下に、先ほど解凍したフォルダをコピーします。
  7. UE4エディタを起動します。
  8. メニューから編集->Pluginsを選択します。
  9. 以下の画像のようにProject下に、Victory Pluginという項目が出来ていること、その中のVictory Editor & Blueprint Libraryの、Enabledのチェックが入っているかを確認し、入っていなければチェックを入れます。            f:id:usui3153m:20151213071911p:plain

  10. ブループリントのEventGraph(レベルブループリントでも、アクターに紐づくブループリントでも、どれでも構いません。)で右クリックをし、ブループリント上で使用可能なノードの一覧を表示させ、「Victory BP Library」という項目が追加されていることを確認します。  f:id:usui3153m:20151217003450p:plain

以上で導入は終了です。

 

ブループリントノードの紹介

膨大なブループリントノードの中から何個か紹介したいと思います。

あえてばらばらのジャンルから抜き出して記載していますので、見づらいかもしれませんが、その点ご了承ください。

キー入力周りに関しては、黒幕さんがまとめてくださっていますので、そちらを参考のほど。

qiita.com

 

JoyFileIO_GetFiles

f:id:usui3153m:20151215174106p:plain

引数

 Root Folder Full Path:ファイルを検索するフォルダパス(絶対パスを指定)

 Ext:ファイルの検索条件。指定が無い場合は全てのファイルを取得する。

        *.*のように指定。

戻値

 Files:取得したファイル名。

 Return Value:true=取得に成功。

フォルダまでの絶対パスと検索するキーワードを指定して、一致したファイル全ての名前を取得します。

ファイル読み込み関連では、サブフォルダまで検索を行うものや、全てのセーブデータファイル名を取得する。といったノードが用意されています。

GetAllWidgetsOfClass

f:id:usui3153m:20151215174104p:plain

引数

 Widget Class:取得したいWidgetClass

 Top Level Only:true = ビューポート上に設定されているものの中から取得する。

戻値

 Found Widgets:見つかったウィジェットオブジェクト

プロジェクト上に設定されている指定したWidget Classのオブジェクトを全て取得します。

UMG関連では、ビューポート上に存在する指定WidgetClassを全て削除するものや、指定WidgetClassが存在しているかどうかを調べるといったノードが用意されています。

RealWorldTime__GetDifferenceBetweenTimes

f:id:usui3153m:20151215174059p:plain

引数

 Previous Time 1:差分をとりたい時間1

 Previous Time 2:差分をとりたい時間2

 ※フォーマットはFDataTime.ToString()に則ったもの。

戻値

 Milliseconds:ミリ秒

 Seconds:秒

 Minutes:分

 Hours:時間

時間を指定して、それらの差分を取得します。

時間処理関連では、現在時刻(OSに設定されている時間)を取得するものや、現在時間と比較したい時間を設定し、その差分を取得するようなノードも用意されています。

Physics__EnterRagDoll

f:id:usui3153m:20151215174107p:plain

引数

 The Character:ラグドール状態にしたいキャラクターオブジェクト

戻値

 Return Value:true=ラグドール状態にすることに成功した。

指定したキャラクターをラグドール状態にします。

ラグドール関連では、指定キャラクターがラグドール状態か判定するものや、ラグドール状態になった場所の座標を取得するもの、ラグドール状態から復帰させるといったノードも用意されています。

Conversion__FloatToRoundedInteger

f:id:usui3153m:20151215174103p:plain

引数

 IN Float :変換したいfloat値

戻値

 Return Value:変換されたint値

float値の小数第一位を四捨五入して、int値を返します。

数学処理関連では、+=, -=の演算子を使用可能とするもの、int, float配列をソートするもの、最大値、最小値を取得するものなど、数多くノードが用意されています。

また、TKMathFunctionLibraryという、数学処理メインのBlueprintFunctionLibraryもVictoryPluginの中に付属しています。

HasSubstring

f:id:usui3153m:20151215174105p:plain

引数

 Search In :検索対象となる文字列

 Substring:検索したい文字列

 Search Case :大文字、小文字で分けて判定するか否か。

 Search Dir:文字列の先頭から検索するか、末尾から検索するか。

戻値

 Return Value:true=文字列が見つかった。

検索対象となる文字列の中に、指定した文字列があるかどうかを調べます。

文字列処理関連では、文字列を結合するもの、各文字列に接頭語をつけて結合するといったノードがあります。

 VictorySoundVolumeChange

f:id:usui3153m:20151215174102p:plain

引数

 SoundClassObject:音量を調整したいサウンドクラスオブジェクト

 NewVolume:設定したい音量

戻値

 ReturnValue:true=音量設定成功

指定したサウンドクラスオブジェクトの音量を変更します。

サウンド関連では、サウンドクラスオブジェクトから現在の音量を取得するノードもあります。

 VictoryGetCustomConfigVar_Bool

f:id:usui3153m:20151217003509p:plain

引数

 SectionName:指定変数が設定されているセクション名

 VariableName:取得したい変数名

戻値

 Return Value:VariableNameに設定されていた値

プロジェクトフォルダ/Saved/Config/WIndows/Game.iniファイルから指定のデータを取得します。

同様のものが以下の変数の型分用意されています。

 

 変数の型:int32,float,FVector,FRotator,FLinearColor,FString

 VictorySetCustomConfigVar_Bool
f:id:usui3153m:20151217004132p:plain

引数

 SectionName:指定変数を保存したいセクション名

 VariableName:保存したい値の変数名

 Value:VariableNameとして保存したい値

プロジェクトフォルダ/Saved/Config/WIndows/Game.iniファイルに指定のデータを設定します。

同様のものが以下の変数の型分用意されています。

 変数の型:int32,float,FVector,FRotator,FLinearColor,FString

 

まとめ

VictoryPluginの導入から機能の紹介までというテーマで今回ざっくりと書かせていただきましたが、いかがでしたでしょうか?

他にどんな機能があるのか気になる!という方は、冒頭で紹介したスレッドで1つ1つ機能が解説されていますので、そちらを見てみることをオススメします。

ソースコードを読むことに抵抗が無いのであれば、プラグインをダウンロードして、ソースを読んだほうが早いかもしれません。

普段ブループリントのみで開発をされている方々にとっても、またプラグイン開発、ブループリント関数ライブラリの開発に興味がある方にとっても、非常に有用なプラグインだと思いますので、興味がわいた方は、ぜひダウンロードして使ってみてください!

 

告知

ただ、正直英語ばっかり(APIリファレンスも英語しかないし)の中で、Google翻訳に頼ったり、辞書引いたりして調べるのは面倒だと、仰る貴方に朗報です。

VictoryPluginの各ブループリントノードの機能を日本語でまとめた上で公開します!

現在、絶賛中身の解析・コメントの翻訳等々を行っているところです。

…この記事を公開する時点では、7割くらい調べられていたらいいなーと考えています。(笑)

Googleスプレッドシートで公開するのか、エクセルファイルを配布するのか、ホームページやwikiページを作成するのか、そのあたりはまだ決めていませんので、欲しいという方がいらっしゃいましたら、ご意見いただけると助かります。

また、既に利用されている方がいらっしゃいましたら、このブループリントはこんな機能だったよ。とか教えていただけると幸いです。

 

 明日のUE4 Advent Calendar

 明日は@s_ssk13さんこと、我らが佐々木さんです!

「何かやります!」とのことですが、一体どんな内容になるのでしょうか…?

非常に楽しみです。佐々木さん、よろしくお願いします!

 

最後まで目を通してくださり、ありがとうございました! 

 

UE4関係のとあるページと、とあるbot×2を作りました。

お疲れ様です。

前回vagrant関係の記事を書いてからひと月近く経過していることに驚きを隠せないUsuiです。

仕事でばたばたしていたり、twitter上でばたばたしていたりといったことが落ち着きましたので、近況報告を兼ねてまとめようかと思います。

長い内容になりますが、ご容赦ください。

 

1、UE4の日本語情報まとめページを作りました!

unreal-engine-4-japanese.zeef.comhttps://unreal-engine-4-japanese.zeef.com/michiko.usui

開発者様のブログ、これまでにあったイベントに関しての動画やスライド、絶賛書く人募集中なAdventCalendarの更新など、様々な日本語でのUE4の情報を集約していきたいと考えています。

 

今回、ページを作成するにあたっては、ZEEFという、情報技術系のキュレーションサービス(…と言っていいのかな?)を利用しました。 

因みに、今回作成したこのページ、ZEEF.com初の日本語ページだそうです(苦笑)

 ZEEF | Curated Directory | Find information through people

C++をはじめ、様々な言語や技術関連のページが掲載されています。ただしすべて英語ですので、その点ご注意ください。

 

なんと、Tom Loomenさんが「Unreal Engine」という英語の情報ページを作成してくださっています。非常に情報が充実していますので、そちらも必見です!

unreal-engine-4.zeef.com

 

基本的には冒頭に書いたように、UE4関連(日本語メイン)の情報を随時更新し、ページも適度に改良していく予定です。

私も今まで通りに情報収集等を行っていきますが、もし、利用してくださっている方の中で、「こんなサイトあるよ!」とか、「この動画参考になったよ!」とかありましたら、直接Usuiまで(twitterやこのブログへのコメント等で)教えていただくか、

以下の手順でこのページへ直接推薦していただけると、非常に助かります!

 

  ①各ブロック(開発者様ブログ、開発者様サイトなど)の下にある、緑色の十字マークをクリックする。

              f:id:usui3153m:20151115201842p:plain

  ②下記ウインドウが表示されますので、そこへお勧めのコンテンツへのURLを貼り付け、青い「Suggest」とかれたボタンを押す。

 f:id:usui3153m:20151115202131p:plain

 これだけで、ページの管理者(つまりUsui)まで、通知が届きます。

念のために、オススメしてくださったページの管理者様へ(可能であれば)確認を取らせていただきます。そこで許可となった暁には、掲載させていただきます。

こちらについては気が向いたときにでも、ご協力をお願いします(笑)

 

2、UE4AnswerHubの新着質問通知botを作りました!

セクション「Japanese」のもののみ新着質問を通知してくれるものと、

twitter.com

セクション問わず全ての新着質問を通知してくれるものとで2種類作成しました。

twitter.com

たまたまTL上で、新着質問を通知してくれるbotがほしいという意見を見かけたので、ざっくりと作りました。

現在どちらも試験運用中です。

 

なんだかんだtwitterfacebookで質問して解決、っていう流れになってしまいがちなんですよね。そちらのほうが慣れているし、気兼ねなく質問できるっていうところが大きいのかもしれません。

しかし、せっかくJapaneseセクションを用意してくださっているし、Epic公式へ「どんなことで詰まってしまうのか」分析・把握する情報が蓄積されていきますし、なにより、このbotによって質問する側だけでなく、解答してくれる方々もきっと増えてくれるので(←)、皆さま、どんどんAnswerHub利用しましょう!!

 

 

というわけで、気が付いたら3種類のサービス?の中の人になりました。

改めて、利用してくださっている方はありがとうございます。

それぞれ「利用しづらいからこんな感じにしてほしい」とか、「こういった情報もほしい。」みたいな改善案・要望等ありましたら、twitterなりブログなりでご意見いただけると幸いです。

 

今後とも、よろしくお願い致します。

 

vagrantの再インストール時の備忘録

最近仕事の関係でVM環境を使用しています。

そちらでの環境構築で少し詰まってしまったことがあったのでメモ。

 

Vagrantのバージョンを下げるときには、予めプラグインのアンインストールをすること。
  •  低いバージョンをインストールしなおして実行した際に、プラグインのバージョン不一致によるエラーが起きてしまい、実行できなくなります。
  •  Users\ユーザー名\.vagrant.dフォルダ内に生成される、plugins.jsonの中で、プラグインがインストールされた時点でのバージョン情報等が保持されているので、この中の値を見て、バージョンの不一致かどうかを判断しているようです。
  •  Vagrant(1.7.2)をアンインストール→低いバージョンのもの(1.2.7)を再インストール。ということをしていたら気づきました。

 

 プラグインのインストールに失敗することがあるので、特に指定が無ければ最新版(2015/10/19時点では1.7.4)にするのがベスト。
  •  vagrant-chef-zero、vagrant-omnibus等々をインストールしようとした際に、bundlerからエラーが出力されました。
  • ざっくりというと、別途 rake というgemファイルを作成するために、それをインストールしようと試みたけど、ファイルの取得先が404エラーになっているため、これ以上進行できないよ。という内容でした。
  • 実際にRubyGems Documentation Index のrakeファイル部分を見てみると、rdoc, wwwともにリンクが切れている。
  • rake | RubyGems.org | your community gem hostのほうでは、ダウンロードが可能そう。
  • 別途ダウンロードが可能そうなリンクから入手して、インストールを試みれば、古いバージョンでもプラグインのインストールは可能かもしれないが、そこまでは試していない。
  • 最新バージョンでは、そもそものbundler.rbファイル内でのgemファイル作成に関しての作りが変わったせいか、特に問題なくインストールができた。

※自分の試して見たバージョン(1.6.5, 1.7.2)では、という前提です。

 

すごい雑多な書き方をしていますが、備忘録ということで、ご容赦ください(笑)

【UE4】気になる部屋をざっくり作ってみる【その1】

モデリング何それ状態ながらも、ちょっと気になった部屋を作ってみようと思い至ったので、ざっくり作っていこうかなと思います。

…正直きっちり綺麗に完成させるとなると、ちゃんとモデリングできるようにならないといけないから、そこまでやるかどうかは未定。

 

↓とりあえずBSP+StarterContentsのStaticMeshを使って組み立ててみた状態↓

www.dropbox.com

 

www.dropbox.com

 

いやー、流石にざっくりしすぎてるよなぁ(苦笑)

でも晒していく。

 

これだけで、何の部屋を作ろうとしているのかがわかった人は、是非お友達になってください(笑)

 

…タイトルに[UE4]って使おうとしたんだけど、はてなブログは[]で囲ってある単語がタグ扱いになるのね…知らなかった。

 

 

個人的なgitflow勉強用サイトまとめと、導入時に詰まったところメモ

仕事で現在gitflowを使用しているのですが、実際にどういうものなのかということをあまり知らないまま、いわれるがままに使用してしまっているので、勉強を兼ねて導入をしてみました。

その際に詰まったところのメモです。

…簡潔に言えば、日本語の導入手順がすでにいろんなサイト・ブログ様で説明されているんだから、ちゃんとそれを読もうね。ってことと、英語わかんないんだからちゃんと意味を調べろよってことに落ち着くんですが(苦笑)

 

簡単にgitflowについて説明させていただくと、とあるGitのブランチ運用モデルを実行・運用するための機能が組み込まれた、Gitのプラグインです。

とあるGitのブランチ運用モデルっていうのは、下記「A successfull Git branching model」です。(全英語)nvie.com

 

以下のように日本語で説明されているサイトや、勉強会についてのレポートをあげてくださっているサイトもありました。

参考にさせていただいてます。

git-flow cheatsheet

 

dev.classmethod.jp

 

で、今回、下記サイトを参考に導入を行いました。

github.com

www.atmarkit.co.jp

 

詰まった箇所は、「msysgit-install」の実行です。

どちらのサイトでも書かれているとおりにコマンドを打ち込んだつもりだったのですが、常に以下のようなエラー文字が出てしまっていました。

MsysGit installation directory not found.
Try to give the directory name on the command line.

今であれば、

「MsysGit をインストールするディレクトリがありません。

ディレクトリ名をコマンドラインに追加してみてください。」

っていうニュアンスで書かれていることだと判断できるんですが、詰まったときにはなぜか、

「MsysGit をインストールするディレクトリがありません。

MsysGitをインストールするディレクトリでコマンドを実行してみてください。」

というように読んでしまったんですよねOTL

 

このおかげでフォルダを移動してコマンドを入力してみたり、以前入れていた別のGit関連ソフトをアンインストールしてみたり、環境変数にパスを追加してみたりとなかなか遠回りをする羽目になりました。

 

ちなみに、その後

勘でGIT_HOMEとして、環境変数にMsysGitをインストールするディレクトリのパスを登録。

@ITのサイトを見つける

ディレクトリ名の引数が必要だと知る。

ディレクトリ名をつけなければ、同じようにエラーが出るのか?

ディレクトリ名をつけずに再度実行

インストールされてしまった。

 

という非常にめんどくさいことになりつつも、なんとか導入が出来ましたOTL

なぜインストールされたのかという点は、GIT_HOMEを環境変数として設定していたからですね。

環境変数としてそれが設定されていれば、引数からではなくそちらのパスを取得してくるように、msysgit-install.cmdに記載されていましたので。

 

日本語での有用なサイトがあるときは、皆さんまずそちらを利用しましょう。(苦笑)

その上で、わからないときには、腹を括って英語のサイトに挑戦しましょう!

あと、コマンドスクリプトとかの中身を見ましょう。

 

あーひどかった。

 

ラムダ式 -関連資料・呟きまとめ-

先日の勉強会で、事前知識不足のあまりに打ちひしがれた、「Moden C++(C++11, 14)」

その中で特に気になった「ラムダ式」についての勉強を行った過程で、参考としたサイト、パワーポイント等を、自分の呟きから抜粋して紹介させていただこうと思います。

 

特に、後半に記載させていただいた「クロージャデザインパターン」のスライド資料に関しては、C++における

といった内容を、非常にわかりやすく説明してくださっているので、C++を使用されている方はご一読されることをオススメします。

その下に記載している「Effective GoF Patterns with C++11 and Boost」は、「クロージャデザインパターン」の参考資料として記載されていたスライドです。

もしかしたらスライドを見るにあたり、記載サイトの登録が必要になるかもしれないことと、内容が全て英語での記載となっているため、その点要注意です。

…実は私もまだ見れてませんOTL

 

 

 

 

 

 

個人的には、現状お仕事で使用しているのはPHPのため、そちらでの使用例等々をまた勉強していこうと思います(苦笑)

 

about.meはじめました。

特に動機はないんですけど、about.meというサイトを利用して、プロフィールを作成してみました。

 

about.me

 

簡易的に作成する分には、twitterとかfacebookから自己紹介のインポートが出来るってことで、非常に簡単でした。

まだまだですけど、詳細に作りこもうとすると、主に英語で詰まってしまい、なかなか骨が折れる作業になりそうですOTL

 

about.meでアカウントを持っている方はよろしくお願いします。