<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>もかつぃんのUnreal Engine 4奮闘記</title>
<link>https://ameblo.jp/mokatwin2/</link>
<atom:link href="https://rssblog.ameba.jp/mokatwin2/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>unreal engine 4を使って無計画な一人のアラフィフが老後ぐらいに映画を完成させようという日記</description>
<language>ja</language>
<item>
<title>unreal engine 4 を使いこなすためにまずはインベーダゲームを作ってみる６</title>
<description>
<![CDATA[ <p>お盆休みなどで実家に帰っていたり旅行に行ったりでしばらくパソコンに触れませんでした</p><p>久々に進めていきます</p><p>スマホでUE4の開発できたらいいのにな</p><p>&nbsp;</p><p><a href="http://unrealengine-blog.hatenablog.com/entry/2014/05/09/004856">http://unrealengine-blog.hatenablog.com/entry/2014/05/09/004856</a></p><p>&nbsp;</p><p>次はスコアとHPバーを表示するみたいです</p><p>インベーダにHPバー・・・？</p><p>本物に近づけるために後で残機に改造してみよう</p><p>今は手順通り進めていく</p><p>&nbsp;</p><p>HUDクラスで画面に文字を表示してみる</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→新規追加→ブループリントクラス→すべてのクラス→Object→Actor→HUD→選択→名前「MyHUD」</p><p>・上部メニュー→ウィンドウ→ワールドセッティング→GameMode→選択したゲームモード→HUD Class=MyHUD</p><p>・コンテンツブラウザのMyHUDをダブルクリックで開く→イベントグラフへ移動</p><p>・ブループリント上を右クリック→イベントを追加→イベントReceiveDrawHUD</p><p>→線を引き→HUD→DrawText</p><p>→Text=Hello!、TextColor=白、ScreenX=20、ScreenY=10、ScalePositionにチェック</p><p>→Scaleから線を引き→演算→Float→float / float→下段に640</p><p>→上段から線を引きSize Xとつなげる</p><p><a href="https://stat.ameba.jp/user_images/20170808/19/mokatwin2/fa/3f/j/o0830036714000713962.jpg"><img alt="" height="186" src="https://stat.ameba.jp/user_images/20170808/19/mokatwin2/fa/3f/j/o0830036714000713962.jpg" width="420"></a></p><p>左上にHello!と表示された</p><p><a href="https://stat.ameba.jp/user_images/20170808/19/mokatwin2/a2/61/j/o1290075414000714809.jpg"><img alt="" height="245" src="https://stat.ameba.jp/user_images/20170808/19/mokatwin2/a2/61/j/o1290075414000714809.jpg" width="420"></a></p><p>※インベーダの数を増やしたりカメラを引いて傾けたりしてました</p><p>&nbsp;</p><p>ブループリントインターフェースを作成する</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→新規追加→ブループリント→ブループリントインターフェース→名前「MyInterface」</p><p>&nbsp;</p><p>ここから先はこまめにコンパイルしないと呼び出せない事もあるのでおかしいなと思ったらコンパイルしてください</p><p>&nbsp;</p><p>インターフェースを関連付ける</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→MyGameStateをダブルクリックで開く</p><p>→上部アイコンのクラス設定→詳細→インターフェース→実装インターフェース→追加→MyInterface</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→MyHUDをダブルクリックで開く</p><p>→上部アイコンのクラス設定→詳細→インターフェース→実装インターフェース→追加→MyInterface</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→PlayerBuleprintをダブルクリックで開く</p><p>→上部アイコンのクラス設定→詳細→インターフェース→実装インターフェース→追加→MyInterface</p><p>&nbsp;</p><p>インターフェースに関数を作る</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→MyInterfaceを開く</p><p>・新規関数_0をクリック→名前「GetScore」</p><p>→詳細→アウトプット→＋新規パラメータ→名前「Score」、型「Integer」</p><p>・関数→+関数→名前「AddScore」</p><p>→詳細→インプット→＋新規パラメータ→名前「Score」、型「Integer」</p><p>&nbsp;</p><p>MyGameStateからスコアを渡す</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→MyGameStateを開く</p><p>・変数→＋変数→名前「Score」、型「Integer」</p><p>・インターフェース→GetScoreをダブルクリック</p><p>（本編通りにやっても動かなかったがこうすると動いた）</p><p>・リターンノードのScoreから線を引き→変数→デフォルト→GetScore</p><p><a href="https://stat.ameba.jp/user_images/20170809/11/mokatwin2/35/ef/j/o0340016914001142300.jpg"><img alt="" height="169" src="https://stat.ameba.jp/user_images/20170809/11/mokatwin2/35/ef/j/o0340016914001142300.jpg" width="340"></a></p><p>・イベントグラフへ移動</p><p>→右クリックで→イベントを追加→イベントAddScore</p><p>→Scoreから線を引き→演算→Integer→integer + integer</p><p>→左下から線を引き→変数→デフォルト→GetScore</p><p>→右側から線を引き→変数→デフォルト→SetScore</p><p>・イベントAddScoreとSetScoreをつなぐ</p><p><a href="https://stat.ameba.jp/user_images/20170809/12/mokatwin2/1e/ec/j/o0566021114001146124.jpg"><img alt="" height="157" src="https://stat.ameba.jp/user_images/20170809/12/mokatwin2/1e/ec/j/o0566021114001146124.jpg" width="420"></a></p><p>&nbsp;</p><p>敵が死んだらスコアを足す</p><p>・コンテンツブラウザ→Blueprints→EnemyBlueprintを開く→イベントグラフ</p><p>・敵爆発処理のSpawnActor Blueprint Effect Explosionの右上から線を引き</p><p>→クラス→MyInterface→AddScore(メッセージ)→Score=10</p><p>→ターゲットから線を引き→ゲーム→GetGameState</p><p>・AddScoreとDestoroyActorとつなぐ</p><p><a href="https://stat.ameba.jp/user_images/20170809/12/mokatwin2/7c/69/j/o1533033714001164068.jpg"><img alt="" height="92" src="https://stat.ameba.jp/user_images/20170809/12/mokatwin2/7c/69/j/o1533033714001164068.jpg" width="420"></a></p><p>&nbsp;</p><p>画面にスコアを表示する</p><p>・コンテンツブラウザ→Blueprints→MyHUDを開く→イベントグラフ</p><p>・イベントReceive Draw HUDの左上から線を引き→状況に合わせた表示のチェックを外し→クラス→MyInterface→GetScore(メッセージ)</p><p>→ターゲットから線を引き→ゲーム→GetGameState</p><p>→Scoreから線を引き→ユーティリティ→ストリング→BuildString(int)</p><p>→Prefix=Score</p><p>・GetScoreとDrawTextをつなぐ</p><p>・BuildString(int)のReturnValueとDrawTextのTextをつなぐ</p><p><a href="https://stat.ameba.jp/user_images/20170809/12/mokatwin2/42/53/j/o1294036414001169277.jpg"><img alt="" height="118" src="https://stat.ameba.jp/user_images/20170809/12/mokatwin2/42/53/j/o1294036414001169277.jpg" width="420"></a></p><p>&nbsp;</p><p>これで左上にスコアが表示されて敵が爆発すると１０づつ増えます</p><p>&nbsp;</p><p>&nbsp;</p><p>続いてHPバーの表示</p><p>&nbsp;</p><p>弾が当たるとダメージを与える</p><p>・コンテンツブラウザ→Blueprints→BulletBlueprintを開く→イベントグラフ</p><p>・イベントActorBeginOverlapから線を引き→ゲーム→ダメージ→ApplyDamage</p><p>→OtherActorとDamagedActorをつなぐ</p><p>→BaseDamage=10</p><p>→右側から線を引き→ユーティリティ→DestoroyActor</p><p><a href="https://stat.ameba.jp/user_images/20170809/13/mokatwin2/20/9b/j/o0799026214001176614.jpg"><img alt="" height="138" src="https://stat.ameba.jp/user_images/20170809/13/mokatwin2/20/9b/j/o0799026214001176614.jpg" width="420"></a></p><p>&nbsp;</p><p>自機爆発処理を変更する</p><p>・コンテンツブラウザ→Blueprints→PlayerBlueprintを開く→イベントグラフ</p><p>・変数→＋変数→名前「Health」、型「Integer」→コンパイル→デフォルト値=100</p><p>・イベントActorBegineOverlapを削除</p><p>・右クリック→イベントを追加→イベント→ダメージ→イベントAnyDamage</p><p>→右側から線を引き→変数→デフォルト→SetHealth</p><p>→Healthから線を引き→演算→Integer→integer - integer</p><p>→左上から線を引き→変数→デフォルト→GetHealth</p><p>→左下から線を引き→演算→Float→Floor</p><p>→Aから線を引きイベントAnyDamageのDamageにつなぐ</p><p>・SetHealthの左から線を引き→ユーティリティ→フロー制御→ブランチ</p><p>→Conditionから線を引き→演算→Integer→integer &lt;= integer</p><p>→左上をinteger - integerにつなぐ</p><p>→TrueとSpawnActor Blueprint Effect Explosionをつなぐ</p><p><a href="https://stat.ameba.jp/user_images/20170809/13/mokatwin2/39/c9/j/o1160030214001197403.jpg"><img alt="" height="109" src="https://stat.ameba.jp/user_images/20170809/13/mokatwin2/39/c9/j/o1160030214001197403.jpg" width="420"></a></p><p>この時点で再生すると１０発ぐらいまで敵の攻撃を耐えられるようになった</p><p>３発目で爆発させたいならBaseDamage=40を指定すれば良いのかな？</p><p>と試しにやってみると２発目で爆発</p><p>BaseDamage=30を指定すると３発目で爆発</p><p>なぜだろう</p><p>BaseDamage=10に戻して着弾数を数えると９発目で爆発</p><p>計算が合わないが本編とは関係なさそうなので今は気にしないでおく</p><p>&nbsp;</p><p>インターフェースでHealthを渡せるようにする</p><p>・コンテンツブラウザ→Blueprints→MyInterfaceを開く</p><p>・関数→+関数→名前「GetHealth」</p><p>→詳細→アウトプット→＋新規パラメータ→名前「Health」、型「Integer」</p><p>・コンテンツブラウザ→Blueprints→MyGameStateを開く</p><p>・変数→＋変数→名前「Health」、型「Integer」</p><p>&nbsp;</p><p>&nbsp;</p><p>HPバーをテクスチャに登録</p><p>自分で描いても良いけど今回は先人者様の素材をそのまま使わせていただきます</p><p>素材をダウンロードしてHealth.pngで保存</p><p>・コンテンツブラウザ→StarterContent→Textures→インポート→Heath.png</p><p>→名前変更→T_Health</p><p>&nbsp;</p><p>HPバーを表示する</p><p>・コンテンツブラウザ→Blueprints→MyHUDを開く</p><p>・関数→＋関数→名前「DrawHealthBar」</p><p>→詳細→インプット→＋新規パラメータ→名前「InPosition」、型「構造体→Vector2D」</p><p>→インプット→＋新規パラメータ→名前「InScale」、型「Float」</p><p>→右側から線を引き→状況に合わせた表示のチェックを外し→クラス→MyInterface→GetHealth（メッセージ）</p><p>→ターゲットから線を引き→ゲーム→GetPlayerPawn</p><p>・GetHealthから線を引き→HUD→DrawTexture→Texture=T_Health、ScreenH=16、TextureV=0.5、TextureVHeight=0.5、ScalePositionにチェック</p><p>→線を引きHUD→DrawTexture→Texture=T_Health、ScreenW=128、ScreenH=16、TextureUWidth=1、TextureVHeight=0.5、ScalePositionにチェック</p><p>・DrawHealthBarのinPositionから線を引き→BreakVector2D→</p><p>→Xから線を引き→それぞれのDrawTextureのScreenXに繋ぐ</p><p>→Yから線を引き→それぞれのDrawTextureのScreenYに繋ぐ</p><p>・DrawHealthBarのinScaleから線を引き→それぞれのDrawTextureのScaleに繋ぐ</p><p>(Scaleは省略されているので▼で展開する)</p><p>・GetHealthのHealthから線を引き→演算→コンバージョン→ToFloat(int)</p><p>→右から線を引き→演算→Float→float / float→下の段に100を入力</p><p>→右から線を引き→演算→Float→float * float→下の段に128</p><p>→右から線を引き→一つ目のDrawTextureのScreenWに繋ぐ</p><p>・float / floatからもう一本線を引き→一つ目のDrawTextureのTextureUWidthに繋ぐ</p><p><a href="https://stat.ameba.jp/user_images/20170820/10/mokatwin2/76/b8/j/o1296047214009073335.jpg"><img alt="" height="153" src="https://stat.ameba.jp/user_images/20170820/10/mokatwin2/76/b8/j/o1296047214009073335.jpg" width="420"></a></p><p>&nbsp;</p><p>・イベントグラフに戻りDrawTextの右から線を引き→関数呼び出し→DrawHealthBar</p><p>→InPositionのX=490、Y=15</p><p>→InScaleから線を引き→float / floatに繋ぐ</p><p><a href="https://stat.ameba.jp/user_images/20170820/11/mokatwin2/d2/5b/j/o1147031314009084128.jpg"><img alt="" height="115" src="https://stat.ameba.jp/user_images/20170820/11/mokatwin2/d2/5b/j/o1147031314009084128.jpg" width="420"></a></p><p>&nbsp;</p><p>&nbsp;</p><p><a href="https://stat.ameba.jp/user_images/20170820/11/mokatwin2/b8/a9/j/o1263069414009085022.jpg"><img alt="" height="231" src="https://stat.ameba.jp/user_images/20170820/11/mokatwin2/b8/a9/j/o1263069414009085022.jpg" width="420"></a></p><p>できた！</p><p>しかしやはりダメージ計算が一発分おかしい</p><p>ひとまずこのまま進めることにする</p>
]]>
</description>
<link>https://ameblo.jp/mokatwin2/entry-12299863829.html</link>
<pubDate>Sun, 20 Aug 2017 11:03:58 +0900</pubDate>
</item>
<item>
<title>unreal engine 4 を使いこなすためにまずはインベーダゲームを作ってみる５</title>
<description>
<![CDATA[ <p>先ほどUnrealEngineのバージョンが4.17に上がった</p><p>怖いもの知らずなのでそっちで作る</p><p>開こうとするとプロジェクトはコピーさせられた</p><p>親切だ</p><p>&nbsp;</p><p><a href="http://unrealengine-blog.hatenablog.com/entry/2014/05/04/132523">http://unrealengine-blog.hatenablog.com/entry/2014/05/04/132523</a></p><p>&nbsp;</p><p>では早速本編を追う</p><p>&nbsp;</p><p>好きな位置にEnemyBlueprintをたくさん配置する</p><p><a href="https://stat.ameba.jp/user_images/20170808/17/mokatwin2/4e/16/j/o1216058414000618689.jpg"><img alt="" height="202" src="https://stat.ameba.jp/user_images/20170808/17/mokatwin2/4e/16/j/o1216058414000618689.jpg" width="420"></a></p><p>私はひとまずこんな感じにしました</p><p>&nbsp;</p><p>再生すると敵自身の弾で最上段以外がすぐに爆発</p><p>折り返し地点で敵同士が衝突して爆発してしまいます</p><p>&nbsp;</p><p>まずは後者の問題を解決</p><p>一匹でも端に着いたら折り返しフラグを立てて全員でその折り返しフラグを共有します</p><p>&nbsp;</p><p>ゲームステートクラスの作成</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→新規追加→ブループリントクラス→</p><p>→Object→Actor→Info→GameStateBase→名前「MyGameState」</p><p>（ここで誤ってGameStateから作成してしまうとはまる　というかはまった）</p><p>・MyGameStateをダブルクリック→変数→＋変数→名前「DirectionY」→型「Float」</p><p>→コンパイル→デフォルト値DirectionY=1</p><p>&nbsp;</p><p>レベルブループリントを記述</p><p>・ブループリント→レベルブループリントを開く</p><p>・イベントTickから線を引き→ユーティリティ→Get All Actors Of Class→クラス「Actor」を選択</p><p>→線を引き→ユーティリティ→配列→ForEachLoop→OutActorsとArrayを繋ぐ</p><p>・LoopBodyから線を引き→状況に合わせた表示のチェックを外し→ユーティリティ→キャスティング→CastToEnemyBlueprint→ArrayElementとObjectを繋ぐ</p><p>・CastToEnemyBlueprintのAs Enemy Blueprintから線を引き→ユーティリティ→トランスフォーメーション→GetActorLocation</p><p>→ReturnValueから線を引き→BreakVector</p><p>→yから線を引き→演算→Float→float &gt; float→下段に600</p><p>→再びyから線を引き→演算→Float→float &lt; float→下段に-600</p><p>・CastToEnemyBlueprintから線を引き→ユーティリティ→フロー制御→ブランチ</p><p>→Conditionとfloat &gt; floatを繋ぐ</p><p>→Falseから線を引き→ユーティリティ→フロー制御→ブランチ</p><p>→Conditionとfloat &lt; floatを繋ぐ</p><p>・一つ目のブランチのTrueから線を引き→ユーティリティ→キャスティング→CastToMyGameState</p><p>→Objectから線を引き→ゲーム→GetGameState</p><p>・CastToMyGameStateから線を引き→クラス→MyStateGame→DirectionY→ターゲットとAs MyGameStateを繋ぐ</p><p>→DirectionY=-1</p><p>・２つ目のブランチのTrueから線を引き→ユーティリティ→キャスティング→CastToMyGameState</p><p>→ObjectとGetGameStateを繋ぐ</p><p>・CastToMyGameStateから線を引き→クラス→MyStateGame→DirectionY→ターゲットとAs MyGameStateを繋ぐ</p><p>→DirectionY=-1</p><p><a href="https://stat.ameba.jp/user_images/20170808/17/mokatwin2/db/e9/j/o1499046114000615951.jpg"><img alt="" height="129" src="https://stat.ameba.jp/user_images/20170808/17/mokatwin2/db/e9/j/o1499046114000615951.jpg" width="420"></a></p><p>長くなっちゃいましたのでコメントで見やすくし線を調整しました</p><p>画像ではMyStateGame2となってますがいろいろ失敗した名残です</p><p>&nbsp;</p><p>次の作業はやらないとだめかどうかわからないけどはまってる時に設定しました</p><p>・ワールドセッティング→GameMode→選択したゲームモード→GameStateClass=MyGameState</p><p>&nbsp;</p><p>敵のDirectionYをGameStateのDirectionYを見るように変更する</p><p>・コンテンツブラウザ→Blueprints→EnemyBlueprint</p><p>&nbsp;</p><p>次の作業の前に</p><p>EnemyBlueprintのイベントグラフをもう少し見やすくするために勝手にアレンジして敵の移動を関数にまとめてしまってました</p><p>まさかすぐに変更するはめになるとも知らず</p><p><a href="https://stat.ameba.jp/user_images/20170807/16/mokatwin2/82/42/j/o1223060713999866593.jpg"><img alt="" height="208" src="https://stat.ameba.jp/user_images/20170807/16/mokatwin2/82/42/j/o1223060713999866593.jpg" width="420"></a></p><p>↓関数化したい項目をCTL押しながらクリックして選択した後に右クリックで「関数に折りたたむ」</p><p><a href="https://stat.ameba.jp/user_images/20170808/17/mokatwin2/26/5c/j/o0690019514000622398.jpg"><img alt="" height="119" src="https://stat.ameba.jp/user_images/20170808/17/mokatwin2/26/5c/j/o0690019514000622398.jpg" width="420"></a></p><p>関数名はMoveEnemyとしました</p><p>&nbsp;</p><p>今回はそのMoveEnemyをサイトの指示に沿って編集していきます</p><p>その前にこのブループリントから</p><p>・ReverceDirectionを削除してMoveEnemyとShotBulletを繋ぐ</p><p><a href="https://stat.ameba.jp/user_images/20170808/17/mokatwin2/c7/69/j/o0693019314000628189.jpg"><img alt="" height="117" src="https://stat.ameba.jp/user_images/20170808/17/mokatwin2/c7/69/j/o0693019314000628189.jpg" width="420"></a></p><p>折り返し判定をレベルブループリントに変えたためです</p><p>&nbsp;</p><p>・イベントグラフからMoveEnemyをダブルクリックで開く</p><p>・GetDirectionYを削除</p><p>・MoveEnemyから線を引き→ユーティリティ→キャスティング→CastToMyGameState</p><p>→SetActorLocationと繋ぐ</p><p>→Objectから線を引き→ゲーム→GetGameState</p><p>→AsMyGameStateから線を引き→変数→デフォルト→GetDirectionY</p><p>→float * floatの空いているところに繋ぐ（もともとDirectionYが繋がっていたところ）</p><p>&nbsp;</p><p>敵がじわじわ降りてくるように若干のアレンジ</p><p>・float + floatのピンを追加→Z=-0.02</p><p>&nbsp;</p><p><a href="https://stat.ameba.jp/user_images/20170808/18/mokatwin2/55/ef/j/o1649028314000653255.jpg"><img alt="" height="72" src="https://stat.ameba.jp/user_images/20170808/18/mokatwin2/55/ef/j/o1649028314000653255.jpg" width="420"></a></p><p>見やすいように配置しなおしてこんな感じ</p><p>&nbsp;</p><p>続いて敵はプレイヤーの弾としか衝突しないようにする</p><p>・EnemyBlueprintのイベントグラフに移動</p><p>・イベントActorBeginOverlapから線を引き→ユーティリティ→キャスティング→CastToPlayerBlueprnt</p><p>→SpawnActorBlueprintEffectExplosionに繋ぐ</p><p><a href="https://stat.ameba.jp/user_images/20170808/18/mokatwin2/1b/f1/j/o0928023614000656646.jpg"><img alt="" height="107" src="https://stat.ameba.jp/user_images/20170808/18/mokatwin2/1b/f1/j/o0928023614000656646.jpg" width="420"></a></p><p>&nbsp;</p><p>これで再生を押すとよい感じ</p><p><a href="https://stat.ameba.jp/user_images/20170808/18/mokatwin2/54/12/j/o1290075414000657965.jpg"><img alt="" height="245" src="https://stat.ameba.jp/user_images/20170808/18/mokatwin2/54/12/j/o1290075414000657965.jpg" width="420"></a></p><p>だが敵がかなりの弾幕仕様なので少しアレンジ調整する（後のセクションでやってるかもしれないけど）</p><p>&nbsp;</p><p>・イベントBeginPlayから線を引く→変数→デフォルト→SetShotTimer</p><p>→ShotTimerから線を引き→演算→ランダム→RandomFloat in Range→Min=3、Max=10</p><p><a href="https://stat.ameba.jp/user_images/20170808/18/mokatwin2/65/18/j/o0496018614000661659.jpg"><img alt="" height="158" src="https://stat.ameba.jp/user_images/20170808/18/mokatwin2/65/18/j/o0496018614000661659.jpg" width="420"></a></p><p>&nbsp;</p><p>・ShotBullet関数へ移動</p><p>・RandomFloat in Range→Min=3、Max=10に変更</p><p>&nbsp;</p><p>これでよい感じに敵の弾がばらついた</p><p>&nbsp;</p><p>今回ハマったおかげでGameStateの変数を様々なクラスブループリントから使えるやり方を理解できた</p><p>&nbsp;</p><p>はまると辛いけど面白いツールだ</p>
]]>
</description>
<link>https://ameblo.jp/mokatwin2/entry-12299591559.html</link>
<pubDate>Mon, 07 Aug 2017 23:39:08 +0900</pubDate>
</item>
<item>
<title>unreal engine 4 を使いこなすためにまずはインベーダゲームを作ってみる４</title>
<description>
<![CDATA[ <p><a href="http://unrealengine-blog.hatenablog.com/entry/2014/05/01/012420">http://unrealengine-blog.hatenablog.com/entry/2014/05/01/012420</a></p><p>&nbsp;</p><p>お次は背景とマテリアルらしい</p><p>&nbsp;</p><p>背景の板を配置</p><p>・コンテンツブラウザ→コンテンツ→StarterContent→Shapes→Shape_Plane→右クリックして複製→名前「Shape_Space」</p><p>・ドラッグドロップでレベルに配置→詳細→トランスフォーム→位置X=2000、Y=0、Z=0、回転X=90、Y=0、Z=90、拡大・縮小X=50、Y=50、Z=1</p><p>（位置のX=2000は解像度でお好みで　見切れない程度に調節してください）</p><p>&nbsp;</p><p>画像を作成</p><p>・上記URLにあるページから画像をT_Space.jpgという名前で保存</p><p>（これぐらいは自分で作ってもよさそう）</p><p>・コンテンツブラウザ→コンテンツ→StarterContent→Textures→インポート→T_Space.jpg</p><p><a href="https://stat.ameba.jp/user_images/20170807/18/mokatwin2/3b/f4/j/o0800080013999951209.jpg"><img alt="" height="420" src="https://stat.ameba.jp/user_images/20170807/18/mokatwin2/3b/f4/j/o0800080013999951209.jpg" width="420"></a></p><p>&nbsp;</p><p>マテリアルを作成</p><p>・コンテンツブラウザ→コンテンツ→StarterContent→Materials→新規追加→マテリアル→名前「M_Space」</p><p>・ダブルクリックでマテリアルエディタを起動</p><p>・詳細→シェーディングモデル→Unlitに変更</p><p>・マテリアルエディタ上で右クリック→テクスチャ→Texture Sample→一番右上とエミッシブカラーを繋ぐ（ERRORが出る）</p><p>・TextureSampleをクリック→詳細→Texture→T_Space</p><p>・すべて保存</p><p>Shapeにマテリアルを割り当て</p><p>・コンテンツブラウザ→コンテンツ→StarterContent→Shapes→Shape_Spaceをダブルクリックでスタティックメッシュエディタを起動</p><p>・詳細→マテリアル→エレメント0→M_Spaceに変更</p><p>これで背景が宇宙になる</p><p>&nbsp;</p><p>二重スクロール</p><p>・M_Spaceのマテリアルエディタを起動</p><p>・エディタ上で右クリック→座標→TextureCoordinate</p><p>→右から線を引き→座標→Panner→詳細→SpeedY=-0.1</p><p>→右から線を引き→TextureSampleのUVsと繋ぐ</p><p>・TexCord[0]～TextureSampleまでを選択してCtrl+C→Ctrl+vで一式をコピー</p><p>・2つ目のPannerを選択→詳細→SpeedY=-0.05</p><p>・一つ目のTextureSampleから線を引き→演算→Add</p><p>・2つ目のTextureSampleとAddのBを繋ぐ</p><p>・Addからエミッシブカラーに繋ぐ</p><p><a href="https://stat.ameba.jp/user_images/20170807/18/mokatwin2/4a/ee/j/o0900052913999949393.jpg"><img alt="" height="247" src="https://stat.ameba.jp/user_images/20170807/18/mokatwin2/4a/ee/j/o0900052913999949393.jpg" width="420"></a></p><p>保存して実行すると宇宙が動いた</p><p>これはすごい</p><p>&nbsp;</p><p>アレンジしてみる</p><p>・2つ目のPannerを選択→詳細→SpeedX=0.01</p><p>&nbsp;</p><p>縦スクロールと斜めスクロールがこんな簡単に実現できるとは</p><p>すごいツールが無料で使えるようになったものだ</p><p>&nbsp;</p><p>実行していると背景がどんどん明るくなってしまうけど後で解決できるのかな？</p><p>進めてみる</p><p>&nbsp;</p><p>弾のマテリアル</p><p>・コンテンツブラウザ→コンテンツ→StarterContent→Materials→新規追加→マテリアル→名前「M_PlayerBullet」</p><p>→エミッシブカラーから線を引き→演算→Multiply→詳細→Const B=5</p><p>→Aから線を引き→ベクター→Constant3Vector→詳細→Constant→R=0、G=1、B=0</p><p><a href="https://stat.ameba.jp/user_images/20170807/19/mokatwin2/43/06/j/o0578052713999969589.jpg"><img alt="" height="383" src="https://stat.ameba.jp/user_images/20170807/19/mokatwin2/43/06/j/o0578052713999969589.jpg" width="420"></a></p><p>・コンテンツブラウザ→コンテンツ→StarterContent→Materials→新規追加→マテリアル→名前「M_PlayerBullet」</p><p>→エミッシブカラーから線を引き→演算→Multiply→詳細→Const B=5</p><p>→Aから線を引き→ベクター→Constant3Vector→詳細→Constant→R=1、G=0、B=0</p><p><a href="https://stat.ameba.jp/user_images/20170807/19/mokatwin2/af/eb/j/o0578051613999969654.jpg"><img alt="" height="375" src="https://stat.ameba.jp/user_images/20170807/19/mokatwin2/af/eb/j/o0578051613999969654.jpg" width="420"></a></p><p>&nbsp;</p><p>マテリアルの割り当て</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→PlayerBulletBlueprint</p><p>→コンポーネント→StaticMesh→詳細→Materials→M_PlayerBulletを選択</p><p>→保存して閉じる</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→EnemyBulletBlueprint</p><p>→コンポーネント→StaticMesh→詳細→Materials→M_EnemyBulletを選択</p><p>→保存して閉じる</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→PlayerBlueprint</p><p>→コンポーネント→StaticMesh→詳細→Materials→M_Material_Copperを選択</p><p>→保存して閉じる</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→EnemyBlueprint</p><p>→コンポーネント→StaticMesh→詳細→Materials→M_Material_Goldを選択</p><p>→保存して閉じる</p><p>&nbsp;</p><p>再生するとやはり背景が明るくなってしまう</p><p>これは次でなおるようだ</p><p>&nbsp;</p><p>・モード→ボリューム→PostProcessVolume→レベルにドラッグドロップ</p><p>→詳細→BrushSettings→X=1、Y=1、Z=1</p><p>→Post Process Volume Settings→Unboundにチェック</p><p>→Auto Exposure→Min BrightnessとMax Brightnessにチェックを入れそれぞれ1を入力</p><p>&nbsp;</p><p><a href="https://stat.ameba.jp/user_images/20170807/19/mokatwin2/cd/28/j/o1290075414000001243.jpg"><img alt="" height="245" src="https://stat.ameba.jp/user_images/20170807/19/mokatwin2/cd/28/j/o1290075414000001243.jpg" width="420"></a></p><p>&nbsp;</p><p>すごい！感動してしまった</p><p>引き続き作っていきます</p>
]]>
</description>
<link>https://ameblo.jp/mokatwin2/entry-12299558718.html</link>
<pubDate>Mon, 07 Aug 2017 19:49:17 +0900</pubDate>
</item>
<item>
<title>unreal engine 4 を使いこなすためにまずはインベーダゲームを作ってみる３</title>
<description>
<![CDATA[ <p>さてさてお次は当たり判定らしい</p><p>&nbsp;</p><p><a href="http://unrealengine-blog.hatenablog.com/entry/2014/04/29/015733">http://unrealengine-blog.hatenablog.com/entry/2014/04/29/015733</a></p><p>&nbsp;</p><p>だんだんバージョンの違いと説明が省略されてきていてついていけなくなりそうだったので極力イメージをつけて作業をしてみる</p><p>&nbsp;</p><p>弾のモデルを作る</p><p>・モード→ジオメトリ→シリンダをレベルにドラッグドロップ</p><p>→詳細→Brush Settings→Z=30、Outer Radius=5</p><p>・コピーして二つにする</p><p>・コピー元を選択し→詳細→Brush Settings→スタティックメッシュを作成→ファイル名「PlayerBulletMesh」</p><p>・コピーした方も同様に→ファイル名「EnemyBulletMesh」</p><p>・レベルにある二つの弾を削除</p><p>&nbsp;</p><p>弾のクラスを作る</p><p>・ブループリント→新規の空のブループリントクラス→Actor→ファイル名「BulletBlueprint」→ダブルクリックで開く</p><p>・関数→＋関数→関数名「MoveBullet」</p><p>→インプット→＋新規パラメータ→パラメータ名「MoveVector」、型「Vector」</p><p>→インプット→＋新規パラメータ→パラメータ名「DeltaTime」、型「Float」</p><p><a href="https://stat.ameba.jp/user_images/20170805/15/mokatwin2/fe/2e/j/o0678023713998261253.jpg"><img alt="" height="147" src="https://stat.ameba.jp/user_images/20170805/15/mokatwin2/fe/2e/j/o0678023713998261253.jpg" width="420"></a></p><p>&nbsp;</p><p>・MoveBulletのMoveVectorから線を引き→演算→ベクター→vector * float→左下からDelta Timeにつなげる</p><p><a href="https://stat.ameba.jp/user_images/20170805/15/mokatwin2/98/25/j/o0290014413998265457.jpg"><img alt="" height="144" src="https://stat.ameba.jp/user_images/20170805/15/mokatwin2/98/25/j/o0290014413998265457.jpg" width="290"></a></p><p>&nbsp;</p><p>・vector * floatの右から線を引き→演算→ベクター→vector + vector→右から線を引き→ユーティリティ→トランスフォーメーション→GetActorLocation</p><p><a href="https://stat.ameba.jp/user_images/20170805/15/mokatwin2/12/b9/j/o0477022513998267971.jpg"><img alt="" height="198" src="https://stat.ameba.jp/user_images/20170805/15/mokatwin2/12/b9/j/o0477022513998267971.jpg" width="420"></a></p><p>&nbsp;</p><p>・MoveBulletから線を引き→ユーティリティ→トランスフォーメーション→SetActorLocation→NewLocationとvector + vectorをつなぐ</p><p><a href="https://stat.ameba.jp/user_images/20170805/15/mokatwin2/f7/01/j/o0785025213998269534.jpg"><img alt="" height="135" src="https://stat.ameba.jp/user_images/20170805/15/mokatwin2/f7/01/j/o0785025213998269534.jpg" width="420"></a></p><p>&nbsp;</p><p>これでいったん全て保存する</p><p>&nbsp;</p><p>&nbsp;</p><p>プレイヤーの弾の作成</p><p>・ブループリント→新規の空のブループリントクラス→全てのクラス→Object→Actor→BulletBlueprint→選択→クラス名「PlayerBulletBlueprint」</p><p><a href="https://stat.ameba.jp/user_images/20170805/16/mokatwin2/16/0b/j/o0544074313998273531.jpg"><img alt="" height="574" src="https://stat.ameba.jp/user_images/20170805/16/mokatwin2/16/0b/j/o0544074313998273531.jpg" width="420"></a></p><p><a href="https://stat.ameba.jp/user_images/20170805/16/mokatwin2/dc/c4/j/o0460048413998276498.jpg"><img alt="" height="442" src="https://stat.ameba.jp/user_images/20170805/16/mokatwin2/dc/c4/j/o0460048413998276498.jpg" width="420"></a></p><p>&nbsp;</p><p>・PlayerBulletBlueprintを開く</p><p>・コンポーネントを追加→スタティックメッシュコンポーネント→詳細→StaticMesh→PlayerBulletMesh</p><p><a href="https://stat.ameba.jp/user_images/20170805/16/mokatwin2/c3/f0/j/o1340074813998281005.jpg"><img alt="" height="234" src="https://stat.ameba.jp/user_images/20170805/16/mokatwin2/c3/f0/j/o1340074813998281005.jpg" width="420"></a></p><p>後ろにある白い玉は気にしなくて良いのかな・・・？</p><p>&nbsp;</p><p>・イベントグラフに移動</p><p>・イベントTickから線を引き→関数呼び出し→MoveBullet→MioveVectorのZ=200→DeltaSecondsとDeltaTimeをつなぐ</p><p><a href="https://stat.ameba.jp/user_images/20170805/16/mokatwin2/6c/ab/j/o0438020913998289889.jpg"><img alt="" height="200" src="https://stat.ameba.jp/user_images/20170805/16/mokatwin2/6c/ab/j/o0438020913998289889.jpg" width="420"></a></p><p>&nbsp;</p><p>置いとくとややこしいので保存して閉じる</p><p>&nbsp;</p><p>敵の弾を作成（ほぼ同じなので画像省略）</p><p>・ブループリント→新規の空のブループリントクラス→全てのクラス→Object→Actor→BulletBlueprint→選択→クラス名「EnemyBulletBlueprint」</p><p>・EnemyBulletBlueprintを開く</p><p>・コンポーネントを追加→スタティックメッシュコンポーネント→詳細→StaticMesh→EnemyBulletMesh</p><p>・イベントグラフに移動</p><p>・イベントTickから線を引き→関数呼び出し→MoveBullet→MioveVectorのZ=<span style="color:#ff0000;"><span style="font-weight:bold;">-200</span></span>→DeltaSecondsとDeltaTimeをつなぐ</p><p>&nbsp;</p><p>名称以外では一か所だけ違うので注意</p><p>&nbsp;</p><p>自機から弾を発射する</p><p>・PlayerBlueprintを開く</p><p>・ブループリントのどこかで右クリック→インプット→マウスイベント→マウスの左ボタン</p><p>・Pressedから線を引き→ゲーム→クラスからアクタをスポーンします→classでPlayerBulletBlueprinmtを選択</p><p>・SpawnTransformから線を引き→演算→コンバージョン→ToTransform(vector)</p><p>・ToTransform(Vector)の左から線を引き→演算→ベクター→vector + vector→下段のZ=30</p><p>・vector + vectorの左上から線を引き→GetActorLocation</p><p><a href="https://stat.ameba.jp/user_images/20170805/17/mokatwin2/eb/1d/j/o1090027113998306726.jpg"><img alt="" contenteditable="inherit" height="104" src="https://stat.ameba.jp/user_images/20170805/17/mokatwin2/eb/1d/j/o1090027113998306726.jpg" width="420"></a></p><p>&nbsp;</p><p>これで再生してクリックすると弾が発射されるようになりました</p><p>面白いなこれ</p><p>&nbsp;</p><p>&nbsp;</p><p>当たり判定の追加</p><p>・コンテンツブラウザ→コンテンツ→PlayerMeshを開く</p><p>・上部メニューバーのコリジョン→ボックス単純化コリジョンを追加</p><p>（6DOPが見当たらないがどれでも良かったのだろうか？意味がわかってない）</p><p>・保存して閉じる</p><p>&nbsp;</p><p>・コンテンツブラウザ→コンテンツ→EnemyMeshを開く</p><p>・上部メニューバーのコリジョン→ボックス単純化コリジョンを追加</p><p>・保存して閉じる</p><p>&nbsp;</p><p>・コンテンツブラウザ→コンテンツ→PlayerBulletMeshを開く</p><p>・上部メニューバーのコリジョン→ボックス単純化コリジョンを追加</p><p>・保存して閉じる</p><p>&nbsp;</p><p>・コンテンツブラウザ→コンテンツ→EnemyBulletMeshを開く</p><p>・上部メニューバーのコリジョン→ボックス単純化コリジョンを追加</p><p>・保存して閉じる</p><p>&nbsp;</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→PlayerBlueprintを開く</p><p>・StaticMeshを選択→詳細→Collision→コリジョンプリセット→OverlapAllDynamic</p><p>・保存して閉じる</p><p>&nbsp;</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→EnemyBlueprintを開く</p><p>・StaticMeshを選択→詳細→Collision→コリジョンプリセット→OverlapAllDynamic</p><p>・保存して閉じる</p><p>&nbsp;</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→PlayerBulletBlueprintを開く</p><p>・StaticMeshを選択→詳細→Collision→コリジョンプリセット→OverlapAllDynamic</p><p>・保存して閉じる</p><p>&nbsp;</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→EnemyBulletBlueprintを開く</p><p>・StaticMeshを選択→詳細→Collision→コリジョンプリセット→OverlapAllDynamic</p><p>・保存して閉じる</p><p>&nbsp;</p><p>・コンテンツブラウザ→コンテンツ→Blueprints→EnemyBlueprintを開く</p><p>・イベントグラフを表示</p><p>・イベントActorBeginOverlapから線を引き→ゲーム→クラスからActorをスポーンします→Class「Blueprint_Effect_Explosion」→更に線を引き→ユーティリティ→キャスティング→DestroyActor</p><p>・SpawnTransformから線を引き→演算→コンバージョン→ToTransform(vector)</p><p>・ToTransform(Vector)の左から線を引き→ユーティリティ→トランスフォーメーション→GetActorLocation<br>&nbsp;</p><p>ここまでで弾を発射すると敵が爆発する処理ができた</p><p>&nbsp;</p><p>（少し用事ができたので今日はここまで。次回はここに追記します）</p><p>&nbsp;</p><p>というわけで続き</p><p>&nbsp;</p><p>弾の削除</p><p>・コンテンツブラウザ→Blueprints→BulletBlueprint</p><p>・SetActorLocationから線を引き→ユーティリティ→フロー制御→ブランチ</p><p>→Trueから線を引き→ユーティリティ→構造体→DestroyActor</p><p>→Fasleから線を引き→ユーティリティ→フロー制御→ブランチ</p><p>→Trueから線を引き→DestroyActorに繋ぐ</p><p>・一つ目のブランチのConditionから線を引き→演算→Float→float &gt; float→下段に「1000」</p><p>→上段から線を引き→演算→ベクター→Break Vector→Xにつながっていた線をzに繋ぎなおす</p><p>→Break VectorのIn Vecから線を引き→ユーティリティ→トランスフォーメーション→GetActorLocation</p><p>・２つ目のブランチのConditionから線を引き→演算→Float→float &lt; float→下段に「-1000」</p><p>→上段から線を引き→Break Vectorのzに繋ぐ</p><p>→Break VectorのIn Vecから線を引き→GetActorLocationに繋ぐ</p><p>（少しだけアレンジしてみたけど余計に見にくいか）</p><p><a href="https://stat.ameba.jp/user_images/20170807/13/mokatwin2/09/13/j/o1101026013999756691.jpg"><img alt="" height="99" src="https://stat.ameba.jp/user_images/20170807/13/mokatwin2/09/13/j/o1101026013999756691.jpg" width="420"></a></p><p>&nbsp;</p><p>敵からの攻撃などはヒントなしだそうです</p><p>&nbsp;</p><p>掲載されたブループリントを見てまねてみます</p><p>&nbsp;</p><p>敵の移動部分を関数化</p><p>・コンテンツブラウザ→Blueprints→EnemyBlueprint</p><p>・関数→＋関数→名前「ReverseDirection」</p><p>・イベントグラフへ移動→SetActorLocationより後ろの処理をすべて選択（ドラッグで範囲指定）→Ctrl+x</p><p>・ReverseDirectionへ移動→Ctrl+v→ReverseDirectionと一つ目のブランチを繋ぐ</p><p>→どちらかのSetDirectionYから線を引き→リターンノードの追加</p><p>→もう一つのSetDirectionYとも繋ぐ→ブランチのFalseとも繋ぐ</p><p><a href="https://stat.ameba.jp/user_images/20170807/13/mokatwin2/59/c3/j/o1274025013999767828.jpg"><img alt="" height="82" src="https://stat.ameba.jp/user_images/20170807/13/mokatwin2/59/c3/j/o1274025013999767828.jpg" width="420"></a></p><p>&nbsp;</p><p>・関数→＋関数→名前「ShotBullet」</p><p>→詳細→インプット→＋新規パラメータ→パラメータ名「DeltaTime」、型「Float」</p><p>・ShotBulletから線を引き→ユーティリティ→フロー制御→ブランチ</p><p>→Conditionから線を引き→演算→Float→float &lt; float</p><p>→上段から線を引き→演算→Float→float - float</p><p>→上段から線を引き→変数へ昇格→変数名「ShotTimer」</p><p>・ShotBulletのDeltaTimeとfloat - floatの下段を繋ぐ</p><p>・ブランチのTrueから線を引き→ゲーム→クラスからアクタをスポーンします→クラス「EnemyBulletBluePrint」</p><p>→右から線を引き→変数→デフォルト→Set ShotTimer</p><p>→左下から線を引き→演算→ランダム→Random Float in Range→Min=1、Max=2</p><p>・SetShotTimerから線を引き→リターンノードの追加</p><p>・SpawnActor Enemy Bullet BlueprintのSpawnTransformから線を引き→状況に合わせた表示のチェックを外す→演算→ベクター→vector + vector→下段Z=-40</p><p>→左上から線を引き→ユーティリティ→トランスフォーム→GetActorLocation</p><p>・ブランチのFalseから線を引き→変数→デフォルト→Set ShotTimer→リターンノードに繋ぐ</p><p>→ShotTimerからvector - vectorに繋ぐ</p><p><a href="https://stat.ameba.jp/user_images/20170807/16/mokatwin2/ee/8e/j/o1281025713999853785.jpg"><img alt="" height="84" src="https://stat.ameba.jp/user_images/20170807/16/mokatwin2/ee/8e/j/o1281025713999853785.jpg" width="420"></a></p><p>&nbsp;</p><p>・イベントグラフへ移動→SetActorLocationから線を引き→関数呼び出し→ReverseDirection</p><p>→ReverseDirectionから線を引き→関数呼び出し→ShotBullet</p><p>→DeltaTimeから線を引きイベントTickのDeltaSecondsに繋ぐ</p><p><a href="https://stat.ameba.jp/user_images/20170807/16/mokatwin2/82/42/j/o1223060713999866593.jpg"><img alt="" height="208" src="https://stat.ameba.jp/user_images/20170807/16/mokatwin2/82/42/j/o1223060713999866593.jpg" width="420"></a></p><p>コメントなどもつけて見やすくした</p><p>線をダブルクリックすることで「・」が追加された</p><p>このおかげでなるべく線が重ならないように見やすくできた</p><p>&nbsp;</p><p>再生すると敵が弾を発射するが弾が自機にあたってもこちらが爆発しない</p><p>サイトをよく読むとひとつやり忘れがありました</p><p>&nbsp;</p><p>・コンテンツブラウザ→Blueprints→PlayerBlueprint</p><p>・EnemyBlueprintのイベントグラフにある「敵爆発」の処理を丸ごとコピーして貼り付け</p><p>・コメントは自機爆発に変える</p><p><a href="https://stat.ameba.jp/user_images/20170807/16/mokatwin2/db/a7/j/o1034082413999869444.jpg"><img alt="" height="335" src="https://stat.ameba.jp/user_images/20170807/16/mokatwin2/db/a7/j/o1034082413999869444.jpg" width="420"></a></p><p>&nbsp;</p><p>再生してみる</p><p>敵の弾が当たって自機が爆発</p><p>やった！</p><p>と思いきや</p><p>自機が弾を撃つと爆発した</p><p>&nbsp;</p><p>PlayerBlueprintで弾の発射のvector + vector 下段のZ=40にすることで爆発しなくなりました</p><p>こんな解決方法で良かったのかな・・・？</p><p>&nbsp;</p><p>ともかく次へ進みます</p>
]]>
</description>
<link>https://ameblo.jp/mokatwin2/entry-12298910703.html</link>
<pubDate>Sat, 05 Aug 2017 17:57:16 +0900</pubDate>
</item>
<item>
<title>unreal engine 4 を使いこなすためにまずはインベーダゲームを作ってみる２</title>
<description>
<![CDATA[ <p>前回の記事を追記しました。</p><p>解決できた旨の報告と引用したURLをページ単位で入れていきます</p><p>&nbsp;</p><p>&nbsp;</p><p>そして先日の続きを淡々と進める</p><p>&nbsp;</p><p><a href="http://unrealengine-blog.hatenablog.com/entry/2014/04/27/211646">http://unrealengine-blog.hatenablog.com/entry/2014/04/27/211646</a></p><p>&nbsp;</p><p>敵のインベーダを作る</p><p>・グリッドを5にする</p><p>・モード→ジオメトリ→ボックスをレベルにドラッグドロップ</p><p>→詳細→トランスフォーム→位置→X=0、Y=0、Z=60→Brush Settings→X=20、Y=5、Z=5</p><p>・ALTキーを押しながら緑の矢印をドラッグし、すぐ右にくっつける</p><p>（ALTキーを押しながら物体を移動させようとするとコピーするらしい）</p><p>&nbsp;</p><p>敵ぐらいは違うものに変えてみよう</p><p>インベーダ　ドットでぐぐってこのサイトに良いインベーダ絵があったので拝借</p><p><a href="http://buzz-netnews.com/Excel_Art">http://buzz-netnews.com/Excel_Art</a></p><p>真ん中のインベーダにしよう</p><p>&nbsp;</p><p>CTRLとALTを駆使して以下のようなインベーダーが完成</p><p><a href="https://stat.ameba.jp/user_images/20170804/10/mokatwin2/9e/6e/p/o0596038013997342871.png"><img alt="" height="268" src="https://stat.ameba.jp/user_images/20170804/10/mokatwin2/9e/6e/p/o0596038013997342871.png" width="420"></a></p><p>・アウトライナでBox　ブラシ～Box　ブラシ60までを選択（最初をクリックしてからShiftを押しながら最後をクリック）→右クリック→グループ化</p><p>・→詳細→Brush Settings→隠れているメニューを表示→スタティックメッシュを作成→ファイル名「EnemyMesh」</p><p>・レベルにある敵を削除</p><p>&nbsp;</p><p>敵が動くようにする</p><p>・ブループリント→新規の空のブループリントクラス→Pawn→ファイル名「EnemyBlueprint」</p><p>・コンポーネント→DefaultSceneRootを選択→コンポーネントを追加→スタティックメッシュコンポーネント</p><p>・StaticMesh→EnemyMeshを選択</p><p>・変数→＋変数→変数名「DirectionY」→変数の型「Float」→コンパイル→デフォルト値「1」</p><p>・イベントグラフへ移動</p><p>・イベントTickから線を引き→ユーティリティ→トランスフォーメーション→SetActorLocation</p><p>・SetActorLocationのNewLocationから線を引き→演算→ベクター→vector + vector</p><p>・vector + vectorの左下から線を引き→ユーティリティ→トランスフォーメーション→GetActorLocation</p><p>・vector + vectorの左上から線を引き→演算→ベクター→vector * vector</p><p>・vector * vectorの左上から線を引き→演算→ベクター→vector * float→上段のY=50→左下の線をイベントTickのDeltaSecondsにつなげる</p><p>・vector * vectorの左下から線を引き→演算→ベクター→vector * float→上段のY=1→左下から線を引き→変数→デフォルト→DirectionY</p><p>・レベルにEnemyBluprintをドラッグドロップ</p><p><a href="https://stat.ameba.jp/user_images/20170804/12/mokatwin2/d8/a2/p/o1018029813997411077.png"><img alt="" height="123" src="https://stat.ameba.jp/user_images/20170804/12/mokatwin2/d8/a2/p/o1018029813997411077.png" width="420"></a></p><p>再生するとインベーダーが右に動いていきました</p><p>&nbsp;</p><p>次は画面の端にたどり着いたら左に動くようにする</p><p>・SetActorLocationから線を引き→ユーティリティ→フロー制御→ブランチ</p><p>→Trueから線を引き→変数→デフォルト→SetDirectionY=-1</p><p>・ブランチのConditionから線を引き→演算→Float→float &gt; float→下段に「100」</p><p>→上段から線を引き→演算→ベクター→Break Vector→Xにつながっていた線をYに繋ぎなおす</p><p>・Break VectorのIn Vecから線を引き→ユーティリティ→トランスフォーメーション→GetActorLocation</p><p>・Break VectorのIn Vecから線を引き→演算→Float→float &lt; float→下段に「-100」→右から線を引き→ユーティリティ→フロー制御→ブランチ</p><p>・一つ目のブランチのFalseと二つ目のブランチを繋ぐ</p><p>・二つ目のブランチから線を引き→変数→デフォルト→SetDirectionY=1</p><p><a href="https://stat.ameba.jp/user_images/20170804/12/mokatwin2/14/e5/p/o1223023313997411079.png"><img alt="" height="80" src="https://stat.ameba.jp/user_images/20170804/12/mokatwin2/14/e5/p/o1223023313997411079.png" width="420"></a></p><p>再生するとインベーダが画面の端で折り返す</p><p>良いね！</p><p>&nbsp;</p><p>しかしもうちょっときれいに書き直せないものなのかな？</p><p>それはもっと余力のある時にする</p>
]]>
</description>
<link>https://ameblo.jp/mokatwin2/entry-12298569479.html</link>
<pubDate>Fri, 04 Aug 2017 20:54:14 +0900</pubDate>
</item>
<item>
<title>unreal engine 4 を使いこなすためにまずはインベーダゲームを作ってみる１</title>
<description>
<![CDATA[ <p>０からゲームを作るとなるとハードルが高いので</p><p>世の中にある既存のゲームを移植してみる</p><p>とはいえいきなり大作ゲームをコピるのではなく</p><p>もっと簡単なもの</p><p>例えば子供のころにやり倒したようなものを作ってみる</p><p>&nbsp;</p><p>・インベーダやギャラクシアンのようなシューティング</p><p>・パックマンやドルアーガのような見下ろし型ゲーム</p><p>・ドンキーコングやマリオブラザーズのような重力があるゲーム</p><p>&nbsp;</p><p>よしまずはインベーダで行こう</p><p>&nbsp;</p><p>ちなみにこのブログではインストールとか細かい使い方は説明しません</p><p>あくまで自分のメモとして作りながら書いていきます</p><p>暇すぎたら字に色をつけたりスクショつけたりするかも</p><p>&nbsp;</p><p>バージョン4.16.3</p><p>&nbsp;</p><p>イチから作ろうかと思ったけどまったく何をして良いのかわからない</p><p>&nbsp;</p><p>ひとまずググる</p><p>「ue4 インベーダ」で検索すると以下のページが見つかった</p><p><a href="http://unrealengine-blog.hatenablog.com/entry/2014/04/24/133055">http://unrealengine-blog.hatenablog.com/entry/2014/04/24/133055</a></p><p>３年以上前に誰かがすでにやっていた（そらそうだ）</p><p>今回はここをそのまま真似しながらオリジナル要素を入れられるようにする</p><p>&nbsp;</p><p>&nbsp;</p><p>プロジェクトの作成</p><p>・空のプロジェクト、スターターコンテンツあり、プロジェクト名「invader」</p><p>&nbsp;</p><p>新規レベルを作成</p><p>・ファイル→新規レベル→default</p><p>・現在のレベルを保存→ファイル名「invaderMap」</p><p>&nbsp;</p><p>再起動してもこのマップを開くようにする</p><p>・編集→プロジェクト設定→マップ＆モード</p><p>・DefaultMaps→Editor Startup Map→invaderMap</p><p>・同じく→Game Default Map→invaderMap</p><p>&nbsp;</p><p>&nbsp;</p><p>実行して操作してみる</p><p>ＷＡＳＤキーとマウスでカメラが動いた</p><p>&nbsp;</p><p><a href="http://unrealengine-blog.hatenablog.com/entry/2014/04/25/005756">http://unrealengine-blog.hatenablog.com/entry/2014/04/25/005756</a></p><p>&nbsp;</p><p>画面を固定する</p><p>・モード→全てのクラス→カメラをレベルにドラッグドロップ</p><p>・カメラを選択したままブループリント→レベルブループリントを開く</p><p>・ブループリントのどこかを右クリック→ゲーム→Get Player Controller</p><p>・ブループリントのどこかを右クリック→CameraActorのリファレンスを作成</p><p>・薄くなっているイベントBeginPlayから線を引いて離す→状況に合わせた表示のチェックを外す→ゲーム→プレイヤー→Set View Target with Blend</p><p>・Get Player ControllerのReturn ValueをSet View Target with Blendのターゲットにつなぐ</p><p>・CameraActorからSet View Target With BlendのNew View Targetにつなぐ</p><p>&nbsp;</p><p>やばい</p><p>すでに何をしているのかわからない</p><p>しかし実行してみると丸い球がWASDキーによって動く</p><p>マウスを動かしてみると一見何も起きないがＷＡＳＤの動き方が変わる</p><p>そうか自分はこうなっていたのか</p><p>わからないことだらけでもとにかく今は進もう</p><p>後で理解できるだろうきっと</p><p>&nbsp;</p><p><a href="http://unrealengine-blog.hatenablog.com/entry/2014/04/25/232153">http://unrealengine-blog.hatenablog.com/entry/2014/04/25/232153</a></p><p>&nbsp;</p><p>自機の砲台作成</p><p>・モード→ジオメトリ→ボックスをレベルにドラッグドロップ</p><p>→詳細→トランスフォーム→位置→X=0、Y=0、Z=60→Brush Settings→X=20、Y=20、Z=20</p><p>・モード→ジオメトリ→ボックスをレベルにドラッグドロップ</p><p>→詳細→トランスフォーム→位置→X=0、Y=0、Z=40→Brush Settings→X=20→Y=20→Z=20</p><p>・Ctrlキーを押しながらBoxブラシとBoxブラシ2をクリック→２つ選択されたら右クリック→グループ</p><p>→詳細→Brush Settings→隠れているメニューを表示→スタティックメッシュを作成→ファイル名「PlayerMesh」</p><p>・レベルにある自機を削除</p><p>&nbsp;</p><p>自機を動かせるようにする</p><p>・ブループリント→新規の空のブループリントクラス→Pawn→ファイル名「PlayerBlueprint」</p><p>・コンポーネント→DefaultSceneRootを選択→コンポーネントを追加→スタティックメッシュコンポーネント</p><p>（このあたりはバージョン違いで操作も違っていたので迷ったがこれで合ってるはず）</p><p>・StaticMesh→PlayerMeshを選択</p><p>・イベントグラフへ移動</p><p>・ブループリントのどこかを右クリック→インプット→マウスイベント→マウスのＸ軸</p><p>・ブループリントのどこかを右クリック→演算→ベクター→Vector * float→Y=10</p><p>・マウスのＸ軸のAxis ValueとVector * floatの下の緑をつなぐ</p><p>・Vector * Floatの右から線を引く→演算→ベクター→vector + vector</p><p>・vector + vector の左下の黄色から線を引く→ユーティリティ→トランスフォーメーション→GetActorLocation</p><p>・マウスのＸ軸から線を引く→ユーティリティ→トランスフォーメーション→SetActorLocation</p><p>・vector + vectorの右とSetActorLocationのNewLocationにつなぐ</p><p><a href="https://stat.ameba.jp/user_images/20170804/12/mokatwin2/dc/13/p/o0939026713997413892.png"><img alt="" height="119" src="https://stat.ameba.jp/user_images/20170804/12/mokatwin2/dc/13/p/o0939026713997413892.png" width="420"></a></p><p>&nbsp;</p><p>作った自機をプレイヤーとする</p><p>・設定→ワールドセッティング→GameMode→GameMode Overrideの＋→ファイル名「MyGameMode」→選択したゲームモード→Default Pawn Class</p><p>&nbsp;</p><p>記事ではこれで再生すればいけるとあったがここで躓いた</p><p>自機砲台が出てこない</p><p>&nbsp;</p><p>コメント欄を見ると同じく困っている方々</p><p>&nbsp;</p><p>&gt;プレイヤーBPの詳細にある[Pawn」の設定で「Auto Process Player」を「Player０」に設定したら解決しました。</p><p>&nbsp;</p><p>とあったので試してみるもうまくいかない</p><p>&nbsp;</p><p>トレースラーニングはここまでか</p><p>原因を調べて解決したいが諦めて他の勉強するかのどちらか</p><p>&nbsp;</p><p>解決したら何か書きます</p><p>&nbsp;</p><p>（追記　2017/08/03）</p><p>コメントでも書きましたがその後解決しました</p><p>コンテンツブラウザからPlayerBlueprintをレベルにドラッグドロップするだけでした</p><p>当たり前すぎて書かなかったのかバージョン違いなのかわかりませんがこれで進めていくようにします</p><p>&nbsp;</p><p>そしてわずか1記事を書いただけで想像よりも多いアクセスをいただいてただただ驚きました</p><p>これがアメブロの力なのか</p><p>見ても１～２人ぐらいだろうと思ってただけに適当すぎる書き方はまずいなと思った</p><p>なるべく丁寧に書こうか</p><p>いやしかしそれだと面倒になって書かなくなるかもしれないからやっぱりマイペースな書き方でいきます</p>
]]>
</description>
<link>https://ameblo.jp/mokatwin2/entry-12298165105.html</link>
<pubDate>Wed, 02 Aug 2017 23:19:53 +0900</pubDate>
</item>
<item>
<title>unreal engine 4 を使って映画を作りたい</title>
<description>
<![CDATA[ <p>アラフィフ直前のおっさんです</p><p>初めてブログを書きます</p><p><br>そこそこ有名な企業の社員だが本来ならもう中堅以上の歳</p><p>若かりし頃に酔って上司（後に取締役に就任）を殴るというしくじりをして出世コースが途絶え</p><div><div><div><span style="background-color: rgb(255, 255, 255);">入社数年目と変わらず雑務に追われて走り回る毎日</span></div><div><div>職種はSEだがやっていることは便利屋</div></div><div>質問や苦情にお応えしては日が暮れる</div></div><br><span style="background-color: rgb(255, 255, 255);">しくじった時に転職してしまえばよかったのだが</span></div><div><div><span style="background-color: rgb(255, 255, 255);">家族も抱えていて保守的な考えだった私はそんな決断をする度胸もなく</span></div><div><span style="background-color: rgb(255, 255, 255);">クビにならなかっただけでも幸いとばかりに居座り続けて早１０数年</span></div><div><div>万年ヒラ社員のまま定年を迎える会社生活になるのだろう</div><div>&nbsp;</div></div><div>&nbsp;</div><div>こんな出世を諦めたつまらない人間が</div><div>ある時突然<span style="color:#ff0000;"><span style="font-weight:bold;">「映画を作りたい」</span></span>という衝動に駆られる</div><div>&nbsp;</div><div>子供のころから現在まで自分の中で温め続けたストーリーがある</div><div>誰にも話した事がなくそれが面白いのかどうかはわからない</div><div>でも死ぬまでに何らかの形にしたい</div><div><br>映画を作るとなると</div><div>役者が要る</div><div>舞台も要る</div><div>機材も要る</div><div>金はない</div><div>暇もそんなにない</div><div><div>&nbsp;</div><div>世の中にあふれる映画の数</div><div>その一つ一つがたくさんの人が協力しあって作り上げる作品</div><div>深く考えた事がなかったがあらためてすごいなと思う</div><div>&nbsp;</div><div>人脈も人望も金もない自分に何ができるか？</div><div>&nbsp;</div>生活費が必要だから今の仕事はやめられない</div><div>会社をやめて映画作りに没頭できるほどの度胸がないからだ</div><div>完成が老後になっても構わない</div><div>趣味の時間のすべてを作品作りに没頭したい</div><div>&nbsp;</div><div>自分の都合の良い時間に自分のペースで自在に動く役者が欲しい</div><div>そんな都合の良い役者がいないのはわかりきっている</div><div>&nbsp;</div><div>アニメ映画はどうか？</div><div>絵を一枚一枚書いていくのは厳しい</div><div>そもそも絵心が無い</div><div>&nbsp;</div><div>では小説は？</div><div>このブログでお解かりのように文才がない</div><div>文字だけで情景を表すなんてできっこない</div><div>&nbsp;</div><div>ならばCGではどうなのか？</div><div>&nbsp;</div><div>ある日パソコンを触っていると<span style="color:#ff0000;"><span style="font-weight:bold;">unreal engine 4</span></span>というものが２年以上前に無償化されていたと知る</div></div><div>売れたらロイヤリティを払わないといけないが売れないだろうから関係ないし間違って売れたら払えばいい</div><div><p>&nbsp;</p><p>デモやチュートリアルを見ていると</p><p>何の根拠もなく<span style="color:#ff0000;"><span style="font-weight:bold;">「これはいけるのではないか？」</span></span>と思った</p><p>&nbsp;</p><p>そのためには０からこのツールを使いこなす必要がある</p><p>SEとは名ばかりのオブジェクト指向すらろくに理解できていないプログラマーな自分にできるのか？</p><p>&nbsp;</p><p>ダメ元でまずはやってみよう</p><p>初歩的な事から段階的に</p><p>ダメだったらこのブログの更新は止まるだけ</p><p>不定期更新上等</p><p>句読点が無くて読みにくい？</p><p>文才がないからあえて入れてません</p><p>&nbsp;</p><p><span style="color:#0000ff;"><span style="font-weight:bold;">これはunreal engine 4を使っていい加減で無計画な一人のアラフィフが</span></span></p><p><span style="color:#0000ff;"><span style="font-weight:bold;">老後ぐらいに映画を完成させようという無謀な計画を綴った日記である</span></span></p><p>&nbsp;</p><p><span style="color:#000000;"><span style="font-size:1.4em;"><span style="font-weight:bold;">最終目的</span></span></span></p><p><span style="color:#000000;"><span style="font-size:1.4em;"><span style="font-weight:bold;">unreal engine 4を使って２時間規模のCG映画を作りたい</span></span></span></p><p>&nbsp;</p></div>
]]>
</description>
<link>https://ameblo.jp/mokatwin2/entry-12298118697.html</link>
<pubDate>Wed, 02 Aug 2017 22:43:51 +0900</pubDate>
</item>
</channel>
</rss>
