<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ConquestArrow.com</title>
	<atom:link href="https://conquestarrow.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://conquestarrow.com</link>
	<description></description>
	<lastBuildDate>Tue, 18 Sep 2018 15:30:40 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://conquestarrow.com/wp-content/uploads/2018/05/cropped-logo-32x32.png</url>
	<title>ConquestArrow.com</title>
	<link>https://conquestarrow.com</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>UE4のPython&#038;JavaScriptプラグイン比較</title>
		<link>https://conquestarrow.com/compare-ue4-plugin-python-js/</link>
					<comments>https://conquestarrow.com/compare-ue4-plugin-python-js/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Conquest Arrow]]></dc:creator>
		<pubDate>Sat, 25 Aug 2018 00:00:23 +0000</pubDate>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Python Editor Script Plugin]]></category>
		<category><![CDATA[UE4Plugin]]></category>
		<category><![CDATA[Unreal.js]]></category>
		<category><![CDATA[UnrealEnginePython]]></category>
		<guid isPermaLink="false">https://conquestarrow.com/?p=404</guid>

					<description><![CDATA[スクリプトプラグインを比較する UE4には4.19からPythonがスクリプトプラグインとして組み込まれている。以前からLuaなど好きなスクリプトエンジンをソース組み込みできたが、プラグインかつ標準組み込みとなったことで [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>スクリプトプラグインを比較する</h1>
<p>UE4には4.19からPythonがスクリプトプラグインとして組み込まれている。以前からLuaなど好きなスクリプトエンジンをソース組み込みできたが、プラグインかつ標準組み込みとなったことで今後Pythonの活用が進むと思われる。</p>
<p>そこで、UE4上で動くスクリプトのプラグインのPythonの２種類（公式<sup id="fnref-404-1"><a href="#fn-404-1" class="footnote-ref" role="doc-noteref">1</a></sup>、3rd Party）とJavaScriptについて比較してみた。</p>
<h2>比較表</h2>
<p>※2018-08-25現在</p>
<div class="scrollable-table"><table>
<thead>
<tr>
<th align="right">_</th>
<th>公式Python</th>
<th>UnrealEnginePython</th>
<th>Unreal.js</th>
</tr>
</thead>
<tbody>
<tr>
<td align="right">対応UE4 ver.</td>
<td>4.19 &lt;= 4.20</td>
<td>4.12 &lt;= 4.20</td>
<td>4.11 &lt;= 4.19 ※1</td>
</tr>
<tr>
<td align="right">言語 ver.</td>
<td>2.7.x ※2</td>
<td>2.7.x / 3.6.x / 3.7.x ※3</td>
<td>ES2017</td>
</tr>
<tr>
<td align="right">提供形式</td>
<td>標準プラグイン</td>
<td>github</td>
<td>MarketPlace ※1</td>
</tr>
<tr>
<td align="right">プラグイン ver.</td>
<td>BETA 1.0</td>
<td>1.0</td>
<td>0.3.1</td>
</tr>
<tr>
<td align="right">Windows/Mac/Linux</td>
<td>〇/〇/〇</td>
<td>〇/〇/〇</td>
<td>〇/〇/〇</td>
</tr>
<tr>
<td align="right">iOS/Android</td>
<td>×/×</td>
<td>×/〇</td>
<td>×/〇</td>
</tr>
<tr>
<td align="right">ランタイム実行</td>
<td>×</td>
<td>〇</td>
<td>〇</td>
</tr>
<tr>
<td align="right">エディタ実行</td>
<td>〇</td>
<td>〇</td>
<td>〇</td>
</tr>
<tr>
<td align="right">GUI付エディタ拡張</td>
<td>×</td>
<td>〇</td>
<td>〇</td>
</tr>
<tr>
<td align="right">専用コンソール</td>
<td>〇</td>
<td>〇</td>
<td>〇</td>
</tr>
</tbody>
</table></div>
<ul>
<li>補足
<ul>
<li>※1：githubのものをビルドすることで4.20に対応</li>
<li>※2：エンジンをソースからビルドすることで3系統に対応</li>
<li>※3: 3.6以外は別途python実行エンジンのインストールが必要</li>
</ul>
</li>
</ul>
<a rel="noopener" href="https://docs.unrealengine.com/en-US/Editor/Scripting-and-Automating-the-Editor/Scripting-the-Editor-using-Python" title="302 Found" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/https%3A%2F%2Fdocs.unrealengine.com%2Fen-US%2FEditor%2FScripting-and-Automating-the-Editor%2FScripting-the-Editor-using-Python?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">302 Found</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=docs.unrealengine.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">docs.unrealengine.com</div></div></div></div></a>
<a rel="noopener" href="https://github.com/20tab/UnrealEnginePython" title="20tab/UnrealEnginePython" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://avatars.githubusercontent.com/u/1843159?s=400&#038;v=4" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">20tab/UnrealEnginePython</div><div class="blogcard-snippet external-blogcard-snippet">Embed Python in Unreal Engine 4. Contribute to 20tab/UnrealEnginePython development by creating an account on GitHub.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=github.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>
<a rel="noopener" href="https://www.unrealengine.com/marketplace/unrealjs" title="Unreal.js in Code Plugins - UE Marketplace" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://conquestarrow.com/wp-content/uploads/cocoon-resources/blog-card-cache/950bb6a65cae26213c967b814ad6e383.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Unreal.js in Code Plugins - UE Marketplace</div><div class="blogcard-snippet external-blogcard-snippet">Javascript runtime built for UnrealEngine</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=www.unrealengine.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.unrealengine.com</div></div></div></div></a>
<h3>対応UE4 ver.</h3>
<p>公式Pythonは比較的最近のver.にしか対応しない。UnrealEnginePython、Unreal.jsは古いver.でも対応する。</p>
<p>Unreal.jsはやや最新ver.への追従が遅い（githubのソースをビルドして導入することで最新にも対応する）。</p>
<h3>言語ver.</h3>
<p>対応するスクリプトの言語のver.の比較。</p>
<p>公式のPythonプラグインの問題として2系統であることが一つあげられる。というのも、<a href="https://pythonclock.org/">Pythonの2系統は2020年までのサポートとされている<span class="fa fa-share-square external-icon anchor-icon"></span></a>ため将来性に乏しい。</p>
<div class="product-item-box amazon-item-box no-icon product-item-error cf"><div><a rel="nofollow noopener" href="https://www.amazon.co.jp/exec/obidos/ASIN/4873117380/conquestarrow-22/" target="_blank">Amazonで詳細を見る<span class="fa fa-share-square external-icon anchor-icon"></span></a></div></div>
<p>なぜ２系統なのかというと映像制作系の業界基準ガイドライン「<a href="https://www.vfxplatform.com/">VFX Reference Platform<span class="fa fa-share-square external-icon anchor-icon"></span></a>」の最新でもPython2が指定されているためとされており、これに合わせた形らしい。</p>
<a rel="noopener" href="https://www.vfxplatform.com/" title="VFX Reference Platform" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/https%3A%2F%2Fwww.vfxplatform.com%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">VFX Reference Platform</div><div class="blogcard-snippet external-blogcard-snippet">VFX Platform : Reference Platform for VFX Software</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=www.vfxplatform.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.vfxplatform.com</div></div></div></div></a>
<p>なお、UnrealEnginePython、Unreal.jsに関してはそれぞれの言語の比較的新しいものが使える。</p>
<h3>提供形式</h3>
<p>いずれもプラグインであるが提供方法はバラバラ。</p>
<ul>
<li>公式Python
<ul>
<li>既に入っているので有効化する</li>
</ul>
</li>
<li>UnrealEnginePython
<ul>
<li>githubからバイナリをDLしてくる</li>
</ul>
</li>
<li>Unreal.js
<ul>
<li>Market placeから導入</li>
<li>最新盤はgithubからソースDLしてビルド</li>
</ul>
</li>
</ul>
<h3>対応実行プラットホーム</h3>
<p>公式のPythonはそもそもエディタオンリーのため、モバイルでは動かない。</p>
<p>UnrealEnginePython、Unreal.jsに関してはAndroidのサポートの記載がある。</p>
<h3>ランタイム実行</h3>
<p>公式のPythonはエディタ上でのみ使用可能。つまりPythonでゲームを作ることはできない。</p>
<p>UnrealEnginePython、Unreal.jsはランタイム実行に対応。つまり、PythonやJavaScriptでゲームを作れる。</p>
<h3>エディタ実行</h3>
<p>どのプラグインもエディタ上で実行可能。エディタのマクロやバッチ処理的なことができる。</p>
<h3>GUI付エディタ拡張</h3>
<p>専用のUIを持った、ツール的なエディタ拡張ができるかどうか。<br />
公式のPythonは将来的には対応予定があるらしいができない。<br />
UnrealEnginePython、Unreal.jsは可能。複数のサンプルあり。</p>
<h3>専用コンソール</h3>
<p>インラインでスクリプトが実行できる専用のコンソールがあるかどうか。どのプラグインも用意されている。</p>
<ul>
<li>公式Pythonは標準のOutput Logコンソールを切り替えることで専用コンソールになる</li>
<li>Unreal.jsのJavaScriptコンソールはAPIの補完機能がある</li>
<li>UnrealEnginePythonは専用のテキストエディタさえもある</li>
</ul>
<h2>まとめ</h2>
<ul>
<li>公式のPythonは導入が簡単</li>
<li>公式のPythonはPython2系統で将来性に不安</li>
<li>公式のPythonはエディタ実行のみ</li>
<li>公式のPythonは（まだ）GUIのあるエディタ拡張が作れない</li>
</ul>
<h3>おまけ：APIの比較</h3>
<p>膨大になってしまうので詳細な比較は避けるがざっと見た感じの差。</p>
<ul>
<li>公式のPythonはローカライズの機能がある
<ul>
<li>Unreal.jsはローカライズの機能にアクセスするのは難しい</li>
</ul>
</li>
<li>UnrealEnginePythonはSlateにアクセスするAPIが充実している
<ul>
<li>Unreal.jsもSlateへアクセスできるが間接的/部分的なAPIになっている</li>
</ul>
</li>
<li>Unreal.jsはBlueprintと相互に連携できる
<ul>
<li>UnrealEnginePythonはBP -> Pythonができるかどうか不明</li>
<li>公式Pythonは両方向とも不明</li>
</ul>
</li>
</ul>
<div class="footnotes" role="doc-endnotes">
<hr />
<ol>
<li id="fn-404-1" role="doc-endnote">
&#8220;Python Editor Scrtipt Plugin&#8221;が正式名称。&#160;<a href="#fnref-404-1" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a>
</li>
</ol>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://conquestarrow.com/compare-ue4-plugin-python-js/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>誤読防止! 『UE4Editor Customize』プラグインでContentBrowserのフォントを変える</title>
		<link>https://conquestarrow.com/change-font-contentbrowser-by-ue4editorcustomize/</link>
					<comments>https://conquestarrow.com/change-font-contentbrowser-by-ue4editorcustomize/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Conquest Arrow]]></dc:creator>
		<pubDate>Sat, 28 Jul 2018 10:46:49 +0000</pubDate>
				<category><![CDATA[Plugin]]></category>
		<category><![CDATA[Font]]></category>
		<category><![CDATA[UE4]]></category>
		<category><![CDATA[UE4Plugin]]></category>
		<guid isPermaLink="false">https://conquestarrow.com/?p=386</guid>

					<description><![CDATA[UE4エディタのデフォルトフォントは誤読の元 UE4のエディタにデフォルトで使われているフォントには誤読しやすい問題がある。特に顕著なのはIとl(大文字のアイと小文字のエル)、Oと0（大文字のオーとゼロ）の区別。これは誤 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>UE4エディタのデフォルトフォントは誤読の元</h1>
<p>UE4のエディタにデフォルトで使われているフォントには誤読しやすい問題がある。特に顕著なのは<code>I</code>と<code>l</code>(大文字のアイと小文字のエル)、<code>O</code>と<code>0</code>（大文字のオーとゼロ）の区別。これは誤読の原因になったり、スペルミスに気が付かないと言った問題を引き起こす。UE4はアセットのリネームに癖があるので、リネームせざるを得ない状況を起こしやすいのも問題である。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/07/small_L_and_large_I_large_O_and_Zero.png" alt="1Il_oO0Q" /></p>
<p>そこで『UE4Editor Customize』というプラグインを使って、特にContentBrowserのフォントを区別しやすいフォントに差し替えて誤読を減らしてみる。</p>
<h2>『UE4Editor Customize』プラグイン</h2>
<p>MarketPlaceから無料で導入できる(2018-07-28現在)。</p>
<a rel="noopener" href="https://www.unrealengine.com/marketplace/ue4editor-customize?lang=ja" title="UE4Editor Customize：コードプラグイン - UE マーケットプレイス" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://conquestarrow.com/wp-content/uploads/cocoon-resources/blog-card-cache/91c4b2e52b94f9ddc4d4a851c810d619.png" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">UE4Editor Customize：コードプラグイン - UE マーケットプレイス</div><div class="blogcard-snippet external-blogcard-snippet">Change UE4Editor To a New Style</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=www.unrealengine.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">www.unrealengine.com</div></div></div></div></a>
<p><img src="https://cdn1.epicgames.com/ue/product/Screenshot/Screenshot-1920x1080-86b47a57f6387a16a60c44c386c5b96b.png" alt="" /></p>
<p>サンプルの画像を見てわかる通りエディタに背景画像を表示したりもできるのだが、今回は　<strong>フォントのカスタマイズ機能</strong> を使用する。</p>
<h2>フォントの選択</h2>
<p>誤読防止なので以下などが区別のつくフォントを選択する。</p>
<ul>
<li><code>O</code>と<code>0</code></li>
<li><code>I</code>と<code>l</code></li>
</ul>
<p>この辺りはプログラミング用などに用意されたフォントであれば考慮されている事が多いので調べてみるとよいだろう。</p>
<p>今回は例として「VLゴシック」を選択した。</p>
<a rel="noopener" href="http://vlgothic.dicey.org/" title="VL Gothic Font Family" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/http%3A%2F%2Fvlgothic.dicey.org%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">VL Gothic Font Family</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=vlgothic.dicey.org" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">vlgothic.dicey.org</div></div></div></div></a>
<h2>フォントアセットの用意</h2>
<p>フォントファイルを元に、アセット化する。といっても特別なことは何もなく、ゲーム中のUIで使用するときと同じように作ればよい。</p>
<p>ContentBrowserのAdd New > User Interface > Fontと選び、新規Fontアセットを作成する。Add Fontからフォントのotfやttfファイルを選択する。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/07/VLGothic_FontAsset.png" alt="" /></p>
<p>上記の例はVLゴシックの例。VLゴシックはフォントファミリーとして等幅とプロポーショナルがある。今回誤読防止で使用するのは等幅の方（<code>VL Gothic Regular</code>）になる。</p>
<h2>プラグインを有効化して設定</h2>
<p>『UE4Editor Customize』を導入後、Pluginsから有効化して再起動する。<br />
有効になると、Project Settings > Pluginsの中に「UE4Editor Customize」が増えているので選択する。</p>
<p>設定画面の下の方に「Text Style」というテキストのスタイルをカスタマイズできる箇所があるのでここでフォントを先ほど作成したフォントアセットを指定する。</p>
<p>ContentBrowser上のアセット名のフォントを変える例は以下になる。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/07/ContentBrowserAssetNameFontStyle.png" alt="" /></p>
<p>Content Browser以下の,<br />
&#8211; Asset Tile View Font Name<br />
&#8211; Asset Tile View Font Name Small<br />
&#8211; Asset Tile View Font Name Very Small</p>
<p>それぞれの<code>Font Family</code>を事前に用意したフォントに差し替えると置き換わる（例：<code>VLGothic</code>）。<br />
※VLゴシックのように等幅・プロポーショナルなど複数入っている場合は、<code>Type Face</code>で選択する(<code>VL Gothic Regular</code>)。</p>
<p>無事に置き換えが済むと以下のようになる。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/07/NewFont.png" alt="" /></p>
<h3>比較</h3>
<div class="scrollable-table"><table>
<thead>
<tr>
<th>_</th>
<th>差し替え前</th>
<th>差し替え後</th>
</tr>
</thead>
<tbody>
<tr>
<td>表示</td>
<td><img src="https://conquestarrow.com/wp-content/uploads/2018/07/small_L_and_large_I_large_O_and_Zero.png" alt="1Il_oO0Q" /></td>
<td><img src="https://conquestarrow.com/wp-content/uploads/2018/07/NewFont.png" alt="" /></td>
</tr>
</tbody>
</table></div>
<h2>マニュアル</h2>
<p>プラグインの公式マニュアルにはどこの設定がどこに当たるのか、画像付きで説明がある（英語のみだが）。</p>
<a rel="noopener" href="https://jack-myth.github.io/UE4EditorCustomize/Documentation.html" title="UE4EditorCustomize Documentation" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/https%3A%2F%2Fjack-myth.github.io%2FUE4EditorCustomize%2FDocumentation.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">UE4EditorCustomize Documentation</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=jack-myth.github.io" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">jack-myth.github.io</div></div></div></div></a>
<p>Content Browser以外のフォントも変えられるのでごっそり変えてしまってもよいだろう。</p>
<h2>注意点</h2>
<ul>
<li>実験的プラグインとされている
<ul>
<li>実際、再起動しないと反映されないこともあった</li>
</ul>
</li>
<li><del>最新の4.20はまだ未対応</del></li>
</ul>
<h3><ins>追記(2018-08-05)</ins></h3>
<blockquote class="twitter-tweet" data-lang="ja">
<p lang="ja" dir="ltr">UE4 Editor Customize プラグインが <a href="https://twitter.com/hashtag/UE4?src=hash&amp;ref_src=twsrc%5Etfw">#UE4<span class="fa fa-share-square external-icon anchor-icon"></span></a>.20 に対応。 <a href="https://twitter.com/hashtag/ue4arketplace?src=hash&amp;ref_src=twsrc%5Etfw">#ue4arketplace<span class="fa fa-share-square external-icon anchor-icon"></span></a><a href="https://t.co/2J1bvTaSMB">https://t.co/2J1bvTaSMB<span class="fa fa-share-square external-icon anchor-icon"></span></a></p>
<p>&mdash; K. S. (@ConquestArrow) <a href="https://twitter.com/ConquestArrow/status/1026113241615818752?ref_src=twsrc%5Etfw">2018年8月5日<span class="fa fa-share-square external-icon anchor-icon"></span></a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
]]></content:encoded>
					
					<wfw:commentRss>https://conquestarrow.com/change-font-contentbrowser-by-ue4editorcustomize/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>UE4のBP内で「_(アンダーバー)」を使うべきではない理由</title>
		<link>https://conquestarrow.com/do-not-use-underbar-in-blueprint-graph/</link>
					<comments>https://conquestarrow.com/do-not-use-underbar-in-blueprint-graph/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Conquest Arrow]]></dc:creator>
		<pubDate>Wed, 11 Jul 2018 14:54:48 +0000</pubDate>
				<category><![CDATA[Blueprint]]></category>
		<category><![CDATA[Gamemakin UE4スタイルガイド]]></category>
		<category><![CDATA[UE4]]></category>
		<category><![CDATA[スタイルガイド]]></category>
		<guid isPermaLink="false">https://conquestarrow.com/?p=345</guid>

					<description><![CDATA[BP内のグラフ・関数・変数の名前には「_(アンダーバー)」は使うべきではない。これらを使用すると見た目上の区別がつかなくなり混乱とバグを生むからだ。 間違い探しに挑戦！ まずは次のグラフを見てほしい。 A,B,C,Dの４ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>BP内のグラフ・関数・変数の名前には「<code>_</code>(アンダーバー)」は使うべきではない。これらを使用すると見た目上の区別がつかなくなり混乱とバグを生むからだ。</p>
<h2>間違い探しに挑戦！</h2>
<p>まずは次のグラフを見てほしい。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/07/NoUnderbarNodes.png" alt="間違い探しノード" /></p>
<p>A,B,C,Dの４つのブロック（関数ノード、Get変数ノードの組）がある。A,B,C,Dはすべて異なるノードで構成されている。さて、どの辺が違うのかよく見てほしい。</p>
<p>分かった人は次へ。分からない人も次へ。</p>
<p><span id="more-345"></span></p>
<h3>答え合わせ</h3>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/07/NoUnderbar_Answer.png" alt="答え合わせ" /></p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/07/NoUnderbar_MyBlueprint.png" alt="MyBlueprintタブでのリスト" /></p>
<div class="scrollable-table"><table>
<thead>
<tr>
<th>ブロック</th>
<th>関数ノード名</th>
<th>Get変数ノード名</th>
</tr>
</thead>
<tbody>
<tr>
<td>A</td>
<td>MyFunction</td>
<td>MyVar</td>
</tr>
<tr>
<td>B</td>
<td>_MyFunction</td>
<td>_MyVar</td>
</tr>
<tr>
<td>C</td>
<td>MyFunction_</td>
<td>MyVar_</td>
</tr>
<tr>
<td>D</td>
<td>My_Function</td>
<td>My_Var</td>
</tr>
</tbody>
</table></div>
<ul>
<li>Aは特に <code>_</code> を使用していない</li>
<li>Bは語頭に <code>_</code> を使用。関数ノード名でスペースが多いことに気が付いた人もいるだろう。</li>
<li>Cは語尾に <code>_</code> を使用</li>
<li>Dは単語の区切りに <code>_</code> を使用</li>
</ul>
<p>おそらく大半の人がBの関数ノード以外の違いを見分けられなかっただろう。</p>
<h2>なんでこんなことがおきるのか？</h2>
<p>グラフエディタ上では<code>_</code>はスペースに変換される、という機能があるため。</p>
<p>元々UE4では名前の命名規則は<a href="https://wa3.i-3-i.info/word13955.html">PascalCase<span class="fa fa-share-square external-icon anchor-icon"></span></a>が採用されている。</p>
<a rel="noopener" href="https://wa3.i-3-i.info/word13955.html" title="https://wa3.i-3-i.info/word13955.html" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/https%3A%2F%2Fwa3.i-3-i.info%2Fword13955.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">https://wa3.i-3-i.info/word13955.html</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=wa3.i-3-i.info" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">wa3.i-3-i.info</div></div></div></div></a>
<p>このPascalCaseを一般的な英文にして読みやすくするために単語の区切りに自動的にスペースを表示してくれる、というのがBPなどのグラフエディタの便利機能としてある。この時、略字と単語が続く（例：<code>XMLAndHTML</code>）時などにどこからが区切りかわからないために区別がつくように<code>_</code>で単語の区切りを示す書き方があり（例：<code>XML_AndHTML</code>）、この書き方にも対応したために<code>_</code>をスペースに表示する機能になった、と思われる。</p>
<p>なので本来はこれは便利な機能のはずなのだ。</p>
<h2>問題が起きる条件</h2>
<p>見た目でスペースと区別がつかない、という問題が起きる条件は次になる。</p>
<h3>語頭（プレフィックス）に「<code>_</code>」</h3>
<p>テキスト系のスクリプト言語ではグローバルな変数とローカルな変数の名前被りを避け、ローカルであることを明示するために語頭(プレフィックス)に<code>_</code>を付けるルールを設けていることがしばしばある（JavaScriptやPythonなど）。</p>
<p>その感覚でローカルな関数や変数名の頭に<code>_</code>を付けてしまうと、グローバルなものと区別がつかない、という残念なことが起きる。</p>
<div class="comment-box">
本来、グラフ上でグローバル・ローカルの見た目に差がつけばよいと思うのだが、BPのグラフエディタ上ではノードの見た目で区別がつかない残念、、、
</div>
<h3>語尾（ポストフィックス）に「<code>_</code>」</h3>
<p>語頭の場合と異なり意識的につける文化などはないので大きく問題にはなりがちではないが、区別のつかなさでは語頭にあるよりも凶悪でまったく区別がつかない。</p>
<p>語頭にある場合、スペースの幅分でかろうじてわかることもあるが、語尾は無理！<br />
混乱の危険性ではよりこちらのほうが上である。</p>
<h3>大文字が続かない場合の語中の「<code>_</code>」</h3>
<p>前述の通り、 <strong>略字などで単語の区切りなのに大文字が続く場合を除いて</strong> 、語中、特に単語の区切りに<code>_</code>を入れては全く区別がつかなくなる。</p>
<h3>余談：単語の区切りに「　(スペース)」</h3>
<p><code>_</code>ではないが、自動でスペースが入力される位置にスペースを入力するのも危険。<br />
UE4のBPのグラフ・関数・変数名にはスペースが入れられるためにこれも併せて要注意。</p>
<h2>まとめ</h2>
<ul>
<li>BPのグラフ・関数・変数名で次は危険なので避ける
<ul>
<li>語頭（プレフィックス）に「<code>_</code>」</li>
<li>語尾（ポストフィックス）に「<code>_</code>」</li>
<li>大文字が続かない場合の語中の「<code>_</code>」</li>
<li>単語の区切りに「　(スペース)」</li>
</ul>
</li>
</ul>
<p><a href="https://github.com/akenatsu/ue4-style-guide/blob/master/README.jp.md#bp-vars">Gamemakin UE4スタイルガイド<span class="fa fa-share-square external-icon anchor-icon"></span></a>にもこの辺は書いていないので要注意。<br />
新しく始めるプロジェクトでは是非このルールを採用してほしい。</p>
<a rel="noopener" href="https://github.com/akenatsu/ue4-style-guide/blob/master/README.jp.md#bp-vars" title="akenatsu/ue4-style-guide" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://opengraph.githubassets.com/394c8994094e107d1f0f94bd8af5d29ed466e9a428921d7dfb2f9765567ca760/akenatsu/ue4-style-guide" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">akenatsu/ue4-style-guide</div><div class="blogcard-snippet external-blogcard-snippet">An attempt to make Unreal Engine 4 projects more consistent - akenatsu/ue4-style-guide</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=github.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>
]]></content:encoded>
					
					<wfw:commentRss>https://conquestarrow.com/do-not-use-underbar-in-blueprint-graph/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[UE4]Unreal.jsをTypeScriptで書く</title>
		<link>https://qiita.com/ConquestArrow/items/154256d6f882dd942462</link>
		
		<dc:creator><![CDATA[Conquest Arrow]]></dc:creator>
		<pubDate>Sat, 30 Jun 2018 12:45:28 +0000</pubDate>
				<category><![CDATA[Qiita記事]]></category>
		<category><![CDATA[Qiita]]></category>
		<guid isPermaLink="false">http://conquestarrow.com/?guid=926248b518ad78a97b5649c075dec28f</guid>

					<description><![CDATA[

はじめに



 Unreal.jsとは


UnrealEngine上でJavaScriptを動かすことのできるプラグイン
Unreal.js 入門



 TypeScriptとは


JavaScriptの新規格先行取り込み＋静的型付けをしたAltJS
http://qiita.com/tags/TypeScript


👍 Unreal.jsをTypeScriptで書くメリット


Unreal.jsの出力する型定義ファイルを使って実行前型チェックができる


※簡単なエラーはこの時点で...]]></description>
										<content:encoded><![CDATA[

はじめに



 Unreal.jsとは


UnrealEngine上でJavaScriptを動かすことのできるプラグイン
Unreal.js 入門



 TypeScriptとは


JavaScriptの新規格先行取り込み＋静的型付けをしたAltJS
http://qiita.com/tags/TypeScript


👍 Unreal.jsをTypeScriptで書くメリット


Unreal.jsの出力する型定義ファイルを使って実行前型チェックができる


※簡単なエラーはこの時点で...]]></content:encoded>
					
		
		<enclosure url="" length="0" type="" />

			</item>
		<item>
		<title>BlueprintUE.comでブループリントをカンタン共有</title>
		<link>https://conquestarrow.com/how-to-use-blueprintue-com/</link>
					<comments>https://conquestarrow.com/how-to-use-blueprintue-com/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Conquest Arrow]]></dc:creator>
		<pubDate>Wed, 27 Jun 2018 15:45:41 +0000</pubDate>
				<category><![CDATA[Blueprint]]></category>
		<category><![CDATA[BlueprintUE.com]]></category>
		<category><![CDATA[Pastebin]]></category>
		<category><![CDATA[UE4]]></category>
		<category><![CDATA[サービス紹介]]></category>
		<category><![CDATA[初心者向け]]></category>
		<guid isPermaLink="false">https://conquestarrow.com/?p=256</guid>

					<description><![CDATA[BlueprintUE.comの使い方 BlueprintUE.comという、ブループリント（以下、BP）をWEB上で簡単に共有できるサイトの紹介。 PasteBin blueprints For Unreal Engi [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>BlueprintUE.comの使い方</h1>
<p><a href="https://blueprintue.com/">BlueprintUE.com<span class="fa fa-share-square external-icon anchor-icon"></span></a>という、ブループリント（以下、BP）をWEB上で簡単に共有できるサイトの紹介。</p>
<a rel="noopener" href="https://blueprintue.com/" title="PasteBin blueprints For Unreal Engine 4" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/https%3A%2F%2Fblueprintue.com%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">PasteBin blueprints For Unreal Engine 4</div><div class="blogcard-snippet external-blogcard-snippet">BlueprintUE.com is a tool for sharing, rendering and rating blueprints for Unreal Engine 4. UE4 is a game engine which use visual scripting called blueprint.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=blueprintue.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">blueprintue.com</div></div></div></div></a>
<h2>BlueprintUE.comとは</h2>
<p>いわゆるPastebinサービスの一種。</p>
<blockquote><p>
  Pastebin（ペーストビン）とは、テキストデータを保存し公開することができる、ウェブアプリケーションサービスである。保存されたテキストデータごとにURLが発行されるため、そのURLを伝えることで他人に閲覧させることができる。
</p></blockquote>
<p><span class="badge badge-blue">出典</span> <a href="https://ja.wikipedia.org/wiki/Pastebin">Wikipedia<span class="fa fa-share-square external-icon anchor-icon"></span></a></p>
<p>テキストベースのスクリプト言語などでは一般的なのだが、BlueprintUE.comはバイナリデータのBPに対応したサービスだ。</p>
<p>通常BPをWEBで共有しようとすると画像が一般的だがこの場合コピペができないため、人力で目コピするしかなく共有が大変になる。一応テキストで共有する方法もあるのだが…。</p>
<a rel="noopener" href="https://qiita.com/ConquestArrow/items/edf4454c86270382a3a3" title="[UE4]BlueprintをQiitaなどのブログで共有する方法 - Qiita" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://qiita-user-contents.imgix.net/https%3A%2F%2Fcdn.qiita.com%2Fassets%2Fpublic%2Farticle-ogp-background-1150d8b18a7c15795b701a55ae908f94.png?ixlib=rb-4.0.0&#038;w=1200&#038;mark=https%3A%2F%2Fqiita-user-contents.imgix.net%2F~text%3Fixlib%3Drb-4.0.0%26w%3D840%26h%3D380%26txt%3D%255BUE4%255DBlueprint%25E3%2582%2592Qiita%25E3%2581%25AA%25E3%2581%25A9%25E3%2581%25AE%25E3%2583%2596%25E3%2583%25AD%25E3%2582%25B0%25E3%2581%25A7%25E5%2585%25B1%25E6%259C%2589%25E3%2581%2599%25E3%2582%258B%25E6%2596%25B9%25E6%25B3%2595%26txt-color%3D%2523333%26txt-font%3DHiragino%2520Sans%2520W6%26txt-size%3D54%26txt-clip%3Dellipsis%26txt-align%3Dcenter%252Cmiddle%26s%3Dd25f91fe587619df6b5ed8fdc4769c2b&#038;mark-align=center%2Cmiddle&#038;blend=https%3A%2F%2Fqiita-user-contents.imgix.net%2F~text%3Fixlib%3Drb-4.0.0%26w%3D840%26h%3D500%26txt%3D%2540ConquestArrow%26txt-color%3D%2523333%26txt-font%3DHiragino%2520Sans%2520W6%26txt-size%3D45%26txt-align%3Dright%252Cbottom%26s%3D2330bf2a511b186edc001bb6968d8be9&#038;blend-align=center%2Cmiddle&#038;blend-mode=normal&#038;s=f7e1e413b79891881debbd14c5dd6246" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">[UE4]BlueprintをQiitaなどのブログで共有する方法 - Qiita</div><div class="blogcard-snippet external-blogcard-snippet">UE4の強力なビジュアルスクリプティング言語である Blueprint は、ビジュアルスクリプティングという特徴から、Qiitaやブログで一般的な「コードを張り付けて共有」、といったことがしにくい。そこでいくつか方法をまとめてみた。
...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=qiita.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">qiita.com</div></div></div></div></a>
<p>BlueprintUE.comはほぼBPエディタ上の見た目をそのまま再現することができ、再現性が高い。またそのままコピペしてBPエディタに張り付けるだけで共有できる。しかもノードを動かして確認することもできる。</p>
<h2>BlueprintUE.comを匿名で使う</h2>
<p>まずは一番カンタンな方法から。</p>
<h3>1. サイトに行く</h3>
<a rel="noopener" href="https://blueprintue.com/" title="PasteBin blueprints For Unreal Engine 4" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/https%3A%2F%2Fblueprintue.com%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">PasteBin blueprints For Unreal Engine 4</div><div class="blogcard-snippet external-blogcard-snippet">BlueprintUE.com is a tool for sharing, rendering and rating blueprints for Unreal Engine 4. UE4 is a game engine which use visual scripting called blueprint.</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=blueprintue.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">blueprintue.com</div></div></div></div></a>
<h3>2. 共有したいBPを選択してCtrl+Cする</h3>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/306d0ec65a438e4cca3f5386e58882a0.png" alt="" /></p>
<h3>3. BlueprintUE.comのトップページに張り付ける</h3>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/9d701bb706bfbf19804d3e8b6a00e82a.png" alt="" /></p>
<p>黒い文字列入力欄があるのでCtrl+Vして張り付ける。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/0eadd5eeb82371264b98c6dfc93f1ba9.png" alt="" /></p>
<h3>4. 名前をつける（半角英数字で）</h3>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/95cb5f09b580aa682347abb06e6087ba.png" alt="" /></p>
<p>半角英数字で名前をつける。日本語は入力可能だが、ランダムな半角英数字の文字列に強制的に置き換えられる。</p>
<h3>5. 公開範囲、公開期間、UE4のバージョンを設定</h3>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/016c9fb82f08485e286261da159e6f24.png" alt="" /></p>
<ul>
<li><strong>A</strong> : 公開範囲
<ul>
<li>どこまで見せるかを決められる</li>
<li><code>public</code> : 全体に共有。トップメニューの下などにリストアップされる</li>
<li><code>unlisted</code> : リストアップされない。URLが知っている人のみ見られる</li>
<li><code>private</code> : 非公開。匿名ユーザーの場合は使用不可。</li>
</ul>
</li>
<li><strong>B</strong> : 公開期間
<ul>
<li>いつまで見せるかを決められる</li>
<li><code>never</code> : いつまでも残す</li>
<li><code>1 hour</code> : 1時間だけ</li>
<li><code>1 day</code> : 1日だけ</li>
<li><code>1 week</code> : 1週間だけ</li>
</ul>
</li>
<li><strong>C</strong> : UE4のバージョン
<ul>
<li>共有したいBPを作ったUE4のバージョン</li>
<li>BPもバージョンごとに少しずつ違う</li>
</ul>
</li>
</ul>
<h3>6. 投稿</h3>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/82d7593a42353da76f30604f97cf5497.png" alt="" /></p>
<p>左下の「 <strong>Create your pasetebin</strong> 」ボタンを押して投稿する。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/e0766eea4bc835d870f710948c709d73.png" alt="" /></p>
<p>投稿後はグラフをズームイン・アウトしたり、スクロールしたり、ノードを移動したりできる。部分選択も可能。</p>
<p>実際に投稿したのはこちら。</p>
<a rel="noopener" href="https://blueprintue.com/render/xd26ksrr" title="Pastebin Blueprint" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/https%3A%2F%2Fblueprintue.com%2Frender%2Fxd26ksrr?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">Pastebin Blueprint</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=blueprintue.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">blueprintue.com</div></div></div></div></a>
<h3>7. 共有する</h3>
<p>投稿してできたページのURLを教えることでそのままコピペ共有が可能になる。</p>
<p>また、<code>iframe</code>が埋め込めるサイトなら下のようなコードをコピーして埋め込むことができる。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/7ef472834cc67900b147dbacacb53e72.png" alt="" /></p>
<pre><code class=" line-numbers">&lt;iframe src="https://blueprintue.com/render/xd26ksrr" scrolling="no"&gt;&lt;/iframe&gt;
</code></pre>
<p>実際に張り付けてみると以下のようになる。</p>
<p><iframe src="https://blueprintue.com/render/xd26ksrr" scrolling="no"></iframe></p>
<p>ブログなどでBPの説明をする際に大変便利だ。</p>
<h2>BlueprintUE.comにユーザー登録して使う</h2>
<p>単純に公開するだけならユーザー登録も不要で簡単だ。<br />
しかし、たとえばブログなどで公開する際にあとから中身を修正したり、やっぱり公開を辞めたりといった編集をしたい。この場合はユーザー登録をしておく必要がある。</p>
<p>また、完全非公開で使いたい場合、これもユーザー登録が必要になる。</p>
<h3>1. トップページの右上の「Register」をクリック</h3>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/55a012088bf1e29f617f934d6d9cc42d.png" alt="" /></p>
<h3>2. ニックネームとパスワード入力してSign UP</h3>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/e0f3c2d439686981a5f480ba50bb1b52.png" alt="" /></p>
<ol>
<li>nickname(ニックネーム、ユーザー名)を入力する
<ul>
<li>このサイト上でのユーザー名表示になる</li>
</ul>
</li>
<li>パスワードを入力 もしくは　SNSアカウントと連携する</li>
<li>Sign Upボタンをおして登録</li>
</ol>
<p>登録が成功しログインすると右上のメニューの「Register」「Login」が「My Profile」「Logout」に変わる。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/4e8f9b463ed14a3b94d810f708984b20.png" alt="" /></p>
<h3>3. 投稿する</h3>
<p>投稿は匿名の時と同じ。</p>
<h3>4. 個人設定を見る＆投稿一覧を見る</h3>
<p>画面右上の「My Profile」をクリックすると個人ページに移動する。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/8576048266b77c6d0fd5be6cdff92df2.png" alt="" /></p>
<ol>
<li>個人ページのプロフィール設定
<ul>
<li>TwitterやGithubなどのアカウントへリンクを追加できる</li>
</ul>
</li>
<li>プロフィール編集ボタン
<ul>
<li>編集はこのボタンから設定可能</li>
</ul>
</li>
<li>これまでに投稿したPastebinの一覧
<ul>
<li>タイトルをクリックするとそのBPのページに飛ぶことができる</li>
</ul>
</li>
</ol>
<h3>5. 以前の投稿を編集する</h3>
<p>ログイン状態でBPのPastebinページにアクセスすると右上に「Edit」ボタンができているのでクリックする。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/4c8b631dd43f8ccab8941a55ce3bf591.png" alt="" /></p>
<h4>5.1 追加情報を加える</h4>
<p>編集ページの上部では追加情報を加えることができる。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/9ea31982fb0b1978dea1373e908cf004.png" alt="" /></p>
<ol>
<li>タイトル名
<ul>
<li>タイトル名を変更できる。半角英数字のみ。</li>
</ul>
</li>
<li>タグ
<ul>
<li>検索などで使えるようにタグを入力できる。</li>
</ul>
</li>
<li>説明文
<ul>
<li>説明文章を追加できる。</li>
</ul>
</li>
<li>ビデオ
<ul>
<li>説明などの動画がある場合は動画URLを指定できる</li>
<li>指定できるのは　Youtube, Vimeo, Dailymotion　の動画</li>
</ul>
</li>
<li>サムネイル画像
<ul>
<li>サムネイル画像を設定できる</li>
</ul>
</li>
</ol>
<h4>5.2 BPを更新する</h4>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/df7a7420f74b1607cf4251cfb144aecc.png" alt="" /></p>
<ol>
<li>新しいBPをここに張り付ける</li>
<li>更新理由を書き込む
<ul>
<li>必須項目。更新の理由を書き込む。簡単なver.管理の目安になる。</li>
</ul>
</li>
<li>BPを更新する</li>
</ol>
<p>更新するとBPのページの下部に履歴が残る。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/82285a99845bf0ab9dc4dc99fdce17da.png" alt="" /></p>
<h4>5.3 設定変更</h4>
<p>同じページで設定変更もできる。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/df7a7420f74b1607cf4251cfb144aecc.png" alt="" /></p>
<ol start="4">
<li>公開範囲の変更</li>
<li>UE4バージョンの変更
<ul>
<li>BPを新しいUE4バージョン用に更新した場合はここも一緒に変更する</li>
</ul>
</li>
<li>コメントの許可・不許可
<ul>
<li>交流しなくない場合はコメント不許可にするとよい</li>
</ul>
</li>
<li>設定変更</li>
</ol>
<h2>BlueprintUE.comの困ったところ</h2>
<p>BlueprintUE.comは便利だが、ちょっとだけ困ったことがある。</p>
<ul>
<li>微妙にサイトが重い</li>
<li>微妙に再現性が低い
<ul>
<li>逆に戻るワイヤーがおかしなことになる</li>
</ul>
</li>
</ul>
<p>EpicGamesが買収してくれれば良くなりそうな…自社サービスにしてくれないかな…？</p>
]]></content:encoded>
					
					<wfw:commentRss>https://conquestarrow.com/how-to-use-blueprintue-com/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>UE4を使うなら4Kディスプレイは欲しい</title>
		<link>https://conquestarrow.com/ue4-needs-4k-display/</link>
					<comments>https://conquestarrow.com/ue4-needs-4k-display/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Conquest Arrow]]></dc:creator>
		<pubDate>Tue, 26 Jun 2018 17:38:13 +0000</pubDate>
				<category><![CDATA[UE4]]></category>
		<category><![CDATA[4K]]></category>
		<guid isPermaLink="false">https://conquestarrow.com/?p=137</guid>

					<description><![CDATA[UE4 + 4Kディスプレイ UE4を使うなら、SSDは人権、CPUは４コア以上、などと言われる。 意外に言及されないのがディスプレイの広さ（解像度）。 UE4をつかうならおすすめは4Kディスプレイだ。 なぜ 4K ?  [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>UE4 + 4Kディスプレイ</h1>
<p>UE4を使うなら、SSDは人権、CPUは４コア以上、などと言われる。<br />
意外に言及されないのがディスプレイの広さ（解像度）。<br />
UE4をつかうならおすすめは4Kディスプレイだ。</p>
<h2>なぜ 4K ?</h2>
<p>ここでいう「4K」とは 「2160p, UHD」のこと。いわゆるFull HDの画面４枚分。<br />
なぜこれが快適なUE4環境に必要なのかを考えてみたい。</p>
<h3>快適な作業に必要な画面領域</h3>
<p>一般的なUE4の環境を考えてみると、<br />
①まずメインのレベルエディターのウィンドウを開き、<br />
②さらに何らかの作業をするのでBPエディタやペルソナエディタなどのウィンドウが開いている、<br />
というのが最も多いケースとして考えられる。</p>
<p>①、②ともに画面解像度が必要なウィンドウなのでそれぞれFullHDの画面を占有したい。</p>
<p>③さらに何らかの資料（Excelなりブラウザなり）を確認しながら作業をするとなると、もう一枚ディスプレイ領域が必要になる。</p>
<p>ここまで考えてみると、快適にUE4を使うようにするためには FullHDのトリプルディスプレイが必要になる（<code>1920x1080</code> x <code>3</code>）。</p>
<h3>トリプルディスプレイの問題点</h3>
<p>実際にトリプルディスプレイ環境を構築した人ならわかると思うが、ディスプレイのインチ数にもよるが横並びにディスプレイを３つも並べると、<strong>目線移動が大変</strong> だ。作業を進めるにあたって目線や首をあちこち動かさないといけない。一番左の画面の資料を見ながら、一番右の画面で操作する、というのは効率的とは言い難くなるのだ。</p>
<p>では縦に並べてみるのはどうか。もちろん１枚だけ上か下にし、残りの２枚は横並びにするというものだ。これは目線移動つらい問題は解決する。ただし、 <strong>デスクトップの横幅が途中で異なってしまう</strong> 上に、<strong>３つの画面の中央には画面の枠が来てしまう</strong> 。</p>
<h3>4Kディスプレイなら</h3>
<div class="success-box">横の目線移動はデュアルディスプレイと同じでラク</div>
<p>4Kディスプレイならトリプルディスプレイのような目線移動つらい問題は軽減される。<br />
インチ数とディスプレイとの距離にもよるが、デュアルディスプレイと同様の目線移動で済む。</p>
<div class="success-box">画面の中央に画面枠が来ない</div>
<p>当然ながら１枚のディスプレイなので画面の中央にディスプレイの枠が来ることはない。<br />
これはデュアルディスプレイ環境であっても問題なのでそこが解決するのは大きい。</p>
<div class="success-box">意外と安い</div>
<p>物にもよるが４枚ディスプレイをそろえるよりは安い。場合によっては３枚そろえるよりも安いか同程度の価格で手に入る。</p>
<p>たとえば現時点で調べると40インチクラスで5万円台から、というものすらある。TVパネルを流用したハーフグレア系のモニターはかなり値段がこなれてきている。</p>
<a rel="noopener" href="http://kakaku.com/pc/lcd-monitor/itemlist.aspx?pdf_Spec101=20&#038;pdf_Spec301=30-&#038;pdf_so=Spec301_a" title="&#20385;&#26684;.com - &#35299;&#20687;&#24230;&#65288;&#35215;&#26684;&#65289;:4K&#65288;3840x2160&#65289;&#12398;PC&#12514;&#12491;&#12479;&#12540;&#12539;&#28082;&#26230;&#12487;&#12451;&#12473;&#12503;&#12524;&#12452; &#12514;&#12491;&#12479;&#12469;&#12452;&#12474;&#12398;&#23567;&#12373;&#12356;&#38918; (&#12514;&#12491;&#12479;&#12469;&#12452;&#12474;:30&#22411;(&#12452;&#12531;&#12481;)&#12316;)" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/http%3A%2F%2Fkakaku.com%2Fpc%2Flcd-monitor%2Fitemlist.aspx%3Fpdf_Spec101%3D20%26pdf_Spec301%3D30-%26pdf_so%3DSpec301_a?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#20385;&#26684;.com - &#35299;&#20687;&#24230;&#65288;&#35215;&#26684;&#65289;:4K&#65288;3840x2160&#65289;&#12398;PC&#12514;&#12491;&#12479;&#12540;&#12539;&#28082;&#26230;&#12487;&#12451;&#12473;&#12503;&#12524;&#12452; &#12514;&#12491;&#12479;&#12469;&#12452;&#12474;&#12398;&#23567;&#12373;&#12356;&#38918; (&#12514;&#12491;&#12479;&#12469;&#12452;&#12474;:30&#22411;(&#12452;&#12531;&#12481;)&#12316;)</div><div class="blogcard-snippet external-blogcard-snippet">解像度（規格）:4K（3840x2160）のPCモニター・液晶ディスプレイ製品一覧 モニタサイズの小さい順！たくさんの製品の中から、価格やスペック、ランキング、満足度など、さまざまな条件を指定して自分にピッタリの製品を簡単に探し出すことができます。(モニタサイズ:30型(インチ)〜)</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=kakaku.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">kakaku.com</div></div></div></div></a>
<div class="success-box">4Kコンテンツをネイティブな解像度で確認できる</div>
<p>UE4で制作するコンテンツは4K解像度をターゲットにすることは珍しくない。その開発環境で４Kで表示できないというのはそもそも開発環境として問題がある。</p>
<h2>4K導入の障害と対策</h2>
<p>「よし、4Kディスプレイ導入しちゃうぞ」となったときいくつか障害がある。</p>
<h3>30hz問題</h3>
<p>ひと昔前の内臓グラボなどは4Kのデスクトップ表示が可能なものの、30hzが上限になっているものがある。もっとも、UE4の開発環境なのでちゃんとしたグラボを導入しているだろうからこの問題はあまり起きにくい。</p>
<div class="comment-box">
IntelのiGPU, AMDのAPUのようにCPU内蔵型グラフィック機能は、UE4においては動作確認用と割り切るべき。ちゃんとしたコンテンツ制作にはミドルクラスでよいので外付けのグラボを導入すべし。
</div>
<h3>HDMIのver.問題</h3>
<p>HDMIの1.4以前は4K解像度は30fpsが上限である。端子とケーブルがHDMI2.0以上かどうかを確認する必要がある。上記の内臓グラボの制限ははこのHDMI端子の問題の時もある。</p>
<a rel="noopener" href="https://ja.wikipedia.org/wiki/HDMI#HDMI%E5%90%84%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AE%E6%A9%9F%E8%83%BD%E8%A9%B3%E7%B4%B0" title="HDMI - Wikipedia" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://conquestarrow.com/wp-content/uploads/cocoon-resources/blog-card-cache/9d17aa72c9548b66415b72acb6ad92b5.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">HDMI - Wikipedia</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=ja.wikipedia.org" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">ja.wikipedia.org</div></div></div></div></a>
<h3>机の上のスペース</h3>
<p>２４インチ、２７インチといったディスプレイ解像度のまま大きくするなら40インチクラスのディスプレイになる。その場合机の上のスペースが物理的に足りない、ということが起こりうる。</p>
<p>また、置けるけど奥行きが足りない、という問題も起こりうる。あまりにも顔に近いと圧迫感が出てしまうので机が小さすぎる環境でないかどうかよく考えたほうがよい。事前にしっかり計測しておくこと。</p>
<p>なお、３０インチクラス以下の4Kディスプレイもあるが、細かすぎる、値段が高い、などの問題がある。</p>
<h3>１画面１ウィンドウの慣れ</h3>
<p>１画面１ウィンドウ最大化することで使い分ける癖ができてしまっている人は、広大な４Kの領域を持て余してしまうかもしれない。これまで無自覚に最大化する癖がついてしまっていると、4Kのデスクトップで苦労することになる（間延びしたウィンドウに面食らい、マウス移動が大変になる）。</p>
<div class="comment-box">
とはいえこれは慣れの問題である。そもそも4Kの場合、ウィンドウを最大化してはいけない。そこそこのウィンドウサイズで十分なスペースが得られるので最大化せずに並べるのだ。</p>
<p>Win10ならWinキー＋左右キー→Winキー＋上下キーで疑似的な画面分割ができるのでそれも使ってみるとよい。</p>
<a rel="noopener" href="https://cloud-work.jp/windows/shortcut/" title="https://cloud-work.jp/windows/shortcut/" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/https%3A%2F%2Fcloud-work.jp%2Fwindows%2Fshortcut%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">https://cloud-work.jp/windows/shortcut/</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=cloud-work.jp" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">cloud-work.jp</div></div></div></div></a>
</div>
<h3>ハーフグレアってグレアやん問題</h3>
<p>安価な4KモニタはTVパネルの流用のため、ノングレアが非常に少ない。よくてハーフグレアと呼ばれるものだ。しかし、ハーフグレアというのは見た印象はグレアそのものであり、PC作業環境としては反射が目立つ。</p>
<p>ちゃんとしたノングレアで40インチの4Kディスプレイ、となるとまだまだ価格が高くなってしまうのが現状だ。40インチクラスになるとノングレアにするフィルムもめちゃくちゃ高いので現実的な選択肢にはなりにくい。</p>
<p>ハーフグレアに関しては、光源からの角度をかえるなどである程度妥協するしかない。</p>
<h2>まとめ</h2>
<ul>
<li>UE4には4Kディスプレイがおすすめ
<ul>
<li>メイン、サブ、資料で３画面つかう</li>
<li>トリプルディスプレイは枠が邪魔で置き方に困る</li>
</ul>
</li>
<li>4Kモニターなら
<ul>
<li>枠無し</li>
<li>目線移動も少ない</li>
<li>意外と安い</li>
<li>4Kコンテンツをちゃんと表示できる</li>
</ul>
</li>
<li>障害と対策
<ul>
<li>30hz制限<br />
-　ちゃんとした外付けグラボを導入しよう</li>
<li>HDMI ver.問題<br />
-　HDMI2.0以降をそろえよう</li>
<li>机の上のスペース
<ul>
<li>導入前に測ろう</li>
</ul>
</li>
<li>１画面１ウィンドウの慣れ
<ul>
<li>やり方を変えよう</li>
</ul>
</li>
<li>ハーフグレアってグレアやん問題
<ul>
<li>角度を変えて妥協しよう</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>おまけ</h3>
<p>自分が使っている・使ったモニター：</p>
<h4>DOSHISHA OD4K-49B1</h4>
<a rel="noopener" href="http://doshisha-av.com/OD4K-49B1.html" title="301 Moved Permanently" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/http%3A%2F%2Fdoshisha-av.com%2FOD4K-49B1.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">301 Moved Permanently</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=doshisha-av.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">doshisha-av.com</div></div></div></div></a>
<p>後継機種がでてもう販売していないが、７万円台で購入。後継機種もどうやらディスコンらしく9万円台まで値上がりしていたが本来は７万円台の製品。</p>
<h4>フィリップス　BDM4350UC/11</h4>
<p>いわゆる40インチクラスで「鉄板」と言われていたモデル。</p>
<div class="product-item-box amazon-item-box no-icon product-item-error cf"><div><a rel="nofollow noopener" href="https://www.amazon.co.jp/exec/obidos/ASIN/B01D9FP20A/conquestarrow-22/" target="_blank">Amazonで詳細を見る<span class="fa fa-share-square external-icon anchor-icon"></span></a></div></div>
<a rel="noopener" href="http://kakaku.com/item/K0000867165/" title="&#12501;&#12451;&#12522;&#12483;&#12503;&#12473; BDM4350UC/11 [42.51&#12452;&#12531;&#12481; &#12502;&#12521;&#12483;&#12463;/&#12471;&#12523;&#12496;&#12540;] &#20385;&#26684;&#27604;&#36611; - &#20385;&#26684;.com" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/http%3A%2F%2Fkakaku.com%2Fitem%2FK0000867165%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#12501;&#12451;&#12522;&#12483;&#12503;&#12473; BDM4350UC/11 [42.51&#12452;&#12531;&#12481; &#12502;&#12521;&#12483;&#12463;/&#12471;&#12523;&#12496;&#12540;] &#20385;&#26684;&#27604;&#36611; - &#20385;&#26684;.com</div><div class="blogcard-snippet external-blogcard-snippet">42.51インチのIPSパネルを採用した4K UHD（3840x2160）対応モデル。フィリップス BDM4350UC/11 の最安値を見つけよう！全国各地のお店の価格情報がリアルタイムにわかるのは価格.comならでは。製品レビューやクチコミもあります。</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=kakaku.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">kakaku.com</div></div></div></div></a>
<p>今年になって後継モデルがでたため売れ残りは値上がりしている。今からならこっちか。</p>
<div class="product-item-box amazon-item-box no-icon product-item-error cf"><div><a rel="nofollow noopener" href="https://www.amazon.co.jp/exec/obidos/ASIN/B07CHH5QPP/conquestarrow-22/" target="_blank">Amazonで詳細を見る<span class="fa fa-share-square external-icon anchor-icon"></span></a></div></div>
<a rel="noopener" href="http://kakaku.com/item/K0001048723/" title="&#12501;&#12451;&#12522;&#12483;&#12503;&#12473; 436M6VBRAB/11 [42.51&#12452;&#12531;&#12481; &#12502;&#12521;&#12483;&#12463;] &#20385;&#26684;&#27604;&#36611; - &#20385;&#26684;.com" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/http%3A%2F%2Fkakaku.com%2Fitem%2FK0001048723%2F?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">&#12501;&#12451;&#12522;&#12483;&#12503;&#12473; 436M6VBRAB/11 [42.51&#12452;&#12531;&#12481; &#12502;&#12521;&#12483;&#12463;] &#20385;&#26684;&#27604;&#36611; - &#20385;&#26684;.com</div><div class="blogcard-snippet external-blogcard-snippet">ウルトラクリア 4K UHD（3840 x 2160）解像度対応の42.51型ディスプレイ。「MultiView機能」搭載で最大4つのシステムのフルHD画像を1画面に表示できる。フィリップス 436M6VBRAB/11 の最安値を見つけよう！全国各地のお店の価格情報がリアルタイムにわかるのは価格.comならでは。製品レ...</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=kakaku.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">kakaku.com</div></div></div></div></a>
<h3>おまけその２</h3>
<p>4KディスプレイならBPエディタがこんなに広大に使えるぞという例。</p>
<blockquote class="twitter-tweet" data-lang="ja">
<p lang="ja" dir="ltr">とりあえず快適に組めそう　<a href="https://twitter.com/hashtag/UE4?src=hash&amp;ref_src=twsrc%5Etfw">#UE4<span class="fa fa-share-square external-icon anchor-icon"></span></a> <a href="https://t.co/Sp4x77FeXS">pic.twitter.com/Sp4x77FeXS<span class="fa fa-share-square external-icon anchor-icon"></span></a></p>
<p>&mdash; K. S. (@ConquestArrow) <a href="https://twitter.com/ConquestArrow/status/848924465417211904?ref_src=twsrc%5Etfw">2017年4月3日<span class="fa fa-share-square external-icon anchor-icon"></span></a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
]]></content:encoded>
					
					<wfw:commentRss>https://conquestarrow.com/ue4-needs-4k-display/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>現役GDが考えるUE4ブループリントのきれいな書き方</title>
		<link>https://conquestarrow.com/ue4-beautiful-blueprint-style/</link>
					<comments>https://conquestarrow.com/ue4-beautiful-blueprint-style/#disqus_thread</comments>
		
		<dc:creator><![CDATA[Conquest Arrow]]></dc:creator>
		<pubDate>Mon, 25 Jun 2018 17:56:43 +0000</pubDate>
				<category><![CDATA[Blueprint]]></category>
		<category><![CDATA[Gamemakin UE4スタイルガイド]]></category>
		<category><![CDATA[UE4]]></category>
		<category><![CDATA[スタイルガイド]]></category>
		<guid isPermaLink="false">https://conquestarrow.com/?p=161</guid>

					<description><![CDATA[はじめに UE4のブループリント（以下、BP）はビジュアルスクリプティング言語1と呼ばれるグラフィカルなプログラミング言語である。 ビジュアルスクリプティング言語はテキストベースのスクリプティング言語に比べて歴史が浅く、 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h1>はじめに</h1>
<p>UE4のブループリント（以下、BP）はビジュアルスクリプティング言語<sup id="fnref-161-visualscripting"><a href="#fn-161-visualscripting" class="footnote-ref" role="doc-noteref">1</a></sup>と呼ばれるグラフィカルなプログラミング言語である。</p>
<p>ビジュアルスクリプティング言語はテキストベースのスクリプティング言語に比べて歴史が浅く、言語ごとに特性も大きく変わることなどから「こう書くべき」というノウハウがあまり溜まっていない。また、UE4のBPはゲームデザイナーやアーティストなどのノンプログラマ向けに作られた経緯もあることから、使用者が書き方・スタイルガイドへの意識やノウハウが少ない。</p>
<blockquote class="twitter-tweet" data-lang="ja">
<p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/UE4?src=hash&amp;ref_src=twsrc%5Etfw">#UE4<span class="fa fa-share-square external-icon anchor-icon"></span></a> のBlueprintはとても良いんだけど、文字通りスパゲッティ化しやすいという欠点も。スタイルフォーマッター的なツールがない ＆ 主に使うノンプログラマはノウハウ持ってない ＆ 見やすいスタイルが固まってない などが理由。</p>
<p>&mdash; K. S. (@ConquestArrow) <a href="https://twitter.com/ConquestArrow/status/856535445429116929?ref_src=twsrc%5Etfw">2017年4月24日<span class="fa fa-share-square external-icon anchor-icon"></span></a></p></blockquote>
<p><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></p>
<p>結果以下のような問題をBPは抱えている；</p>
<ul>
<li>👎ノードをつなぐワイヤーのスパゲッティ化
<ul>
<li>見て理解するのが困難になり生産性が落ちる</li>
<li>問題のある処理を見逃しがちになる</li>
</ul>
</li>
<li>👎ワイヤー繋げなおしの手間がかかることによる処理の移植のしにくさ</li>
<li>👎一画面に処理が収まりきらず処理を理解するために画面スクロール・ズームを多用せざるを得ない
<ul>
<li>UE4のエディタは一般的にDual Displayだと足りないといわれる一因</li>
</ul>
</li>
</ul>
<p>以下紹介する書き方は上記問題を解決し、不具合を防止し生産性を上げるBPの書き方のノウハウになる。</p>
<div class="information-box">
<p>なお、以下に記載以外は原則 <span class="badge badge-blue">出典</span><br />
<a href="https://github.com/akenatsu/ue4-style-guide/blob/master/README.jp.md">Gamemakin UE4スタイルガイド<span class="fa fa-share-square external-icon anchor-icon"></span></a> に従うのが良い。</p>
<a rel="noopener" href="https://github.com/akenatsu/ue4-style-guide/blob/master/README.jp.md" title="akenatsu/ue4-style-guide" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://opengraph.githubassets.com/394c8994094e107d1f0f94bd8af5d29ed466e9a428921d7dfb2f9765567ca760/akenatsu/ue4-style-guide" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">akenatsu/ue4-style-guide</div><div class="blogcard-snippet external-blogcard-snippet">An attempt to make Unreal Engine 4 projects more consistent - akenatsu/ue4-style-guide</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=github.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">github.com</div></div></div></div></a>
</div>
<div class="comment-box">もし、一度もUE4スタイルガイドを見たことがない場合は一度目を通しておくべき。分量がかなりあるのでBPの項目だけでも良い</div>
<h2>基本単位は実行ピンのあるノード単位でまとめ、まっすぐに並べる</h2>
<div class="primary-box"><span class="badge badge-red">ルール</span> 基本単位は実行ピンのあるノード単位でまとめる</div>
<p>まず、<strong>実行ピン</strong><sup id="fnref-161-execpin"><a href="#fn-161-execpin" class="footnote-ref" role="doc-noteref">2</a></sup> が入出力ピンとしてついているノードを基本の単位として考える。</p>
<p>該当するのはフロー制御ノード、イベントノード、普通の関数ノード、変数のSetノード、マクロノード、サブグラフ(折りたたみグラフ)ノード等。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/829ad4739745d44dd727e51e9d72920b.png" alt="「基本単位」の基準になる実行ピン付ノードの例" /></p>
<p>BPの処理は実行ピン同時をつなぐ <strong>実行ワイヤー</strong><sup id="fnref-161-execwire"><a href="#fn-161-execwire" class="footnote-ref" role="doc-noteref">3</a></sup> をたどって処理が行われる。実行ピンの付かないノードはその意味では「脇道」なので基本的な流れを追いかけるのはこの 基本単位<sup id="fnref-161-basicblock"><a href="#fn-161-basicblock" class="footnote-ref" role="doc-noteref">4</a></sup> を追いかければよい。</p>
<div class="primary-box"><span class="badge badge-red">ルール</span> 基本単位同士をまっすぐに並べる</div>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/20973896f11ddf9dc5f2c6e4514529a4.png" alt="実行ワイヤーをまっすぐになるっように実行ピン付ノードを並べる" /></p>
<p>次に、『Gamemakin UE4スタイルガイド』<sup id="fnref-161-styleguide"><a href="#fn-161-styleguide" class="footnote-ref" role="doc-noteref">5</a></sup> を参考に実行ピン付ノード同士を直線状に並べてゆく。</p>
<p>前述のように、BPの処理は実行ピン同時をつなぐ <strong>実行ワイヤー</strong><sup id="fnref2:161-execwire"><a href="#fn-161-execwire" class="footnote-ref" role="doc-noteref">3</a></sup> をたどって処理が行われるので、これらのノードがわかりやすく整列して並んでいないと人間の理解が困難になってゆく。仮に迷路のような並び方をしていた場合、遅かれ早かれバグの温床になってしまう。</p>
<p>実行ピン付ノードをまっすぐに並べる事で、 <strong>どこを目で追いかければよいかが一発で見分けられるようにする</strong> のが目的。<br />
また、以降に記載するルールの恩恵を得るための基本的な前提となる。</p>
<ul>
<li><span class="badge badge-blue">出典</span><span class="badge badge-grey">StyleGuide 3.4.3</span> <a href="https://github.com/akenatsu/ue4-style-guide/blob/master/README.jp.md#343-%E7%99%BD%E3%81%84%E5%AE%9F%E8%A1%8C%E3%83%AF%E3%82%A4%E3%83%A4%E3%83%BC%E3%82%92%E6%9C%80%E5%84%AA%E5%85%88%E3%81%AB%E3%81%99%E3%82%8B%E3%81%B9%E3%81%8D-">3.4.3 白い実行ワイヤーを最優先にするべき<span class="fa fa-share-square external-icon anchor-icon"></span></a></li>
</ul>
<h2>実行ピン付ノードの下に実行ピン無しのノードを積み重ねる</h2>
<div class="primary-box"><span class="badge badge-red">ルール</span> 実行ピン付ノードの下に実行ピン無しのノードを積み重ねる</div>
<p>実行ピン付のノードには「実行ピンではない入力ピン」（プログラミング用語でいえば関数の引数に当たる）があることがある。<br />
そのピンへワイヤーを繋ぐ元のノードが実行ピン付でない場合は、実行ピン付ノードから位置を離すのではなくすぐ下に重ねるように隣接して設置する。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/67ea63ae9555281419e5913c2eeafbf0.png" alt="ノードを重ねる" /></p>
<p>実行ピン無しノードからさらに実行ピン無しノードが繋がっている場合（例：コンポーネントの変数をGetするときなど）は、さらにその下に配置して、先がなくなるまで下に重ねてゆく。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/555cf664deea5f9228adebbc5fe1adca.png" alt="実行ピンなしノードはどんどん下に重ねる" /></p>
<p>該当するのは、数値の四則演算ノードや変数のGetノード、<code>pure</code>に指定された関数(純粋関数<sup id="fnref-161-pure"><a href="#fn-161-pure" class="footnote-ref" role="doc-noteref">6</a></sup>)ノードなど。</p>
<p>実行ピン付のノードとそれ同士の繋がりを「木の幹」とすると、実行ピンの付かないノードは「木の枝葉」に当たる。<br />
<strong>木の幹と枝葉（本筋と脇道）が一目で分かるように、並べ方で区別がつくようにする</strong> のが一つ目の目的である。</p>
<p>もしこのルールに従わない場合、ワイヤーの色に差があるとはいえメインの処理の流れにみえるように配置することも可能であり、人間の理解が困難になる。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/0349ddf2844f08fb1fd49ed8d416e211.png" alt="幹と枝葉の区別の付きにくい悪い例の図" /></p>
<p>二つ目の目的としては、 <strong>基本単位（実行ピン付きノード＋それから参照される実行ピン無しノード）をブロック状に一定範囲にまとめておくことで矩形選択しやすくする</strong> ことである。矩形選択しやすいということは処理の単位で動かしやすく整理しやすい、コメントノードでくくりやすい<sup id="fnref-161-commentnode"><a href="#fn-161-commentnode" class="footnote-ref" role="doc-noteref">7</a></sup>、あるいはコピーやカットなど移植がしやすいということにつながる。</p>
<p>もしこのルールに従わない場合、グラフを見やすく整理したり、リファクタリングしたり、処理を移動する際に、マウスクリックやコピーペーストなどの作業が何度も発生し、「書くのが大変」という状況になってしまう。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/0f78eaec4535e210356650f24164386e.png" alt="矩形選択しにくい悪い例の図" /></p>
<div class="comment-box">BPに対してテキストベースのほうが書くスピードが速くてマシ、と思っている人は、この方法を試してもらうと大分マシになるだろう。テキストにも書き方のコツがあるように、BPなどのヴィジュアルノードベースにも「書き方」（描き方？）のコツがある。</div>
<h3>同じ基本単位のノード群は左端でそろえる</h3>
<div class="primary-box"><span class="badge badge-red">ルール</span> 同じ基本単位（実行ピン付きノード＋それから参照される実行ピン無しノード群）のノードはその左端でそろえる</div>
<p>そろえることで <strong>基本単位<sup id="fnref2:161-basicblock"><a href="#fn-161-basicblock" class="footnote-ref" role="doc-noteref">4</a></sup>を視覚的に認識しやすくする</strong> のが目的。<br />
ただし、四端どこでもよいわけではなく左端でないといけない。</p>
<p>BPのノードは大きさが可変である。UE4エディタの表示言語を切り替えたり<sup id="fnref-161-changelang"><a href="#fn-161-changelang" class="footnote-ref" role="doc-noteref">8</a></sup>、ノードの入力欄の内容の変化、ノードの対象や属するもの（例：関数ノードの属するBPクラス名）の名称の変更などによって、いくらでも大きさが変わる。</p>
<p>そのため右端でそろえたとしてもいつでもそろわなくなる可能性があり、あまり意味がない（かけた手間が無駄になる可能性が高い）。<br />
左上が原点となるので、下に重ねるノード群も同じ左端でそろえるようにすることで <strong>ノードサイズの可変にも耐えられるようにする</strong> 。</p>
<h3>実行ピン付ノード引数の順番とノードの積み重ね順を合わせる</h3>
<div class="primary-box"><span class="badge badge-red">ルール</span> 引数（入力ピン）が複数あるノードの場合には、そのピンにつながる先のノード群の配置も入力ピンの順番に合わせる</div>
<p><strong>順番を合わせることで理解をしやすく</strong> し、また <strong>矩形選択しやすくする</strong> のが目的。</p>
<p>一つの基本単位に関連するノードを重ねた場合など、縦に大きくなることがしばしばある。この場合、仮に入力ピンの順番と繋がった先のノード群の並びの順番がバラバラであると、どのようにつながっているのかわかりにくい。また矩形選択も関係ないノードが混ざりこむためにしにくくなる。</p>
<h3>ノードの入力ピンが多い場合はノード２つ分の幅を使って並べる</h3>
<div class="primary-box"><span class="badge badge-red">ルール</span> ノードの入力ピンが多い場合はノード２つ分の幅を使って並べる</div>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/013b100e31520f39d6645cf44679fa8c.png" alt="入力ピンが多いノードの並び方のルールの例" /></p>
<p><strong>過剰に縦に長い基本単位ができるのを防ぐ</strong> のが目的。</p>
<div class="comment-box">
<p>なお、入力ピンの先のノードが単純でなく数珠つなぎになる場合はまとめて<code>pure</code>な関数（純粋関数）ノードにまとめることを検討する。</p>
<p><img alt="pureな関数ノードに入力ピンをまとめる" src="https://conquestarrow.com/wp-content/uploads/2018/06/082adca887b0aa86015dafc082cbcc72.png" /></p>
<p>入力ピンが多くない場合でも検討してみるとよい。</p>
</div>
<h2>入出力ピンから伸びるワイヤーを一本に絞る</h2>
<div class="primary-box"><span class="badge badge-red">ルール</span> 入出力ピンから伸びるワイヤーを一本に絞る</div>
<p>１つ目の目的は <strong>スパゲッティ化の防止</strong> 。</p>
<p>特にあるノードの出力ピンから複数のノードでワイヤーが繋がっている場合、まるでタコ足配線のようにあちこちにワイヤーが繋がることになる。このような場合ワイヤーがノードと重なる可能性が高く、ワイヤーを目で追うときに邪魔になって理解がしにくくなる。また、遠く離れたノードからワイヤーを伸ばすことにもなり、画面をスクロールしないと処理が追えないという読みにくさにもつながる。</p>
<div class="alert-box">BPにおいては<strong>出力ピンに複数のワイヤーをつなげることはスパゲッティ化を招く第一歩</strong>であり、避けなければならない。</div>
<p>２つ目の目的は <strong>基本単位の移植時にワイヤーの接続情報を維持する</strong> ことである。</p>
<p>具体的には次のルールに従う。</p>
<h3>基本単位内で使うものは基本単位内で完結するようにする</h3>
<div class="primary-box"><span class="badge badge-red">ルール</span> 基本単位内で繋ぐノードは他から繋ぐのではなく基本単位内で完結するようにそれぞれ配置して繋ぐ</div>
<p>たとえば　基本単位A　と　基本単位B　の２つの基本単位があり、ローカル変数<code>X</code>の値を参照する共通の処理があるとする。</p>
<p>この時何も考えずに思わず、<code>Get X</code>ノードからそれぞれの基本単位内のノードにつなげたくなるが、そうしてしまうとスパゲッティ化の第一歩（２本のワイヤー <strong>だけ</strong> で済むならよいが本当に将来も２本だけなのかは <em>誰にも保障できない</em> 。気が付いたらスパゲッティ化している。）につながるうえに、矩形選択時に一つだけ<code>Get X</code>ノードが漏れるため選択しにくくなってしまう。</p>
<p><iframe loading="lazy" src="https://blueprintue.com/render/vkoeor2p" scrolling="no" width="640" height="640px"></iframe></p>
<p>この例では<code>Get X</code>ノードを２つ配置し、それぞれ　基本単位A　と　基本単位B　のブロックの中に納まるように配置する。</p>
<p><iframe loading="lazy" src="https://blueprintue.com/render/3rt2ffac" scrolling="no" width="640" height="640px"></iframe></p>
<p>こうすることで <strong>将来にわたってもスパゲッティ化を起こさず</strong>、<strong>矩形選択しやすさを維持できる</strong>。</p>
<h3>複数本の実行ワイヤーは入力ピンにつなぐ前にRerouteノードでまとめる</h3>
<div class="primary-box"><span class="badge badge-red">ルール</span> 複数本の実行ワイヤーは入力ピンにつなぐ前にRerouteノードでまとめる</div>
<p>ワイヤーを直接一つのピンにつなぐのではなく、一旦 <code>Reroute</code>ノード<sup id="fnref-161-reroute"><a href="#fn-161-reroute" class="footnote-ref" role="doc-noteref">9</a></sup> で束ねたうえで入力ピンには１本だけ繋ぐようにする。</p>
<p><iframe loading="lazy" src="https://blueprintue.com/render/gwt0my2a" scrolling="no" width="640" height="640px"></iframe></p>
<p>コピー＆ペーストやカットなどで処理を移植する際に、<code>Reroute</code>ノード込みで選択しておくことで、 <strong>ワイヤーのつながりが維持される</strong> のが目的。繋ぎなおす手間、覚えておく手間を減らし、つなぎ間違いによるケアレスミスを防止する。</p>
<p>仮に、いきなりつながったままだと移植後にワイヤーが切れてしまい、繋ぎなおす手間がかかる。また、ちゃんと覚えていられれば良いものの、つなぐ先を間違ってしまい、処理を移植したことでエンバグする恐れがある。</p>
<h2>原則、処理の結果は変数に入れ、他の処理単位にワイヤーで繋がない</h2>
<div class="primary-box"><span class="badge badge-red">ルール</span> 原則、処理の結果は変数に入れ、他の処理単位にワイヤーで繋がない</div>
<p>「<a href="#toc6">基本単位内で使うものは基本単位内で完結するようにする</a>」のメリット、 <strong>スパゲッティ化防止・移植性の維持</strong> を得るために、原則処理結果は変数に確保し、直接ワイヤーで繋がないようにする。</p>
<p><iframe loading="lazy" src="https://blueprintue.com/render/mob6q-8w" scrolling="no" width="640" height="640px"></iframe></p>
<p><iframe loading="lazy" src="https://blueprintue.com/render/jkuj70kt" scrolling="no" width="640" height="640px"></iframe></p>
<div class="alert-box">以下は例外</div>
<ul>
<li><span class="badge badge-pink">例外</span>：
<ul>
<li>１回しか使用しない場合</li>
<li>実行ノード同士が隣接する</li>
</ul>
</li>
</ul>
<div class="comment-box">１回しか使用しないかどうか分からないからといってむやみやたらに変数に入れておく必要はない。１回しか使用せず、ワイヤーがスパゲッティ化する恐れがほとんどないなら問題ないだろう。</div>
<h2>実行ワイヤーで繋いだ&#8221;行&#8221;はSequenceノードを用いて繋ぐ</h2>
<div class="primary-box"><span class="badge badge-red">ルール</span> 意味のある実行ピン付ノードの繋がりを&#8221;行&#8221;とみなし適宜&#8221;改行&#8221;する</div>
<p>基本単位<sup id="fnref3:161-basicblock"><a href="#fn-161-basicblock" class="footnote-ref" role="doc-noteref">4</a></sup> をつないでいくとき、処理の意味として区切りを作ることができる。これを”行”とみなす。<br />
そうとらえることで、”改行”することができる。</p>
<p>&#8220;改行&#8221;をして&#8221;行&#8221;単位で分離することで、<strong>コメントノードで分かりやすく区別できるようにする</strong> ことが目的。また　<strong>行単位での移植性も確保</strong> できる。</p>
<div class="primary-box"><span class="badge badge-red">ルール</span> &#8220;行&#8221;同士を`Sequence`ノードで繋ぐ</div>
<p>&#8220;改行&#8221;の実現方法としてはZの文字のようにワイヤーをつないでいくことができるが、行内の処理を変更するたびにつなぎなおしたり、斜めにワイヤーが張られることでノードにかぶったりとあまり好ましくならない。</p>
<p>そこで <strong><code>Sequence</code>ノード</strong><sup id="fnref-161-sequence"><a href="#fn-161-sequence" class="footnote-ref" role="doc-noteref">10</a></sup> を使って複数の&#8221;行&#8221;をつなぐことで、行末端のノードからワイヤーを排除できる。例えば変数の初期化処理をまとめた行があった場合、Z字につないでいる場合は変数が増えるたびにつなぎなおしが必要になってしまうが、<code>Sequence</code>ノードを使えば単に後ろに初期化のノードを繋いでいくだけでよくなる。</p>
<p><iframe loading="lazy" src="https://blueprintue.com/render/vhdd5q-b" scrolling="no" width="640" height="640px"></iframe></p>
<p><code>Sequence</code>ノードを使った&#8221;改行&#8221;は、 <strong>行単位での移植性をより高めておく</strong> のが目的。</p>
<div class="alert-box">
<p>なお、<code>Sequence</code>ノードはいくつか注意点がある。</p>
<p><span class="badge">例</span> : Delayノードは想定の挙動にならない</p>
<a rel="noopener" href="http://monsho.blog63.fc2.com/blog-entry-159.html" title=" [UE4] Sequence&#12392;Delay&#12398;&#38306;&#20418; - &#12418;&#12435;&#12375;&#12423;&#12398;&#24035;&#31348;blog" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img src="https://s0.wordpress.com/mshots/v1/http%3A%2F%2Fmonsho.blog63.fc2.com%2Fblog-entry-159.html?w=160&#038;h=90" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title"> [UE4] Sequence&#12392;Delay&#12398;&#38306;&#20418; - &#12418;&#12435;&#12375;&#12423;&#12398;&#24035;&#31348;blog</div><div class="blogcard-snippet external-blogcard-snippet"></div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img src="https://www.google.com/s2/favicons?domain=monsho.blog63.fc2.com" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">monsho.blog63.fc2.com</div></div></div></div></a>
<p><span class="badge">例</span> : 途中の出力ピンのワイヤー末端で<code>Return</code>ノードが来ると<code>Sequence</code>の処理は中断される。</p>
<p>このような点に注意して使用する。</p>
</div>
<div class="comment-box">
<p>処理が莫大になって大きな画面スペースが必要になってしまった場合の解決方法として、この縦に伸びるようにするルール以外にも関数化・マクロ化・サブグラフ化という手段もある。</p>
<p>同じ処理があった場合はコピペするのではなく、関数化しよう。ほんの少しの差は引数で吸収できる。</p>
<p>同じ処理があり、かつ実行ピンが入力・出力どちらかで複数になる場合はマクロ化する。ただしBPのマクロは遅いので可能な限り使用しないようにする。</p>
<p>上記以外はサブグラフ化してまとめられるが、サブグラフを開いて読む手間というのも存在するのでそのコストは考えたほうが良い。個人的にはよほど大規模でない限り不要、大規模になってしまう場合はそもそも複数人の作業でバッティングする可能性が高いのでファイルを分けることを検討したほうが良いと思う。</p>
</div>
<div class="memo-box">関数化・マクロ化・サブグラフ化のオーバーヘッドに関してはきちんと計測をしたほうが良い。</div>
<h2>&#8220;行&#8221;の途中の折り返しは<code>Reroute</code>ノードを使ってノードに被らないよう直線的に引く</h2>
<div class="primary-box"><span class="badge badge-red">ルール</span> &#8220;行&#8221;の途中の折り返しはRerouteノードを使ってノードに被らないよう直線的に引く</div>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/a629c48281925c8bc8c01ce9d70c292c.png" alt="ワイヤーが被らないようにする" /></p>
<p><strong>ワイヤーがノードなどに被ることを防止する</strong> ことが目的。</p>
<p>&#8220;行&#8221;があまりにも横に伸びてしまった場合や、<code>ForEachLoopWithBreak</code>ノード等があった場合、&#8221;行&#8221;の折り返しが必要になる。何も考えずにそのままつなぐと、ノードや基本単位の中にワイヤーがかぶることで処理が追いにくくなってしまう。</p>
<h3>ワイヤーが一つのノードにループして戻ってくる場合は上を通す</h3>
<div class="primary-box"><span class="badge badge-red">ルール</span> ワイヤーが一つのノードにループして戻ってくる場合は上を通す</div>
<p><strong>読みやすさを維持しながら更新のコストを下げる</strong> のが目的。</p>
<p><iframe loading="lazy" src="https://blueprintue.com/render/qegka__x" scrolling="no" width="640" height="640px"></iframe></p>
<p>そのままつなぐと確実にワイヤーとノードが重なって処理が追いにくくなるので<code>Reroute</code>ノードで整理する。</p>
<p>下をぐるっと通すこともできるが、以下の問題がある。</p>
<ul>
<li>これまでのルールでノードを下に重ねるようにしたためかなり大回りになってしまう</li>
<li>処理を追加した場合など繋ぎなおし・<code>Reroute</code>ノードの配置しなおしが発生する</li>
<li><code>ForEachLoopWithBreak</code>ノードの<code>Completed</code>ピンのように下に続きの処理が伸びる時に交差する</li>
</ul>
<p>上を通すことで最小限のメンテコストで見やすさを維持できる。</p>
<p><img src="https://conquestarrow.com/wp-content/uploads/2018/06/595573543d4c77a0dca173b9414a0b60.png" alt="良い例" /><br />
https://blueprintue.com/blueprint/k21kb8k4/</p>
<h2>余談：BP以外での活用方法</h2>
<p>AnimBPのAnimノードグラフやマテリアルのノードグラフの場合、BPのグラフに比べて実行ワイヤーが少ない。その点注意すればこのルールを活用することもできる。</p>
<div class="memo-box">BP以外のUE4のノードのきれいな書き方のルールは別途考えていかないといけないだろう。</div>
<h2>まとめ</h2>
<h3>ルールと目的まとめリスト</h3>
<ul>
<li><span class="badge badge-red">ルール</span> 基本単位は実行ピンのあるノード単位でまとめる</li>
<li><span class="badge badge-red">ルール</span> 基本単位同士をまっすぐに並べる
<ul>
<li>どこを目で追いかければよいかが一発で見分けられるようにする</li>
</ul>
</li>
<li><span class="badge badge-red">ルール</span> 実行ピン付ノードの下に実行ピン無しのノードを積み重ねる
<ol>
<li>木の幹と枝葉（本筋と脇道）が一目で分かるように、並べ方で区別がつくようにする</li>
<li>基本単位（実行ピン付きノード＋それから参照される実行ピン無しノード）をブロック状に一定範囲にまとめておくことで矩形選択しやすくする</li>
</ol>
<ul>
<li><span class="badge badge-red">ルール</span> 同じ基本単位（実行ピン付きノード＋それから参照される実行ピン無しノード群）のノードはその左端でそろえる
<ul>
<li>基本単位<sup id="fnref4:161-basicblock"><a href="#fn-161-basicblock" class="footnote-ref" role="doc-noteref">4</a></sup>を視覚的に認識しやすくする</li>
<li>ノードサイズの可変にも耐えられるようにする</li>
</ul>
</li>
<li><span class="badge badge-red">ルール</span> 引数（入力ピン）が複数あるノードの場合には、そのピンにつながる先のノード群の配置も入力ピンの順番に合わせる
<ul>
<li>順番を合わせることで理解をしやすく</li>
<li>矩形選択しやすくする</li>
</ul>
</li>
<li><span class="badge badge-red">ルール</span> ノードの入力ピンが多い場合はノード２つ分の幅を使って並べる
<ul>
<li>過剰に縦に長い基本単位ができるのを防ぐ</li>
</ul>
</li>
</ul>
</li>
<li>入出力ピンから伸びるワイヤーを一本に絞る
<ul>
<li>スパゲッティ化の防止</li>
<li>基本単位の移植時にワイヤーの接続情報を維持する</li>
<li><span class="badge badge-red">ルール</span> 基本単位内で繋ぐノードは他から繋ぐのではなく基本単位内で完結するようにそれぞれ配置して繋ぐ
<ul>
<li>将来にわたってもスパゲッティ化を起こさず</li>
<li>矩形選択しやすさを維持できる</li>
</ul>
</li>
<li><span class="badge badge-red">ルール</span> 複数本の実行ワイヤーは入力ピンにつなぐ前にRerouteノードでまとめる
<ul>
<li>ワイヤーのつながりが維持される</li>
</ul>
</li>
</ul>
</li>
<li><span class="badge badge-red">ルール</span> 原則、処理の結果は変数に入れ、他の処理単位にワイヤーで繋がない
<ul>
<li>スパゲッティ化防止・移植性の維持</li>
</ul>
</li>
<li>実行ワイヤーで繋いだ&#8221;行&#8221;はSequenceノードを用いて繋ぐ
<ul>
<li><span class="badge badge-red">ルール</span> 意味のある実行ピン付ノードの繋がりを&#8221;行&#8221;とみなし適宜&#8221;改行&#8221;する
<ul>
<li>コメントノードで分かりやすく区別できるようにする</li>
<li>行単位での移植性も確保</li>
</ul>
</li>
<li><span class="badge badge-red">ルール</span> &#8220;行&#8221;同士をSequenceノードで繋ぐ
<ul>
<li>行単位での移植性をより高めておく</li>
</ul>
</li>
</ul>
</li>
<li><span class="badge badge-red">ルール</span> &#8220;行&#8221;の途中の折り返しはRetouteノードを使ってノードに被らないよう直線的に引く
<ul>
<li>ワイヤーがノードなどに被ることを防止する</li>
<li><span class="badge badge-red">ルール</span> ワイヤーが一つのノードにループして戻ってくる場合は上を通す
<ul>
<li>読みやすさを維持しながら更新のコストを下げる</li>
</ul>
</li>
</ul>
</li>
</ul>
<h3>ルールの方針まとめ</h3>
<p>これまでのルールは大きく以下の判断基準に沿ったもの。</p>
<ol>
<li>読みやすさの維持</li>
<li>メンテコストの削減</li>
<li>選択しやすさ・移植性の確保</li>
</ol>
<p>上記に見合うこれら以外に良いルールがあればどんどん採用して「きれいな」BPを書くべし。</p>
<div class="footnotes" role="doc-endnotes">
<hr />
<ol>
<li id="fn-161-visualscripting" role="doc-endnote">
または「<a href="https://ja.wikipedia.org/wiki/%E3%83%93%E3%82%B8%E3%83%A5%E3%82%A2%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E">ヴィジュアルプログラミング言語<span class="fa fa-share-square external-icon anchor-icon"></span></a>」とも。&#160;<a href="#fnref-161-visualscripting" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a>
</li>
<li id="fn-161-execpin" role="doc-endnote">
デフォルトで白いピン。<span class="badge badge-purple">公式</span> <a href="http://api.unrealengine.com/JPN/Engine/Blueprints/UserGuide/Nodes/#%E5%AE%9F%E8%A1%8C%E3%83%94%E3%83%B3">実行ピン<span class="fa fa-share-square external-icon anchor-icon"></span></a>&#160;<a href="#fnref-161-execpin" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a>
</li>
<li id="fn-161-execwire" role="doc-endnote">
デフォルトで白いワイヤー。パルスが流れる。<span class="badge badge-purple">公式</span> <a href="http://api.unrealengine.com/JPN/Engine/Blueprints/UserGuide/Nodes/#%E5%AE%9F%E8%A1%8C%E3%83%AF%E3%82%A4%E3%83%A4%E3%83%BC">実行ワイヤー<span class="fa fa-share-square external-icon anchor-icon"></span></a>&#160;<a href="#fnref-161-execwire" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a> <a href="#fnref2:161-execwire" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a>
</li>
<li id="fn-161-basicblock" role="doc-endnote">
説明の便宜上の名前。実行ピン付ノードとそこに付随するノードをまとめたグラフ上でのノード群・並べるときの単位。&#160;<a href="#fnref-161-basicblock" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a> <a href="#fnref2:161-basicblock" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a> <a href="#fnref3:161-basicblock" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a> <a href="#fnref4:161-basicblock" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a>
</li>
<li id="fn-161-styleguide" role="doc-endnote">
<span class="badge badge-blue">出典</span> <a href="https://github.com/akenatsu/ue4-style-guide/blob/master/README.jp.md">Gamemakin UE4スタイルガイド<span class="fa fa-share-square external-icon anchor-icon"></span></a>&#160;<a href="#fnref-161-styleguide" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a>
</li>
<li id="fn-161-pure" role="doc-endnote">
<span class="badge badge-purple">公式</span>  <a href="http://api.unrealengine.com/JPN/Engine/Blueprints/UserGuide/Functions/#%E7%B4%94%E7%B2%8B%E9%96%A2%E6%95%B0%E3%81%A8%E9%9D%9E%E7%B4%94%E7%B2%8B%E9%96%A2%E6%95%B0">純粋関数と非純粋関数<span class="fa fa-share-square external-icon anchor-icon"></span></a>&#160;<a href="#fnref-161-pure" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a>
</li>
<li id="fn-161-commentnode" role="doc-endnote">
コメントノードは複数のノードを選択した後に「C」キーを押すことでまとめて括って作ることができる。 <span class="badge badge-purple">公式</span> <a href="http://api.unrealengine.com/latest/JPN/Engine/Blueprints/UserGuide/CheatSheet/index.html#%E3%83%8E%E3%83%BC%E3%83%89%E3%81%AE%E3%82%A2%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3">ノードのアクション<span class="fa fa-share-square external-icon anchor-icon"></span></a>&#160;<a href="#fnref-161-commentnode" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a>
</li>
<li id="fn-161-changelang" role="doc-endnote">
ノードの表示言語を日本語化すると検索しにくくなる、という問題もあるため英語で表示をおすすめする。&#160;<a href="#fnref-161-changelang" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a>
</li>
<li id="fn-161-reroute" role="doc-endnote">
<span class="badge badge-purple">公式</span> <a href="http://api.unrealengine.com/JPN/Engine/Blueprints/BP_HowTo/ConnectingNodes/#%E6%8E%A5%E7%B6%9A%E3%81%AE%E5%86%8D%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0">接続の再ルーティング<span class="fa fa-share-square external-icon anchor-icon"></span></a>&#160;<a href="#fnref-161-reroute" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a>
</li>
<li id="fn-161-sequence" role="doc-endnote">
<span class="badge badge-purple">公式</span> <a href="http://api.unrealengine.com/latest/JPN/Engine/Blueprints/UserGuide/FlowControl/index.html#sequence">Sequence<span class="fa fa-share-square external-icon anchor-icon"></span></a>&#160;<a href="#fnref-161-sequence" class="footnote-backref" role="doc-backlink">&#8617;&#xFE0E;</a>
</li>
</ol>
</div>
]]></content:encoded>
					
					<wfw:commentRss>https://conquestarrow.com/ue4-beautiful-blueprint-style/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>[ #UE4 ]Blueprintの関数のピンに説明をつける</title>
		<link>https://qiita.com/ConquestArrow/items/ee730a535c74ca33014c</link>
		
		<dc:creator><![CDATA[Conquest Arrow]]></dc:creator>
		<pubDate>Tue, 20 Jun 2017 15:06:14 +0000</pubDate>
				<category><![CDATA[Qiita記事]]></category>
		<guid isPermaLink="false">http://conquestarrow.com/?guid=68fa3d25f4c05f6b17aed487b1e06244</guid>

					<description><![CDATA[関数のBlueprintの入出力のピン（引数、戻り値）に対してコメント説明を付けられる隠し機能？について。


TL;DR


JavaDoc形式でDescription中に説明がかきこめる
入出力ピンの説明はピンにホバーした時のTooltipに表示されるようになる
多人数で開発する際にちゃんとドキュメント化しておくと迷わなくて便利なのでおすすめ



環境


UE4.16以降


4.14ぐらいから機能自体は実装されているが、クラッシュするバグがある





入出力ピン説明付けられない問題

...]]></description>
										<content:encoded><![CDATA[関数のBlueprintの入出力のピン（引数、戻り値）に対してコメント説明を付けられる隠し機能？について。

<h1>
<span id="tldr" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ee730a535c74ca33014c#tldr"><i class="fa fa-link"></i></a>TL;DR</h1>

<ul>
<li>JavaDoc形式でDescription中に説明がかきこめる</li>
<li>入出力ピンの説明はピンにホバーした時のTooltipに表示されるようになる</li>
<li>多人数で開発する際にちゃんとドキュメント化しておくと迷わなくて便利なのでおすすめ</li>
</ul>

<h1>
<span id="環境" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ee730a535c74ca33014c#%E7%92%B0%E5%A2%83"><i class="fa fa-link"></i></a>環境</h1>

<ul>
<li>UE4.16以降

<ul>
<li>4.14ぐらいから機能自体は実装されているが、クラッシュするバグがある</li>
</ul>
</li>
</ul>

<h1>
<span id="入出力ピン説明付けられない問題" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ee730a535c74ca33014c#%E5%85%A5%E5%87%BA%E5%8A%9B%E3%83%94%E3%83%B3%E8%AA%AC%E6%98%8E%E4%BB%98%E3%81%91%E3%82%89%E3%82%8C%E3%81%AA%E3%81%84%E5%95%8F%E9%A1%8C"><i class="fa fa-link"></i></a>入出力ピン説明付けられない問題</h1>

Blueprintの関数ノードそのものには説明がつけられる欄が用意されているが、入出力ピン（関数的に言えば引数や戻り値）には説明がつける欄が用意されていない。そのため、ピン数が多いノードはどのピンに何をどう繋げばよいのかわかりにくいという難点があった。

今回紹介する方法で説明を追加することで、きちんと入出力ピンに説明を追加し、しかもピンにホバーした時に表示することができるようになる。

<h1>
<span id="説明追加方法" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ee730a535c74ca33014c#%E8%AA%AC%E6%98%8E%E8%BF%BD%E5%8A%A0%E6%96%B9%E6%B3%95"><i class="fa fa-link"></i></a>説明追加方法</h1>

やりかたは関数BPの説明欄（Description）のテキスト中に、JavaDoc方式でコメントを書き込むことで実現可能。以下のタグが対応している。

<h2>
<span id="param" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ee730a535c74ca33014c#param"><i class="fa fa-link"></i></a><code>@param</code>
</h2>

<div class="code-frame" data-lang="javadoc"><div class="highlight"><pre>@param [ParamName] ...
</pre></div></div>

<a href="https://camo.qiitausercontent.com/6eaf22733db1e6dbf387d7194af5f67d97a399e3/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f30636361316462312d356239652d376561632d363035352d6330633638303438356661652e706e67"  rel="nofollow noopener"><img width="215" alt="func_param_doc.PNG" src="https://camo.qiitausercontent.com/6eaf22733db1e6dbf387d7194af5f67d97a399e3/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f30636361316462312d356239652d376561632d363035352d6330633638303438356661652e706e67" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/0cca1db1-5b9e-7eac-6055-c0c680485fae.png"></a><a href="https://camo.qiitausercontent.com/9c282c3e705b73913a9b55106391ffc3f90f9e4f/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f65303930616335372d366133652d646334612d633434612d6364303765373564303539662e706e67"  rel="nofollow noopener"><img width="135" alt="func_output_pin_doc.PNG" src="https://camo.qiitausercontent.com/9c282c3e705b73913a9b55106391ffc3f90f9e4f/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f65303930616335372d366133652d646334612d633434612d6364303765373564303539662e706e67" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/e090ac57-6a3e-dc4a-c44a-cd07e75d059f.png"></a>

入力ピン（引数）、および出力ピン（戻り値）の両方のピンに説明を追加することできる。

C系の関数と異なり、Blueprintの関数は複数の戻り値を出力ピンという形で返すことができるが、<code>@param</code>タグも戻り値の説明ができることに注意。

<h2>
<span id="returnreturns" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ee730a535c74ca33014c#returnreturns"><i class="fa fa-link"></i></a><code>@return</code>/<code>@returns</code>
</h2>

<div class="code-frame" data-lang="javadoc"><div class="highlight"><pre>@return ...
</pre></div></div>

<a href="https://camo.qiitausercontent.com/269b21a149ecd9df32ce7c23998f664920e3b277/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f38303331373061632d323933382d396361362d346135612d3737623637316130333535372e706e67"  rel="nofollow noopener"><img width="229" alt="func_return_doc.PNG" src="https://camo.qiitausercontent.com/269b21a149ecd9df32ce7c23998f664920e3b277/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f38303331373061632d323933382d396361362d346135612d3737623637316130333535372e706e67" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/803170ac-2938-9ca6-4a5a-77b671a03557.png"></a>

<strong><code>ReturnValue</code>という名称の</strong> 出力ピンの説明を追加することができる。出力ピンの名称は <strong>固定で複数説明できない</strong> ことに注意。

<h1>
<span id="ノード自体への特別な説明追加方法" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ee730a535c74ca33014c#%E3%83%8E%E3%83%BC%E3%83%89%E8%87%AA%E4%BD%93%E3%81%B8%E3%81%AE%E7%89%B9%E5%88%A5%E3%81%AA%E8%AA%AC%E6%98%8E%E8%BF%BD%E5%8A%A0%E6%96%B9%E6%B3%95"><i class="fa fa-link"></i></a>ノード自体への特別な説明追加方法</h1>

以下のタグはBPのノード自体への特別な説明表示ができるようになる。

<h2>
<span id="notesee" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ee730a535c74ca33014c#notesee"><i class="fa fa-link"></i></a><code>@note</code>/<code>@see</code>
</h2>

<div class="code-frame" data-lang="txt">
<div class="code-lang"><span class="bold">description欄のサンプル</span></div>
<div class="highlight"><pre>this is sample 
日本語ドキュメント


@note this is Note!
@see this is see!
</pre></div>
</div>

<a href="https://camo.qiitausercontent.com/3a35e84f52233c8ea054609b319d6b987d858034/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f36356533316436332d393934302d663363662d613433632d3764663535393738326434342e706e67"  rel="nofollow noopener"><img width="293" alt="func_note_see_doc.PNG" src="https://camo.qiitausercontent.com/3a35e84f52233c8ea054609b319d6b987d858034/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f36356533316436332d393934302d663363662d613433632d3764663535393738326434342e706e67" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/65e31d63-9940-f3cf-a43c-7df559782d44.png"></a>

<h1>
<span id="補足説明欄description内での改行" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ee730a535c74ca33014c#%E8%A3%9C%E8%B6%B3%E8%AA%AC%E6%98%8E%E6%AC%84description%E5%86%85%E3%81%A7%E3%81%AE%E6%94%B9%E8%A1%8C"><i class="fa fa-link"></i></a>補足：説明欄（Description）内での改行</h1>

デフォルトでは1行文しかスペースがないが、Shift+Enterで改行することができる。<br>
もっとも横幅が全角１０文字ぐらいしかないのでテキストエディタ等で入力してコピペしたほうが容易かもしれない。

<h1>
<span id="補足その２bpマクロ" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ee730a535c74ca33014c#%E8%A3%9C%E8%B6%B3%E3%81%9D%E3%81%AE%EF%BC%92bp%E3%83%9E%E3%82%AF%E3%83%AD"><i class="fa fa-link"></i></a>補足その２：BPマクロ</h1>

BPマクロは残念ながら非対応。この機能がつかえるのは内部的に<code>UK2Node_CallFunction</code>を継承したノードのみ。]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>[ #UE4 ]Blueprintでユニットテスト・機能テスト</title>
		<link>https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4</link>
		
		<dc:creator><![CDATA[Conquest Arrow]]></dc:creator>
		<pubDate>Wed, 29 Mar 2017 16:35:58 +0000</pubDate>
				<category><![CDATA[Qiita記事]]></category>
		<guid isPermaLink="false">http://conquestarrow.com/?guid=a88b6a506c9d565bee9871e71d63a9e3</guid>

					<description><![CDATA[UnrealEngine4(以下UE4）のドキュメントにはオリジナルのテストはC++で書くように書いてあるが実はBlueprint（以下BP）でも書くことができる。やり方を簡単に紹介。


TL;DR



FunctionalTestクラスを継承したBPクラスを作成してテストのBPノードを書く
テスト対象のレベルに上記BPを配置、StandAloneでPlayできるようにしておく
SessionFrontEndで複数のテストやテスト回数をグラフィカルにチェック



環境

4.14以降？ここでは...]]></description>
										<content:encoded><![CDATA[UnrealEngine4(以下UE4）の<a href="https://docs.unrealengine.com/latest/JPN/Programming/Automation/index.html" rel="nofollow noopener" >ドキュメント</a>にはオリジナルのテストはC++で書くように書いてあるが実はBlueprint（以下BP）でも書くことができる。やり方を簡単に紹介。

<h1>
<span id="tldr" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#tldr"><i class="fa fa-link"></i></a><i></i>TL;DR</h1>

<ul>
<li>
<code>FunctionalTest</code>クラスを継承したBPクラスを作成してテストのBPノードを書く</li>
<li>テスト対象のレベルに上記BPを配置、StandAloneでPlayできるようにしておく</li>
<li>SessionFrontEndで複数のテストやテスト回数をグラフィカルにチェック</li>
</ul>

<h1>
<span id="環境" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#%E7%92%B0%E5%A2%83"><i class="fa fa-link"></i></a><i></i>環境</h1>

4.14以降？ここでは4.15で説明。

<h1>
<span id="やりかた" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#%E3%82%84%E3%82%8A%E3%81%8B%E3%81%9F"><i class="fa fa-link"></i></a><i></i>やりかた</h1>

<h2>
<span id="functionaltestの子クラス作成" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#functionaltest%E3%81%AE%E5%AD%90%E3%82%AF%E3%83%A9%E3%82%B9%E4%BD%9C%E6%88%90"><i class="fa fa-link"></i></a>①<code>FunctionalTest</code>の子クラス作成</h2>

まずはテストを書くBPクラスを作成する。親クラスは<code>FunctionalTest</code>を指定。

<a href="https://camo.qiitausercontent.com/e7c15a2a7703eef1fb80c3f60706a17813b6eaad/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f34353539623662322d643265342d653037642d613336352d3532366134396162663266312e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/e7c15a2a7703eef1fb80c3f60706a17813b6eaad/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f34353539623662322d643265342d653037642d613336352d3532366134396162663266312e706e67" alt="PickParentClass_FunctionalTest.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/4559b6b2-d2e4-e07d-a365-526a49abf2f1.png"></a>

<h2>
<span id="テストのbpノードグラフを書く" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#%E3%83%86%E3%82%B9%E3%83%88%E3%81%AEbp%E3%83%8E%E3%83%BC%E3%83%89%E3%82%B0%E3%83%A9%E3%83%95%E3%82%92%E6%9B%B8%E3%81%8F"><i class="fa fa-link"></i></a>②テストのBPノードグラフを書く</h2>

とりあえずサンプルとしてランダムに0～10の数字を返し、5以上なら成功、未満なら失敗という簡単なユニットテストのようなノードを書いてみる。

<a href="https://camo.qiitausercontent.com/a547889502441d0b49f9053259b32b2721edf045/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f34613633646466302d376432622d323234332d346562642d3836626236623237343539352e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/a547889502441d0b49f9053259b32b2721edf045/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f34613633646466302d376432622d323234332d346562642d3836626236623237343539352e706e67" alt="SimpleUnitTestNode.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/4a63ddf0-7d2b-2243-4ebd-86bb6b274595.png"></a><br>
<a href="https://blueprintue.com/blueprint/hmjyx32n/" rel="nofollow noopener" >code</a>

なお実際のユニットテストとしてならBPの関数などを呼び出す形になるだろう。

以下、重要なノードの説明。

<h3>
<span id="event-start-testイベントノード" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#event-start-test%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%8E%E3%83%BC%E3%83%89"><i class="fa fa-link"></i></a><code>Event Start Test</code>イベントノード</h3>

ここからテストの処理が開始する。最終的に<code>Finish Test</code>ノードで終わらないとテストが完了せずにタイムアウトになるので注意。

<h3>
<span id="finish-testノード" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#finish-test%E3%83%8E%E3%83%BC%E3%83%89"><i class="fa fa-link"></i></a><code>Finish Test</code>ノード</h3>

テスト結果を通知して終了するノード。 <strong>テストを書くときに一番大事なノード。</strong> 失敗時にMessageLogに出力するメッセージの設定なども設定できる。

<a href="https://camo.qiitausercontent.com/24e0966977347d859905ae08788f1f67e852b13c/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f32333765663638332d306331352d383635392d613431362d6266636364653761323864372e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/24e0966977347d859905ae08788f1f67e852b13c/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f32333765663638332d306331352d383635392d613431362d6266636364653761323864372e706e67" alt="FinishTestNode.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/237ef683-0c15-8659-a416-bfccde7a28d7.png"></a>

Test Result入力ピンの<code>Succeeded</code>, <code>Failed</code>あたりはよく使うことになるはず。

<h3>
<span id="event-prepare-testイベントノード" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#event-prepare-test%E3%82%A4%E3%83%99%E3%83%B3%E3%83%88%E3%83%8E%E3%83%BC%E3%83%89"><i class="fa fa-link"></i></a><code>Event Prepare Test</code>イベントノード</h3>

テスト開始前に呼ばれるイベントノード。テスト前にやっておきたい処理を書いておく。

<h3>
<span id="set-time-limitノード" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#set-time-limit%E3%83%8E%E3%83%BC%E3%83%89"><i class="fa fa-link"></i></a><code>Set Time Limit</code>ノード</h3>

タイムアウトになるまでの時間や、タイムアウトを何とみなすかの設定をするノード。これがなくてもタイムアウトで失敗になる。

<a href="https://camo.qiitausercontent.com/ec9113045b9f27f012cd57aafb87b7de7dfd87f1/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f32353732366133612d346537362d653064372d613939372d3766386535643930383031332e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/ec9113045b9f27f012cd57aafb87b7de7dfd87f1/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f32353732366133612d346537362d653064372d613939372d3766386535643930383031332e706e67" alt="SetTimeLimitNode.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/25726a3a-4e76-e0d7-a997-7f8e5d908013.png"></a>

<h2>
<span id="bpをテスト対象のレベルに配置" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#bp%E3%82%92%E3%83%86%E3%82%B9%E3%83%88%E5%AF%BE%E8%B1%A1%E3%81%AE%E3%83%AC%E3%83%99%E3%83%AB%E3%81%AB%E9%85%8D%E7%BD%AE"><i class="fa fa-link"></i></a>③BPをテスト対象のレベルに配置</h2>

<a href="https://camo.qiitausercontent.com/52bfab90ff8df7cfe7ca55f61288cd336a04965a/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f66303631386436362d323138642d313031322d383733632d3638343034326532643165352e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/52bfab90ff8df7cfe7ca55f61288cd336a04965a/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f66303631386436362d323138642d313031322d383733632d3638343034326532643165352e706e67" alt="TestOnMap.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/f0618d66-218d-1012-873c-684042e2d1e5.png"></a>

レベルに配置すると、専用の3D Widget付きで表示される。<br>
配置しなくてもよい方法もあるかもしれないが不明。

<h2>
<span id="standaloneで起動できるように設定" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#standalone%E3%81%A7%E8%B5%B7%E5%8B%95%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E8%A8%AD%E5%AE%9A"><i class="fa fa-link"></i></a>④Standaloneで起動できるように設定</h2>

<a href="https://camo.qiitausercontent.com/f00858e4f17f4301f8ef11b6f5a6d2b2a5dfc22c/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f35376331653331632d326635632d353863392d383230622d3533636565373362646264352e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/f00858e4f17f4301f8ef11b6f5a6d2b2a5dfc22c/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f35376331653331632d326635632d353863392d383230622d3533636565373362646264352e706e67" alt="PlayStandalone.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/57c1e31c-2f5c-58c9-820b-53cee73bdbd5.png"></a>

この後SessionFrontEndを使うために必要。いったん起動しておいてもよい。

<h2>
<span id="念のためue4再起動してプロジェクトを開きなおす" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#%E5%BF%B5%E3%81%AE%E3%81%9F%E3%82%81ue4%E5%86%8D%E8%B5%B7%E5%8B%95%E3%81%97%E3%81%A6%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%82%92%E9%96%8B%E3%81%8D%E3%81%AA%E3%81%8A%E3%81%99"><i class="fa fa-link"></i></a>⑤念のためUE4再起動してプロジェクトを開きなおす</h2>

そのままではSession FrontEndからTestを実行できなかった。<br>
プロジェクトを開く直すだけでもよいかもしれない？

<h2>
<span id="session-frontendを開く" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#session-frontend%E3%82%92%E9%96%8B%E3%81%8F"><i class="fa fa-link"></i></a>⑦Session FrontEndを開く</h2>

<a href="https://camo.qiitausercontent.com/8d1ed6d6602f5641bb8ca7d66964bff866aff63d/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f62343030303135632d366138612d633632302d623734362d3632623138343061636334312e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/8d1ed6d6602f5641bb8ca7d66964bff866aff63d/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f62343030303135632d366138612d633632302d623734362d3632623138343061636334312e706e67" alt="OpenSessionFrontEnd.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/b400015c-6a8a-c620-b746-62b1840acc41.png"></a>

Window &gt; Developer Tools &gt; Session FrontEnd

ウィンドウが開いたら、左側の<code>This Application</code>のセッションを選択。<br>
Automatinタブのテスト一覧に、先ほど作成したBPクラス（例では<code>MyFunctionalTest</code>）が表示されればOK。

<a href="https://camo.qiitausercontent.com/0f5001f063ae9128697defc96b6a11e2939923f6/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f38303631383835362d303935372d353334662d326530372d6437383734623566666431632e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/0f5001f063ae9128697defc96b6a11e2939923f6/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f38303631383835362d303935372d353334662d326530372d6437383734623566666431632e706e67" alt="ActivateSessionFrontend.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/80618856-0957-534f-2e07-d7874b5ffd1c.png"></a>

※なお表示されない場合はPlayしたり、UE4開きなおしたり、しばらく待ったりすることで表示される。セッションが張られないと一覧に出てこないようである。

<h3>
<span id="テストを実行" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E5%AE%9F%E8%A1%8C"><i class="fa fa-link"></i></a>⑧テストを実行</h3>

Session FrontEndのウィンドウからStart Testsボタンを押してテストを実行する。<br>
実行するとウィンドウでゲームが起動しつつ、テストの結果がグラフィカルに表示されてゆく。

<a href="https://camo.qiitausercontent.com/3490c955ddf6ad8e560ab1d51be4d9ea79caf2cf/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f31616138346336342d333235342d326466302d626635332d3338663434326534306637322e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/3490c955ddf6ad8e560ab1d51be4d9ea79caf2cf/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f31616138346336342d333235342d326466302d626635332d3338663434326534306637322e706e67" alt="Result1.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/1aa84c64-3254-2df0-bf53-38f442e40f72.png"></a>

上記は１つだけだが、複数ある場合は複数の結果が一覧で表示される。

<h2>
<span id="他tips" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#%E4%BB%96tips"><i class="fa fa-link"></i></a>他TIPS</h2>

<h3>
<span id="テストを複数回実行する" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#%E3%83%86%E3%82%B9%E3%83%88%E3%82%92%E8%A4%87%E6%95%B0%E5%9B%9E%E5%AE%9F%E8%A1%8C%E3%81%99%E3%82%8B"><i class="fa fa-link"></i></a>テストを複数回実行する</h3>

Start Testsボタンの横の▼から実行回数を増やすことができる。

<a href="https://camo.qiitausercontent.com/e6dd1f8d67fe23c3f2e942dbe20f4dd845cbee29/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f61393430633262312d616534332d336139642d653334352d3032373033383831313961342e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/e6dd1f8d67fe23c3f2e942dbe20f4dd845cbee29/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f61393430633262312d616534332d336139642d653334352d3032373033383831313961342e706e67" alt="10Times.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/a940c2b1-ae43-3a9d-e345-0270388119a4.png"></a>

サンプルコードのように毎回結果が違う場合は複数回テストを回してみてどうなるかをみることができる。

<h1>
<span id="参考" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/31edd670a7a95997b1d4#%E5%8F%82%E8%80%83"><i class="fa fa-link"></i></a>参考</h1>

<ul>
<li><a href="https://docs.unrealengine.com/latest/JPN/Programming/Automation/index.html" rel="nofollow noopener" >自動化システムの概要</a></li>
<li><a href="http://historia.co.jp/archives/689" rel="nofollow noopener" >[UE4] 自動テストツールの使い方</a></li>
<li><a href="https://www.youtube.com/watch?v=f4LpDXjFgVQ" rel="nofollow noopener" >Tutorial: Automated Functional Testing in Blueprints in UE 4.14</a></li>
</ul>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>BlueprintのFormatTextノードの使い方 #UE4</title>
		<link>https://qiita.com/ConquestArrow/items/ad842281f925348d61ee</link>
		
		<dc:creator><![CDATA[Conquest Arrow]]></dc:creator>
		<pubDate>Thu, 02 Mar 2017 16:53:34 +0000</pubDate>
				<category><![CDATA[Qiita記事]]></category>
		<guid isPermaLink="false">http://conquestarrow.com/?guid=df4c36446e9ad17f9c464d316128da55</guid>

					<description><![CDATA[UnrealEngine4(以下、UE4）では文字列型が3つあるが、ユーザーにUIなどで表示して見せる文字列はText型であるべきとされている。このText型の文字列の一部を置き換えたり加工したりするのに使えるのがFormatTextノードだ。




TL;DR


UE4でユーザーに見せる文字列はText型である必要がある

Text型の利点を損なうことなく、加工をするのに必要なのが FormatTextノード

具体的には文字列内での変数展開ができる

String型を加工して使っちゃダメ

...]]></description>
										<content:encoded><![CDATA[UnrealEngine4(以下、UE4）では<a href="https://docs.unrealengine.com/latest/JPN/Programming/UnrealArchitecture/StringHandling/index.html" rel="nofollow noopener" >文字列型が3つある</a>が、ユーザーにUIなどで表示して見せる文字列は<code>Text</code>型であるべきとされている。このText型の文字列の一部を置き換えたり加工したりするのに使えるのが<strong><a href="https://docs.unrealengine.com/latest/INT/BlueprintAPI/Utilities/Text/FormatText/index.html" rel="nofollow noopener" >FormatTextノード</a></strong>だ。

<a href="https://camo.qiitausercontent.com/224985761beae901c561454cc505ce00ef4cfb51/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f34663035336562302d366331642d353562362d643261392d6330323839333238343433392e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/224985761beae901c561454cc505ce00ef4cfb51/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f34663035336562302d366331642d353562362d643261392d6330323839333238343433392e706e67" alt="FT_normal.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/4f053eb0-6c1d-55b6-d2a9-c02893284439.png"></a>

<h1>
<span id="tldr" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ad842281f925348d61ee#tldr"><i class="fa fa-link"></i></a>TL;DR</h1>

<ul>
<li>UE4でユーザーに見せる文字列は<code>Text</code>型である必要がある</li>
<li>
<code>Text</code>型の利点を損なうことなく、加工をするのに必要なのが <strong>FormatTextノード</strong>
</li>
<li>具体的には<strong>文字列内での変数展開</strong>ができる</li>
<li>
<code>String</code>型を加工して使っちゃダメ</li>
</ul>

<h1>
<span id="なんでtext型を使うの" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ad842281f925348d61ee#%E3%81%AA%E3%82%93%E3%81%A7text%E5%9E%8B%E3%82%92%E4%BD%BF%E3%81%86%E3%81%AE"><i class="fa fa-link"></i></a>なんで<code>Text</code>型を使うの？</h1>

<ul>
<li>
<strong>どこに散らばっていてもgatherできる</strong>

<ul>
<li><a href="http://qiita.com/go_astrayer/items/9f6b2eae57c9d7c8efc1#%E6%8A%BD%E5%87%BA%E5%85%83%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B" id="reference-0a4b9b1c098835610245">localization dashboardのGatherで横断して収集できる</a></li>
<li>UMG内, LevelBP, ClassBP, WidgetBP, それらの各種パラメータなどバイナリのアセットファイルを横断して収集する</li>
<li>本来は翻訳用だが、誤植修正や一括置換に使うこともできる</li>
<li>バイナリアセット内に含まれることが多いUE4では大きな利点</li>
</ul>
</li>
<li>UMGで文字列表示は原則<code>Text</code>型のみ

<ul>
<li>むりやりキャストすることもできるが、前述の利点がない</li>
</ul>
</li>
</ul>

<h1>
<span id="formattextノードの使い方" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ad842281f925348d61ee#formattext%E3%83%8E%E3%83%BC%E3%83%89%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9"><i class="fa fa-link"></i></a>FormatTextノードの使い方</h1>

<h2>
<span id="文字列内で数字の引数を指定する" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ad842281f925348d61ee#%E6%96%87%E5%AD%97%E5%88%97%E5%86%85%E3%81%A7%E6%95%B0%E5%AD%97%E3%81%AE%E5%BC%95%E6%95%B0%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B"><i class="fa fa-link"></i></a>文字列内で数字の引数を指定する</h2>

文字フォーム内の文字列に<code>{0}</code>といった記法で記入する。<br>
記入後確定すると、数字の名前の付いた引数ピンがノードに追加される。

<a href="https://camo.qiitausercontent.com/d9198d68741e463c66d9e32a88d25ff0a5b2f50d/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f36383566313337632d663538632d633932372d333663342d3730356331343337323930612e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/d9198d68741e463c66d9e32a88d25ff0a5b2f50d/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f36383566313337632d663538632d633932372d333663342d3730356331343337323930612e706e67" alt="FT_number_params.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/685f137c-f58c-c927-36c4-705c1437290a.png"></a>

引数ピンは<code>Wildcard</code>型で以下の型が引数として許される。

<ul>
<li>数値：<code>Byte</code>, <code>Integer</code>, <code>Float</code>
</li>
<li>文字列： <code>Text</code>
</li>
<li>Enum: <code>ETextGender</code>
</li>
</ul>

<h2>
<span id="文字列内で名前つき引数を指定する" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ad842281f925348d61ee#%E6%96%87%E5%AD%97%E5%88%97%E5%86%85%E3%81%A7%E5%90%8D%E5%89%8D%E3%81%A4%E3%81%8D%E5%BC%95%E6%95%B0%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B"><i class="fa fa-link"></i></a>文字列内で名前つき引数を指定する</h2>

文字フォーム内の文字列に<code>{param}</code>といった記法で記入する。<br>
記入後確定すると、その<code>param</code>という名前の引数の入力ピンが追加される。

<a href="https://camo.qiitausercontent.com/498c9b55602669cfbff4898d2f0a35cdfab79583/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f62663764643735652d623739392d663439642d326533382d3330626639313363663034632e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/498c9b55602669cfbff4898d2f0a35cdfab79583/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f62663764643735652d623739392d663439642d326533382d3330626639313363663034632e706e67" alt="FT_named_param.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/bf7dd75e-b799-f49d-2e38-30bf913cf04c.png"></a>

他の挙動も数字の引数と同じ。<br>
マジックナンバーを防止する意味ではこちらのほうが良いかも。

<h2>
<span id="formatピンにノードをつないだ後に-add-pin" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ad842281f925348d61ee#format%E3%83%94%E3%83%B3%E3%81%AB%E3%83%8E%E3%83%BC%E3%83%89%E3%82%92%E3%81%A4%E3%81%AA%E3%81%84%E3%81%A0%E5%BE%8C%E3%81%AB-add-pin"><i class="fa fa-link"></i></a>Formatピンにノードをつないだ後に +Add Pin</h2>

まずは引数を含んだ<code>Text</code>文字列を用意する（<code>Text</code>型の変数のデフォルト値や<code>MakeLiteralText</code>ノードで）。これを<code>Format</code>ピンにつなぐ。

<a href="https://camo.qiitausercontent.com/fdd3696aa840da1c00f91711986e20121d4af87b/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f38663436643836322d366261392d623861312d663039302d3532316330313339366234642e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/fdd3696aa840da1c00f91711986e20121d4af87b/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f38663436643836322d366261392d623861312d663039302d3532316330313339366234642e706e67" alt="FT_addpin_01.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/8f46d862-6ba9-b8a1-f090-521c01396b4d.png"></a>

すると<code>+Add Pin</code>ボタンが増えるのでクリックして入力ピンを増やす。

<a href="https://camo.qiitausercontent.com/c15337456bfb3bee3105bb6056a27d712ced9d6d/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f34613732633864382d343739632d346432362d626636612d3436323132363235353936372e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/c15337456bfb3bee3105bb6056a27d712ced9d6d/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f34613732633864382d343739632d346432362d626636612d3436323132363235353936372e706e67" alt="FT_addpin_02.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/4a72c8d8-479c-4d26-bf6a-462126255967.png"></a>

そのままでは<code>0</code>という名前の入力ピンで<code>{0}</code>以外は置き換えできないのでDetailsパネルで引数名（ピン名）を変更する。

<a href="https://camo.qiitausercontent.com/b24f5e7eb23f81392f8f8b81f01f2d399bc2578f/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f61383231323566392d303531612d343865312d353339302d6263623337353335376439642e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/b24f5e7eb23f81392f8f8b81f01f2d399bc2578f/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f61383231323566392d303531612d343865312d353339302d6263623337353335376439642e706e67" alt="FT_addpin_03.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/a82125f9-051a-48e1-5390-bcb375357d9d.png"></a>

この方法は手間は多いが文字列の中身にかかわらずピンを増やすことができる。

<h1>
<span id="まとめ" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ad842281f925348d61ee#%E3%81%BE%E3%81%A8%E3%82%81"><i class="fa fa-link"></i></a>まとめ</h1>

<a href="https://camo.qiitausercontent.com/76c17793f1e8473f08aa92494f876b9bb9cc95df/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f64303062643537352d366332352d353633382d643763392d6138306137313134316135322e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/76c17793f1e8473f08aa92494f876b9bb9cc95df/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f64303062643537352d366332352d353633382d643763392d6138306137313134316135322e706e67" alt="FT_Sample.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/d00bd575-6c25-5638-d7c9-a80a71141a52.png"></a><br>
<a href="https://camo.qiitausercontent.com/3c34bc1d283e51262a039883dbeee2bac15a4890/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f32626665393262612d633539392d323936662d346161382d3637653638333464643338372e706e67"  rel="nofollow noopener"><img src="https://camo.qiitausercontent.com/3c34bc1d283e51262a039883dbeee2bac15a4890/68747470733a2f2f71696974612d696d6167652d73746f72652e73332e616d617a6f6e6177732e636f6d2f302f35343736342f32626665393262612d633539392d323936662d346161382d3637653638333464643338372e706e67" alt="FT_print_text.PNG" data-canonical-src="https://qiita-image-store.s3.amazonaws.com/0/54764/2bfe92ba-c599-296f-4aa8-67e6834dd387.png"></a>

<h1>
<span id="参考" class="fragment"></span><a href="https://qiita.com/ConquestArrow/items/ad842281f925348d61ee#%E5%8F%82%E8%80%83"><i class="fa fa-link"></i></a>参考</h1>

<ul>
<li><a href="https://docs.unrealengine.com/latest/JPN/Gameplay/Localization/Formatting/index.html" rel="nofollow noopener" >ユーザーに表示するテキストの書式設定</a></li>
</ul>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
