UE4で1日ゲームジャムたかし君【11:20~14:00】

wakanya.hatenablog.comの続きです。

前回の記事を読んでない方は、そちらから読んで下さい。

 

あらすじ

プログラム未経験のたかしくんと、プログラマの先輩が

UE4を用いて1日ゲームジャムに参加することに。

プログラマの先輩は足をくじいた?らしく、自宅からスカイプ参戦。

12時までにマルチプレイヤー化できるのか??

 

【11:20】

「トイレ行ってきました」

 

「次は2P対応ね。ここから説明をはしょり気味でいくよ」f:id:wakanya:20161220234500j:plain

 

 

「間に合うんだろうか…理解できるんだろうか…」

「まず2P用のコントローラね。プロジェクト設定を開いて」f:id:wakanya:20161218150942j:plain

 

「左からインプットの項を見つけて、、ここですね」

f:id:wakanya:20161218234747p:plain

 

「ものわかりが良すぎて気持ち悪い。減点」f:id:wakanya:20161220231119p:plain

 

 

「急いでいる状況からしたら加点でしょ!!」

「1Pと同じように2Pのコントローラ設定をしてちょうだい」f:id:wakanya:20161218150942j:plain

 

「えーと、ジャンプとか移動とかシュートをもう一個ずつ作れと?」

 

「それでいいわ。ジャンプからやってみて。」f:id:wakanya:20161218150942j:plain

 

「ええと、2人プレイを考えて1Pのキーを左の方へ寄せたい。」

「1Pジャンプを左シフトにして、2Pジャンプを右Ctrlにしよう。」

f:id:wakanya:20161218235340p:plain

「Action Mappingの横から追加できる」

 

「余裕ね。」f:id:wakanya:20161220234500j:plain

 

 

「さっきやったばかりですからね。でも追加のところは忘れかけてました」

 

「次はショット、あとはAxisの方のMoveForward,Rightね」f:id:wakanya:20161218150942j:plain

 

「えーと、ショットはこう」

f:id:wakanya:20161219000109p:plain

 

「Move Forwardは、あれ、複数割り当てるには?」

 

「名称の横の+ボタンね。」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219000213p:plain

 

「それぞれ追加できたと思います!」

f:id:wakanya:20161219000441p:plain

 

「いい感じね。そしたら次はいよいよ2Pを出すわよ」f:id:wakanya:20161218150942j:plain

 

「おお。はやく○したいです!」

 

「上のブループリントからレベルブループリントを開いて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161220021045p:plain

 

「開きました。」

f:id:wakanya:20161220021159p:plain

「なにもないっすね…」

 

「Begin Playを出してちょうだい」f:id:wakanya:20161218150942j:plain

 

f:id:wakanya:20161219000951p:plain

f:id:wakanya:20161219000955p:plain

「出ました~。これは始まったときに呼ばれるんですね」

 

「そ。」f:id:wakanya:20161218150942j:plain

 

「BeginPlayからCreate Playerを出してつながるようにして」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219001211p:plain

 

「プレイヤーをゲームの方から作るってなんかおもしろいなあ。ん?-1?」

 

「-1だと自動で割り振るのよ。基本1Pが0だから1が割り振られるわ」f:id:wakanya:20161218150942j:plain

 

「へぇ~。今回は2Pまでしかいないから、1でもいいんですね。」

 

「いいわよ。で、次にスポーンする。」f:id:wakanya:20161218150942j:plain

 

「Spawn Actorなんちゃらだ」

f:id:wakanya:20161219001606p:plain

 

「あれ?2Pはまだ作ってないな…」

 

「そう。今回は1Pをコピーするわ。1PのBPの場所に行って」f:id:wakanya:20161218150942j:plain

 

「きました。」

 

「右クリックから複製できる。ctrl+cからのctrl+vでもできる 」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219001915p:plain

f:id:wakanya:20161219002118p:plain

「ふむふむ。末尾に2がついた。」

 

「色の判別がつきにくいから、マテリアルを作るわ」f:id:wakanya:20161218150942j:plain

 

「?」

 

「今回説明を省くけど、形に対して色を設定するためのものよ」f:id:wakanya:20161218150942j:plain

 

「難しそうだ」

 

「単色ならかんたんよ。自分のプロジェクトフォルダに移動して」f:id:wakanya:20161218150942j:plain

 

「Materialsってフォルダを作って、右クリックでマテリアル作成」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219002854p:plain

f:id:wakanya:20161219002857p:plain

f:id:wakanya:20161219002859p:plain

「フォルダ移動や何か作るのは慣れてきた」

 

「M_はマテリアルの接頭辞ね。開いてちょうだい」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219002958p:plain

「うっ。。。」

 

「臆することはないわ。何色にしたいの?」f:id:wakanya:20161220234500j:plain

 

「と、透明…」

 

「単色は難しくないわ。詳細のBlend ModeをTranslucentにして」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219003352p:plain

 

「次は、なにもないところでV押しながらクリックして」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219003550p:plain

 

「なんですか、これ」

「Vector4ね。RGBAとして扱うわ。黒いとこをダブルクリック」f:id:wakanya:20161218150942j:plain

 

「カラーピッカーだ。これならわかるかも」

 

「Aの値を0.6くらいにして、あとは好きな色にして」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219004051p:plain

 

「で、一番上のピンをベースカラー、下をオパシティに繋げる」f:id:wakanya:20161218150942j:plain

 

「ほい」

f:id:wakanya:20161219004155p:plain

 

「保存して、コンテンツブラウザに戻って」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219004255p:plain

「おお、既にできていた…!コレを2Pに使えばいい感じです」

 

「マテリアルを右クリックして、マテリアルインスタンスを作成」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219004657p:plain

「は?いんすたんす…?」

「もとのマテリアルを元に、ちょこっと色変えたりできる」f:id:wakanya:20161220234500j:plain

 

「1Pにも使えば、2Pと同じテイストのデザインにできるんすね」

 

「そういうこと。1Pと2Pの2個インスタンス用意して」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219004714p:plain

「いくら食べたい」

 

「1Pの方を開いてみて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219004906p:plain

 「開きました。このいくらは皮が分厚そうだ」

 

「詳細のVector ParametorのNoneにチェック入れて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219005348p:plain

 

「ははーん、ここで色を変えるんだな。青にしよう」

f:id:wakanya:20161219005329p:plain

 

「いい感じね。保存して、1PのBPのビューポートを開いて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219005508p:plain

「またせたな」

 

「左からMeshを選択、右に適用されたマテリアルが表示されてる」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219005605p:plain

「これを変えればいいのか!」

 

「そう。Bodyのほうが身体。」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219005854p:plain

 

「相棒…!それがお前の真の姿…!」

f:id:wakanya:20161219010003p:plain

 

「保存して2Pも同じ感じにして」f:id:wakanya:20161220234500j:plain

f:id:wakanya:20161219010147p:plain

 

「すごいと思った(小並感)」

 

「じゃ、次はどこに2Pを出すか決めましょう」f:id:wakanya:20161218150942j:plain

 

「どうすれば?1Pの股間から?」

 

「Mapに戻ってちょうだい。ゲーム画面っぽいところよ」f:id:wakanya:20161218150942j:plain

 

「来ました」

 

「左上の検索窓にtargetって入れて。」f:id:wakanya:20161218150942j:plain

 

「ターゲットポイントってのが出てきました」

f:id:wakanya:20161219010738p:plain

 

「それをドラッグして2Pっぽいところに置いて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219010850g:plain

 

「直置きできるんすね…」

 

「で、ゲームモードを開いて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219011519p:plain

「久しぶりな気がする…2Pを出すんでしたね。」

 

「そ。Classに2Pをセットして、Get All Actors of Classを作成」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219011823p:plain

「これは?」

 

「設定したクラスの参照をゲーム中から全部引っ張ってくるわ」f:id:wakanya:20161220234500j:plain

 

「なんか乱暴なかんじっすね」

 

「白い処理ピンがあるから、Alt押しながらBeginの線切って挟んで」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219012115p:plain

「こんな感じっすね」

 

「で、Getのクラスにはtargetを選択。outからGetを作成」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219012421p:plain

f:id:wakanya:20161219012424p:plain

f:id:wakanya:20161219012458p:plain

 

「このGetは?」

「場のTarget Pointのうち、0番目に見つかったものの参照」f:id:wakanya:20161220234500j:plain

 

「なんかすごく遠回りな気分」

 

「GetからWorld Transformを取得して」f:id:wakanya:20161218150942j:plain

 

「わかった。それをスポーンに繋げるんだ」

f:id:wakanya:20161219012821p:plain

「いい感じね。」f:id:wakanya:20161220234500j:plain

 

「なんか[!]って感じの出てきましたけど」

 

「特に気にしなくていいわ」f:id:wakanya:20161218150942j:plain

 

「うす。スポーンのClassに2Pをセットして。。。」

f:id:wakanya:20161219013010p:plain

 

「ん~、実行したい?保存してやってみて」f:id:wakanya:20161220231119p:plain

f:id:wakanya:20161219013200p:plain

 

マルチプレイ画面だ!」

 

「…あれ?2人とも同じ色だ…?」

 

「よく見たらTargetPointのところに小さな2Pが?」

 

「でも2Pはもうひとりの1Pみたいになってる」

 

「分析上手じゃない」f:id:wakanya:20161218150942j:plain

 

「でもどうしたらいいのかわからないです…」

 

「実はCreate Playerした時点でキャラクターが作られてるの」f:id:wakanya:20161218150942j:plain

 

「スポーンしちゃうってこと?」

 

「そう。で、2Pの所有権がそのままってことね」f:id:wakanya:20161220234500j:plain

 

「所有権」

 

「まず所有対象を変えましょうか。Possesノードを作成して」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219013713p:plain

「ないっすね…?」

 

「『状況に合わせた表示』のチェックを外してみてf:id:wakanya:20161218150942j:plain

 

 

「あ、出ました」

 

「In PawnにReturn Valueつなげて、Get Player Controller作成して」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219014109p:plain

 

「1Pと2Pのインデックスがあるんですか」

 

「そう。1にして、Possesの真ん中につなげて。保存してプレイ」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219014243p:plain

 

「あっ!!2Pが2Pカラーになった!!でも小さい!おしい!」

 

「もうちょっとね。Set Actor Scale 3D」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219014458p:plain

「魔法使いが魔法唱えるのを聞いている感覚だ」

 

「大きさを変えるってことですね?」

 

「そうよ。スポーンのReturnをつなげて、値は全部1.0にしてみて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219014823p:plain

 

「ヒャア我慢できねえプレイだ」

f:id:wakanya:20161219014831p:plain

「!!!」

 

「完」

 

「よかったね♡」f:id:wakanya:20161218150942j:plain

 

 

「2Pからも出るようにしたい!出したい!」

 

「出したがりね。2Pの弾は1Pのコントローラから出させるわ」f:id:wakanya:20161220234500j:plain

 

「?よくわかりません??2PのBPへ設定した2P用のインプットを書くのでは?」

 

「キーボードが1つ、つまりコントローラが1つしかないから、」f:id:wakanya:20161218150942j:plain

 

「1Pから2Pをコントロールするしかないのよ」f:id:wakanya:20161218150942j:plain

 

「この場には2Pのコントローラが無いってこと」f:id:wakanya:20161218150942j:plain

 

「それで最初にノートパソコンしか持ってないことを確認したんですね」

 

「そういうこと。1PのBPを開いてちょうだい」f:id:wakanya:20161220234500j:plain

 

「開きました」

 

「Shoot_2Pのインプットから、2PのBPを探すようにして」 f:id:wakanya:20161218150942j:plain

 

「えーと探すのはGet All なんとか… で2PのBPを指定。全部取ってくるからGet…」

「たぶん2PのShooterから弾を出すから、Shooterの参照」

f:id:wakanya:20161219034005p:plain

 

「問題ないわ。だいぶUnreal脳になってきたね」f:id:wakanya:20161218150942j:plain

 

「ドヤ」

 

「弾をスポーンできるかしら?」f:id:wakanya:20161218150942j:plain

 

 

「Spawn、、クラスからアクタをスポーンっていう日本語だったな…」

「ClassはBP_Bulletを入れて、Transformがどっかから入ってくる」

「弾には向きを指定してあげないとだから、Directionにセット。2Pの前方を入れたい」

f:id:wakanya:20161219023427p:plain

「だいぶ省かれてて記事書くのも楽だわー」f:id:wakanya:20161220234500j:plain

 

「これで繋げるだけっすね!」

f:id:wakanya:20161219023430p:plain

 

「保存して実行してみて!」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219040249g:plain

2Pも1Pもでましゅううう

 

「よかったね」f:id:wakanya:20161220232655p:plain

 

「はい」

 

「次は、移動ね。これも1Pから2Pを操るわ」f:id:wakanya:20161218150942j:plain

 

「先輩、なんか今やってることって正攻法じゃない感がすごいんですが」

 

「私もそう思うわ。何か良い方法があったらコメントほしいわ」f:id:wakanya:20161218150942j:plain

 

「とりあえず動くものを作ろう」

 「Movement inputってコメントが打ってある領域を見て」f:id:wakanya:20161218150942j:plain

 

「コレですね」

f:id:wakanya:20161219023433p:plain

 

「これを流用して2P用の移動を作るよ。」f:id:wakanya:20161218150942j:plain

 

「わかりやすさのために緑色のノードだけコピペして」f:id:wakanya:20161218150942j:plain

 

「左クリックのドラッグで領域選択してコピペできるわ」f:id:wakanya:20161220234500j:plain

 

「ブループリントってコピペできるんだ…」

f:id:wakanya:20161219023435p:plain

 「別の開いてるスペースに持ってきました」

 

「これが何やってるかっていうと、」f:id:wakanya:20161218150942j:plain

 

「コントロールしてるプレイヤーの向きね」f:id:wakanya:20161220234500j:plain

 

「最後に2つに別れているのがForwardとRightですね」

 

「そ。2Pのプレイヤーを使うようにすればいいってこと」f:id:wakanya:20161218150942j:plain

 

「なるほどなあ」

「上から行くよ。Get Player Pawnを作成して1を入れて」f:id:wakanya:20161218150942j:plain

「そこからAdd Movement Inputを作成、」f:id:wakanya:20161218150942j:plain

 

「FowardからのピンをDirectionに入れる」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219023440p:plain

「意味が理解できればわかるもんだ」

 

「で、設定した2PのForwardインプットを使う」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219023443p:plain

「緑のピンから、設定した1か-1の値が入っていくんですね」

 

「よく覚えてるわね。怖いわ」f:id:wakanya:20161220231119p:plain

 

「Player PawnからGet Controll Rotationにつなげてね」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219023446p:plain

「あー、これで2Pのキャラの向きが反映されそう」

 

「されるわ。同じようにRightのインプットも作成して」f:id:wakanya:20161218150942j:plain

 

「ゴニョゴニョ・・・」

f:id:wakanya:20161219023449p:plain

 「Player Pawnからこんなに出てて大丈夫なんですか」

 

「大丈夫よ。もう動くから保存コンパイルで実行してみては」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219042756g:plain

 「感動しました」

 

「よかったね」f:id:wakanya:20161218150942j:plain

 

「あー、あとはジャンプ」

「超かんたんよ。同じようにジャンプのところをまるごとコピペ」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219043138p:plain

 

「あ、これはもしかしてターゲットに」

 

「そう。2P使えばいいの。Get Player Charactorで1入れて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219043357p:plain

 

「あっさりだ。インプットを2Pのに差し替えるんですね?」

f:id:wakanya:20161219043625p:plain

「そ!保存してコンパイルして実行しよう」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219043844g:plain

「ぴょんぴょんするんじゃ」

 

「来年も通じるネタなのかしら」f:id:wakanya:20161218150942j:plain

 

「さて、マルチプレイ化できましたね」

 

「おめでとう」f:id:wakanya:20161220234500j:plain

 

「今の時刻は、、、」

 

【12:15】

 

「12時を過ぎちゃってましたね…要領よく進めたつもりが」

 

「マテリアルで遊びすぎたかしらね」f:id:wakanya:20161220231119p:plain

 

「お昼休憩は…うーん1時間もいらないかな!予定通り13時までにします」

 

「一気にリカバーね。あまりムリしないでね」f:id:wakanya:20161218150942j:plain

 

「先輩もクリパ楽しんでくださいね」

 

「ええ」f:id:wakanya:20161218150942j:plain

 

「あっクリパって認めた」

 「キミやるわね」f:id:wakanya:20161220231119p:plain

 

【昼休み】

閑話

お二人が休んでいる間に、筆者のお話でもします。

たかし007の実装には影響ありませんので、飛ばして問題ありません。

 

経緯

「参考書やチュートリアル動画を見た後でも、いざ自分で作ろうと思うと

 習ったはずの実装をググったり調べたりを繰り返す」

ということが自分や周りでよく見られるなと思いました。

一方で調べる必要がなくなって身についた実装は、

「何回も使ったりでさすがに覚えた」ものであったと気づきました。

なので、「とにかく短期間で小さいゲームを作る」回数を増やしたら、

同じような実装が何回も出てきて覚えられるのではないか、

という脳筋な考えから、小さいゲームにしようと思いました。

 

記事のスタイル

対話形式にしたのは、個人的に書物を読むよりも、

先生が原理を自分の言葉で喋りながら教えた方が

頭に入ってきやすいと思うからです。

今回は原理を詳しく説明できてない感じがしますが、

脳みそを筋肉にして身体で覚えてください…

それから今回のテーマである「1コントローラで2プレイヤー」

に対して、私が「1脳みそ2人物」にチャレンジしています。

 

全部建前です。ただコスプレ画像使いたかっただけです。クリスマスですし。

腕が腱鞘炎になりそうです。こんなに文字の量が多くなるとは。おすすめしません。

 

たかし初期装備

たかし君の装備は、4年前に購入したマウスコンピュータのノートを想定しています。

f:id:wakanya:20161219051802p:plain

スペックは i7-2670QM、メモリ8GB、GT555Mで

現行のエントリーモデルよりはやや強めなのかな、という感じです。

エディタの動作はとても快適というほどではありませんが、

今回のたかし007くらいなら問題なく動きます。

 

 

 【13:00】

 

「ふぅ~カップ麺食べました。日清 is God」

 

七面鳥食べました」f:id:wakanya:20161220234500j:plain

 

 

「きさま…!」

 

「さて、1時間で弾が当たって死ぬんだったわね」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219051612p:plain

 

「よくわからないんですがここから修羅場??」

ウィニングランね。ステージやサウンドにこだわらなければ」f:id:wakanya:20161220234500j:plain

 

「今までが大変だったってこと?」

「2P対応が山場ね。それにBP未経験を抜け出したし」f:id:wakanya:20161218150942j:plain

 

「ホッとしました」

「安心が続くようにサクッとやりましょう」f:id:wakanya:20161218150942j:plain

 

「1PのBPを開いてね。『弾が当たる』を作るよ」f:id:wakanya:20161218150942j:plain

 

「後で2Pにも同じ処理を書く?」

 

「書く。するどいね。」f:id:wakanya:20161218150942j:plain

「Cupsule Componentを選択してOn Component Hitの+を押す」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219061509p:plain

 

「CupsuleComponent何かに当たったらこいつが呼ばれる?」

f:id:wakanya:20161219061533p:plain

 

「そう。あとはCollisionからSimulation~~にチェックを入れて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219061805p:plain

「入ってないとHitイベントが呼ばれないんですね」

 

「そして久々のBP_Bulletを開いて、こちらもCollisionを有効に」f:id:wakanya:20161218150942j:plain

 

 

「さらにPhysicsのSimulateをON、Enable GravityをOFF」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219063505p:plain

「弾自身にも設定が必要なんですね」

 

「保存してコンパイルしたら1Pに戻って」f:id:wakanya:20161218150942j:plain

 

「Cast To BP_Bulletを作成」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219063905p:plain


「これは?」

「ObjectがBulletかどうか判定するって感じかしら」f:id:wakanya:20161218150942j:plain

 

「あ~、床とか壁に当たってそうですもんね」

 

「Other ActorからObjectに繋いで」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219064206p:plain

「Hitしてきたお相手がOtherというわけか」

 

「そう。Castの一番上からPrint String」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219064339p:plain

「Helloを出す?」

「そう。Hello Worldね」f:id:wakanya:20161220234500j:plain

 

Hello Worldのタイミング遅くない??」

「保存コンパイルして実行で2Pから1Pに弾当ててみてよ」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219065938g:plain

「ん~。当たってると思うんですが左上にHelloって出るときと出ないときがある」

「弾が速すぎて、更新処理の間にすり抜けてるのかも」f:id:wakanya:20161218150942j:plain

 

「弾のスピードを下げますか?」

「いえ、弾の移動のところをSweepにしましょう」f:id:wakanya:20161218150942j:plain

 

「BP_Bulletですね。」

f:id:wakanya:20161219070203p:plain

「更新の間を補間してくれるオプション的な?」

「そんな感じ。1P側ではCastのあとにDestroy Actorをはさみます」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219070345p:plain

「これは、人に当たった弾を消しちゃうってこと?」

「そう。Sweepの場合、当たったところで止まっちゃうのよ」f:id:wakanya:20161218150942j:plain

 

「どんどん画面に溜まりそうですね。コレで実行してみます」

f:id:wakanya:20161219070908g:plain

 

「おお、ちゃんとHelloが撃った回数出てきます」

 

「壁に当たったのは残ってますがw」

「それを消すかはあとで判断しましょう」f:id:wakanya:20161218150942j:plain

 

「なんか面白いことに使えそうとかそんな感じですかね」

「ええ。では死ぬ処理を実装しましょう」f:id:wakanya:20161218150942j:plain

 

「やっと○せるんですね」

 

「カスタムイベントを作成するわ。1PのBPでcustomで検索」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219072733p:plain

f:id:wakanya:20161219072739p:plain

「あ、自分で名前つけれる」

「オリジナルのイベントよ。Ragdollって名前にしましょう」f:id:wakanya:20161218150942j:plain

 

「ぐぐったらラグドール物理ってページが出てきました。これ?」

 

「そう。ぐにゃっと力が抜けたみたいにする」f:id:wakanya:20161218150942j:plain

 

「なんか難しそう」

 

「Set All Bodies Below Simulate...を選択」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219072742p:plain

「名前長い…!!これはどういった意味が…」

 

「指定したボーン階層下のボーンを連鎖し、物理シミュする」f:id:wakanya:20161220234500j:plain

 

「なるほどわからん」

 

「In Bone NameからMake Literal Name作成。New Similateも適用」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219072749p:plain

「ボーン名?を指定するんでしたっけ。」

 

「pelvisって名前のボーンを使うよ。実際に見てみましょう」f:id:wakanya:20161218150942j:plain

「Meshを選択して、右のSkeltal Meshをダブルクリック」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219235706p:plain

 

「相棒・・・・・・!!!!」

f:id:wakanya:20161219235910p:plain

「右上のスケルトンをクリックしてみて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161220000234p:plain

「うわあいっぱいでてきた!」

 

「pelvisは、一番上のrootの下ね」f:id:wakanya:20161218150942j:plain

 

「pelvis以下がぐにゃぐにゃになると」

 

「そうよ。1PのBPのLiteral Nameにpelvisって入れといてね。」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219072752p:plain

 

「このままだと床に埋まっちゃうから、MeshからSet Collision」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219072756p:plain

「ほい」

 

「New typeをCollision Enabled...にしてね」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161219072759p:plain

 

「弾が当たったら、Ragdollイベントを呼べばいいんですね!」

f:id:wakanya:20161219072803p:plain

 

「いいわね。実行してみましょう」f:id:wakanya:20161220234500j:plain

f:id:wakanya:20161219072811g:plain

「弾が消えて見えないけどぐにゃっとした!」

 

 「よかったね」f:id:wakanya:20161218150942j:plain

 

「まだ15分くらいしか経ってないですけど、順調ですね。」

f:id:wakanya:20161219075947p:plain

 

「しかも後は2PのBPへ同じように実装すればいいだけよ」f:id:wakanya:20161218150942j:plain

 

 

「そっか!やったばかりだけど思い出せるかな…」

 

「コピペで終わるわ」f:id:wakanya:20161218150942j:plain

 

「え?」

「コピペで終わるわ」f:id:wakanya:20161218150942j:plain

 

f:id:wakanya:20161220001639p:plain

「左マウスボタンドラッグで選択してctrl + C, 2Pの方でctrl + v。持ってこれた」

 

「保存・コンパイル・実行」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161220002044g:plain

 

「2Pの被弾と死ぬ処理が一瞬で終わった…」

 

「よかったね」f:id:wakanya:20161218150942j:plain

 

【13:20】

f:id:wakanya:20161219075956p:plain

 

「40分も余りました。」

 

「UIその他に手を付けるのも大事だけど、」f:id:wakanya:20161218150942j:plain

 

「現状のブラッシュアップをしましょう」f:id:wakanya:20161218150942j:plain

 

「気になるところが4点ほどあります」

 

「言ってみて」f:id:wakanya:20161218150942j:plain

 

「①. 操作キャラがカメラに近い」

f:id:wakanya:20161220003021p:plain

「でもこれは1Pと2PのBPでビューポートのカメラを離せばいいんですよね?」

 

「そうね。すぐできそう」f:id:wakanya:20161220234500j:plain

 

「②.1Pと2Pを向かい合わせたい」

「確かに今は同じ方向にカメラが向いてるわね」f:id:wakanya:20161218150942j:plain

 

「これもどっちかのビューポートでカメラを逆向きにすれば良い?」

 

「うーん、ターゲットポイントの向きを逆にするほうが無難よ」f:id:wakanya:20161218150942j:plain

 

「それもすぐできそうですね。」

 

「③.1Pだけマウスで回転しちゃう」

 

「インプットの値を0にしちゃえばOKね」f:id:wakanya:20161220234500j:plain

 

「④.謎の3人目が居る」

f:id:wakanya:20161220003406p:plain

 

「Create Playerした時に出てきちゃうやつね」f:id:wakanya:20161218150942j:plain

 

「1PのBPを探してインデックス指定Destroyで消えるでしょう」f:id:wakanya:20161220234500j:plain

 

「言ったそばから解決していく…」

 

「それくらいかしら、サクッとやりましょう」f:id:wakanya:20161218150942j:plain

 

「はい!まずはカメラを離します!」

 

「右上の3つ並んでるのが、位置、回転、サイズを」f:id:wakanya:20161218150942j:plain

「変えるためのトグルでQ,W,Eでも切り替わる」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161220004059p:plain

「何回か調整してみていい感じのところに決めます。」

 

「カメラの位置がこんな感じになりました」

f:id:wakanya:20161220005511p:plain

 

「ほとんどトップダウン視点ね」f:id:wakanya:20161218150942j:plain

 

「2P側も同じ設定にしました」

f:id:wakanya:20161220005519p:plain

「レベル画面のTarget Pointも同じように回してみて」f:id:wakanya:20161218150942j:plain

 

 「ぐるーり180度」

f:id:wakanya:20161220005017p:plain

 

「どんな画面になったかしら」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161220005705p:plain

「全く違うゲームみたいです」

 

「前後関係がわかりやすくなったわね」f:id:wakanya:20161220234500j:plain

 

「次はインプット」

 

「TurnとLookUpの値を0にすればいいわ」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161220023541p:plain

 

 

「あとは謎の3人目!」

 

「レベルのBPを開きましょう」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161220010203p:plain

「懐かしく感じます」

 

「一番後ろで、1PのBPを探すようにしてみて」f:id:wakanya:20161218150942j:plain

 

「ええと、Get All Actorなんちゃらに」

f:id:wakanya:20161220010459p:plain

「1PのBP名は…」

f:id:wakanya:20161220010527p:plain

 

「インデックス1をGetしてDestroy Actor」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161220010705p:plain

 

「白い処理品も繋げる・・・と」

f:id:wakanya:20161220010918p:plain

 

「保存・コンパイル・どうかしら?」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161220011015p:plain

「きれいさっぱり居なくなりました」

 

「よかったね」f:id:wakanya:20161218150942j:plain

 

 

【13:30】

「既に対戦ゲームとして遊べますね」

「周りの人にプレイさせてみるといいわ」f:id:wakanya:20161218150942j:plain

 

「感想聞いてみたいですね。」

 

「その前に、リセット機能を組み込みましょう」

 

「レベルのBPに『R』で検索してインプットを作成」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161220013739p:plain

「あれ、入力って設定しなくても使えるんですね」

 

「設定したら分かりやすかったでしょ?」f:id:wakanya:20161220234500j:plain

 

「まあね」

 

「Open Levelを作成。舞台であるThirdPersonExampleMapを指定」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161220013945p:plain

f:id:wakanya:20161220013951p:plain

「これでR押したら読み込み直されるって感じですか」

 

「そうね。リセットのRよ。次はQuitのQ」f:id:wakanya:20161218150942j:plain

 

f:id:wakanya:20161220021406p:plain

「Quitなんちゃらノードがありそう」

 

f:id:wakanya:20161220021424p:plain

「あった」

 

「これで周りにやらせやすくなったわ」f:id:wakanya:20161218150942j:plain

 

「冷やかしへGo!」

 

【13:50】

「ただいま…」

 

「なにしょげてるの?」f:id:wakanya:20161220231119p:plain

 

「周りにプレイさせたところ、走りながら撃つと自滅することが判明しました」

f:id:wakanya:20161220012404g:plain

 

「バグっぽい挙動ね」f:id:wakanya:20161220231119p:plain

 

「そして、テクノブレイクwwwwって盛り上がってからかわれました…」

 

「冷やかすつもりが冷やかされたわね」f:id:wakanya:20161218150942j:plain

 

「つらい。でも既にゲームになっていることに驚かれました。」

 

「ところで止まっていたら撃っても死なないのよね?」f:id:wakanya:20161218150942j:plain

 

「はい」

 

「それはそれで、メリハリがついていいんじゃない?」f:id:wakanya:20161220234500j:plain

 

「たしかに、走り回りながら撃つ対戦は単調になりそうです」

 

「テクノブレイクは仕様ですキリッ

 

 

「14時までに軽く残作業をまとめましょう」f:id:wakanya:20161218150942j:plain

 

「ういっす」

 

「まとめてる間、一回パッケージ化してみましょう」f:id:wakanya:20161218150942j:plain

 

「アプリケーションにするんですね」

f:id:wakanya:20161220022225p:plain

f:id:wakanya:20161220022035p:plain

 

「しばらく待ってる間に、どうするか考えましょう」f:id:wakanya:20161218150942j:plain

 

 

「今のゲームをやってみて思いついたことがあるのですが」

「言ってみて」f:id:wakanya:20161218150942j:plain

 

 

「障害物のあるステージにする、と言うのはどうでしょう」

「障害物があるとどうなるの?」f:id:wakanya:20161218150942j:plain

 

 

「撃った弾が障害物に当たると止まって溜まっていくので、

 だんだん身動きが取りづらくなります」

 

「そして走りながら撃ったら自滅する、と」f:id:wakanya:20161218150942j:plain

 

「なんかオリジナルっぽくて良くないですか?」

「良いと思うわ」f:id:wakanya:20161220234500j:plain

 

 

 

「あ、パッケージ化が終了しました。」

f:id:wakanya:20161220022043p:plain

 

「????」

 

「2Pが変なところに居ます…」

「あらあら」f:id:wakanya:20161220231119p:plain

 

「ステージの下の空間?に居るように見えます」

「たまにあるのよね。エディタとアプリの挙動が一致しないこと」f:id:wakanya:20161218150942j:plain

 

 

「どど、どうしよう」

 

「ちょっとまってね。考えるわ」f:id:wakanya:20161220231119p:plain

 

 

 

(シーン…)

 

 

 

「せっかくつくったのにアプリにできないかもって思うと悲しいな・・・」

 

 

「大丈夫。考えたわ。マップに直接2PのBPを置いて」f:id:wakanya:20161218150942j:plain

 

 

「さすが先輩!!」

f:id:wakanya:20161220022417p:plain

 「向きは1Pと逆にしといてね」f:id:wakanya:20161218150942j:plain

 

「あ~、最初から出しとけばいいってことですね」

「そ。レベルのBPで2Pをスポーンしていたところを、」f:id:wakanya:20161218150942j:plain

 

「2Pを探してGetするようにすればいいわ」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161220022353p:plain

 「なるほど!!」

 

 

(再度パッケージ化)

 

「安心しました…」

f:id:wakanya:20161220022852p:plain

 

「よかったね」f:id:wakanya:20161218150942j:plain

 

「一回アプリにしといてよかった…もし最後の最後でこうなったら

 気が動転しそうだ」

 

 「パッケージ化は時間かかるから、」f:id:wakanya:20161218150942j:plain

「ゲームジャムでは昼休みやミーティングに試すといいわ」f:id:wakanya:20161218150942j:plain

 

 

「次のジャムには現場に来てくださいよ…!」

 

「しょうがないにゃあ…」f:id:wakanya:20161220225927p:plain

 

「いいよ」f:id:wakanya:20161220232655p:plain

 

【14:00】

 

今回のアドベントカレンダーはここまでとなります。

続きは未定ですが、いつかできたらいいな!

ここまでで制作した「たかし007」14:00バージョンのアプリをアップしました。

 https://www.amazon.co.jp/clouddrive/share/CeyAsFQekvF1JkrMT7TEf5zKPPbZ2GJI8rTElwMJo30?ref_=cd_ph_share_link_copy

興味のある方はぜひ遊んでみてください。

 

長々とありがとうございました。

明日は、明日はyk3さんの「シーケンサあたりで何か。」です。

f:id:wakanya:20161220230238j:plain

UE4で1日ゲームジャムたかし君【9:00~11:15】

Unreal Engine 4 (UE4) Advent Calendar 2016 http://qiita.com/advent-calendar/2016/ue4 の21日目、1つめです。

まっったくUE4を触ったことない人向けに、

1日でかんたんなゲームを作ってみようという記事です。

 

※この話はフィクションです

 

 

たかし君はゲーム会社で企画職として働いています。

明日、社内で開催される1日のゲームジャムにて、

先輩エンジニアとペアとなってUnreal Engineというツールを使うことになりました。

前日

「一日でゲームなんて作れるのだろうか…」

 

「でも、Unreal Engineは同じチームの先輩エンジニアで扱えるから大丈夫っしょ!」

 

「先輩に言われたとおり、Unreal Engineのランチャー?と最新版だけ落としておこう」

当日

しかし会場に先輩の姿は無かった…

【9:00】

 

司会「今回はUnityのチームが3チーム、Unrealが1チームですね。」

 

司会「あれ?Unreal 1人しかいないの?Unityの方に合体してもいいけど、Unrealなくなっちゃうのやだなぁ~~何とかがんばってww」

 

「えっ?えっ??先輩いないんだけど???? つんだ(^o^)

 

とりあえずノートPCの電源を入れるたかし君。

すると先輩からSkypeが。

「たかし君、おはよう~」f:id:wakanya:20161218150942j:plain

 

おはようじゃないですよ!いまどこですか!

 

「ちょっと足くじいちゃって今日行けなくなっちゃったのよね~」f:id:wakanya:20161218150942j:plain

 

 

嘘つけ絶対クリパだぞ!なんだその格好は!」

 

 「えっ??あっ」f:id:wakanya:20161218150942j:plain

 

プツン        

 

「通話切れたww」

再びコールするたかし君。

「すまないとは思っている」f:id:wakanya:20161218150947j:plain

 

「とりあえずゲームジャムどうしたらいいですか…」

「指示だすから、あなたが実装してちょうだい」f:id:wakanya:20161218150942j:plain

 

 

「俺、企画することはあってもゲーム自体作ったことないですよ!」

「なんとかなるよ。Unreal Engineは用意してあるの?」f:id:wakanya:20161218150942j:plain

 

「あ、ウッス。ランチャー?っていうところで落としてきて、

 あとは何も触ってないっす。」

f:id:wakanya:20161218180146p:plain

 

「いいね。今日のタイムスケジュールは?」f:id:wakanya:20161218150942j:plain

 

「今が9:00で10時に企画発表、開発の終了が17時で、そこから発表って感じです。」

 

みっじかww 発表準備もある、ゲーム内容を作る時間は、、」f:id:wakanya:20161218150942j:plain

 

「10:30~16時からお昼を除いてだいたい5時間弱ですかね。。」

 

「と、とりあえず整理するといいわ。ホワイトボードとかある?」f:id:wakanya:20161218150942j:plain

 

「あります。ちょっと書いてみます。」

f:id:wakanya:20161218180051j:plain

 

「有能じゃないの」f:id:wakanya:20161218150942j:plain

 

 

「えへへ。14時に中間を設けてみました」

 

「作れるものを作るしかないわね。企画や作りたいものはある?」f:id:wakanya:20161218150942j:plain

 

 

「先輩、俺最近007にハマってるんです。」

「スパイ映画のやつね。」f:id:wakanya:20161218150942j:plain

 

「特に64のゲーム!あれ友達と徹夜しながらやると最高ですよ。」

 

「たしかに面白かったわね。それに近いものを作りましょうか」f:id:wakanya:20161218150942j:plain

 

 

はい!はやく友達や先輩を○したいです!

「…。」f:id:wakanya:20161220231119p:plain

 

「時間も限られているし、テンプレートを使いまわしましょう」f:id:wakanya:20161218150942j:plain

 

 

「テンプレート?」

「ランチャーから起動してみたらわかるわ」f:id:wakanya:20161218150942j:plain

 

「ういーす」

 

「えーと、いっぱいでてきました。」

f:id:wakanya:20161218180149p:plain

「これから新規プロジェクトを作成するのだけど、」f:id:wakanya:20161218150942j:plain

よく使われるテンプレートを含めて作ることができるわ」f:id:wakanya:20161218150942j:plain

 

 

「よく使われるやつとは」

「ファーストパーソン視点、FPSとかで使われるものとか」f:id:wakanya:20161218150942j:plain

 

 

「それ使ったらもう007できるんじゃないっすか?」

「そうね。」f:id:wakanya:20161218150942j:plain

 

「へ~、サードパーソンもある!Vehicleってのは車?」

「正解。」f:id:wakanya:20161218150942j:plain

 

「なんでもできるな!うーん」

「どうしたの?ファーストパーソン視点に決定では?」f:id:wakanya:20161218150942j:plain

 

「なんとなく自分自身を視野に入れたいのでサードパーソンがいいです」

「いいでしょう。さっそく本家と違う要素を入れてきたわね」f:id:wakanya:20161218150942j:plain

 

「下の入力欄に、保存先とプロジェクト名を入力するんですね。」

 

「そうよ。」f:id:wakanya:20161218150942j:plain

 

「作成しました。」

f:id:wakanya:20161218144810p:plain

 

「上のプレイって書いてある三角形押すとプレイできるわ。」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144805p:plain

 

え?もう?またまたご冗談をポチー」

f:id:wakanya:20161218181909g:plain

 

「マジだった…」

 

「W,A,S,Dキーで前後左右移動、スペースでジャンプできるわね。」f:id:wakanya:20161218150942j:plain

 

 

「完」

「これからゲーム内容を作るのよ」f:id:wakanya:20161220231426p:plain

 

 

「満足した」

 

 

「満足したらプレイ状態をEscキーで解除してね」f:id:wakanya:20161218150942j:plain

 

「うす・・・」

「ところで対戦ゲームを作りたいのよね?」f:id:wakanya:20161218150942j:plain

 

「ええ。対人戦がいいですね。」

「ノートパソコンしか持ってきていないわね?」f:id:wakanya:20161220231119p:plain

 

 

「はい。あー…、キーボードの左側と右側を使って2人プレイができたら

 って感じです」

「ほいほい。作り方考えるから3分くらい待ってね」f:id:wakanya:20161218150942j:plain

 

 

「はい。(ノリノリじゃないか。。。なんで来なかったんだ…)」

 

3分後

「さっきの予定に合わせた実装内容を送ったから書いてちょうだい」f:id:wakanya:20161218150942j:plain

 

「ノリノリじゃないか!!!なんで来なかったんだ!!!」

 

 

f:id:wakanya:20161218180056j:plain

「オレンジの内容が5つ。なんかできそうな気がする(できるとは言っていない)」

 

「だいぶ絞ったわ」f:id:wakanya:20161218150947j:plain

 

「弾を撃つ、当たって相手が死ぬ。最低限ですね」

「そうね。ゲームにはなりそう」f:id:wakanya:20161218150942j:plain

 

「なんかマルチプレイ対応が難しそうでビクビクしているのですが」

 

「これは私も悩んだんだけど、力技で実装できるにはできる」f:id:wakanya:20161218150942j:plain

 

「おまかせします…」

 「あとは余裕があったらステージやサウンドを考える感じで」f:id:wakanya:20161218150942j:plain

 

「(そこまでは無理なのでは…)」

f:id:wakanya:20161218180059j:plain

 

【9:30】

「10時から企画発表だったわね?」 f:id:wakanya:20161218150942j:plain

 

「はい。とりあえず2人プレイの○し合いってことでゆるくスライドを作成します。」

 

「私はパーティの準備に、じゃなかった足の療養に戻るね」f:id:wakanya:20161218150942j:plain

 

「そういえば足をくじいた設定でしたっけねえ!!」

 

 |

 |

【10:30】

 

オラッ、パイセン出てこいや!!

「なによー」f:id:wakanya:20161220231119p:plain

 

「どうやって『撃つ』んじゃ!!!」

 「おちついて。そしたら『何を』、撃つかを作りましょう」f:id:wakanya:20161218150942j:plain

 

「あー、弾からですね」

 「下の方のコンテンツブラウザってところを見て」f:id:wakanya:20161218150942j:plain

 

「フォルダっぽい。ウィンドウズのアレっぽい」

f:id:wakanya:20161218144831p:plain

 

「そうね。エクスプローラと同様にゲーム内のものを見られるわ」f:id:wakanya:20161218150942j:plain

 

「ここだけなら使いこなせそう」

「コンテンツ階層に移動してちょうだい」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144831p:plain

 

「これが最上階ってこと(?)」

f:id:wakanya:20161218144822p:plain

 

「そう。実際にはContentって名前のフォルダ以下の内容よ。」f:id:wakanya:20161218150942j:plain

 

「既にたくさんある」

テンプレートとスターターキットを含めたからよ。」f:id:wakanya:20161218150947j:plain

 

「ありがとうサードパーソン」

「フォルダを作成してちょうだい。右クリックから選んで。」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144835p:plain

「フォルダだけ作ることに関しては一流になれそう」

 

「名前は今回のプロジェクトの名前にするのがいいわ」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144838p:plain

「これ作る必要あるんですか?」

 

ある!f:id:wakanya:20161220232450p:plain

 

「ヒッ」

「でも、今回はぶっちゃけ必要ないわ。」f:id:wakanya:20161218150942j:plain

 

「どっちなんすか」

他のプロジェクトと合体するときに衝突しないようにするのよ」f:id:wakanya:20161218150947j:plain

 

 

「なるほど・・・使いまわしやすくするんですね。」

「でも今回はテンプレートコンテンツに手を入れると思うからなぁ」f:id:wakanya:20161218150942j:plain

 

 

「ああ、他のプロジェクトのテンプレート内容とぶつかりそうですね」

 

「せめて新しく作るアセットなんかはその中に作りましょう」f:id:wakanya:20161218150942j:plain

 

「ウス」

「さっきのプロジェクトトップフォルダの下にまたフォルダ作って」f:id:wakanya:20161218150942j:plain

 

「名前は?」

「『Blueprints』で」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144841p:plain

でたー!名前は聞いたことあるけどよくわからないやつ~

 

「さっそくそのフォルダの中で右クリックして」f:id:wakanya:20161218150942j:plain

 

「もしや、このブループリントクラスを作成…」

f:id:wakanya:20161218144845p:plain

「そうよ。押して」f:id:wakanya:20161218150942j:plain

 

「いっぱいでてきた。もうだめだ」

f:id:wakanya:20161218144848p:plain

Actorを選択してね♡f:id:wakanya:20161218150942j:plain

 

「声色を変えてもわからんものはわからん」

 

BP_Bullertと名付けてね♡f:id:wakanya:20161220232655p:plain

「やめろ!」

f:id:wakanya:20161218144856p:plain

「このまま何もわからず操り人形と化しそう」

 

「軽く説明すると、」f:id:wakanya:20161218150942j:plain

 

「待ってました」

 

見た目、登場したときの挙動、現在の挙動を設定しますf:id:wakanya:20161218150942j:plain

 

「設定したものを、ゲーム中に使う?」

「そんな感じね。弾の見た目、弾がどう進んでいくかを設定するf:id:wakanya:20161218150942j:plain

 

 

「ふーん。名前のBulletは弾。BP_というのは?」

「接頭辞ね。ブループリントですよってこと」f:id:wakanya:20161218150942j:plain

 

「ファイル名によってコレが何なのかわかりやすくするって事なんですかね」

「そう。検索で他人に見つけやすく、自分でも忘れるし、重要」f:id:wakanya:20161218150942j:plain

 

 

「そしていよいよブループリントを書くんですね…」

「実装するうちになんとなくわかるわ。ダブルクリックで開いて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144859p:plain

「専用の画面があるんですね…(遠い目)」

 

「弾の見た目を作りましょう。コンポーネントを追加から、」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144903p:plain

 

「球を選んでちょうだい。まずはまんまる作りましょう」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144906p:plain

 

「発射されて、みんなコレに○されるんですね」

f:id:wakanya:20161218192711p:plain

 

「名前はBulletとかにして、次はこんな感じにドラッグして」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144910g:plain

「これはどういった意味が…?」

「衝突の判定をしやすくするよ。最初からついてるRootが面倒なの」f:id:wakanya:20161218150942j:plain

 

「ふぅーん。」

「じゃ、保存とコンパイルしといてね」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144913p:plain

「先生、コンパイルとは…」

「『反映』と思ってくれればいいわ。」f:id:wakanya:20161218150942j:plain

 

「はーい」

「ボタン押したら出るようにしましょう」f:id:wakanya:20161218150942j:plain

 

「楽しみ」

「上の『編集』から『プロジェクト設定』を選択して」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144917p:plain

「きっと発射ボタンの設定だ!」

「そうよ。設定しましょう。」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144923p:plain

「グワー目が」

「落ち着いて。左の領域から『インプット』を探して」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144927p:plain

「あ、あったぞ」

 

「そこから、『Action Mappings』『Axis Mappings』の三角押して」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144939p:plain

 

「開きました。お、ジャンプとか書いてある」

f:id:wakanya:20161218144934p:plain

 

「『Jump』を開いてみて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144945p:plain

 

「なるほど!スペース押したらジャンプする設定なんですね!」

f:id:wakanya:20161218144948p:plain

 

『Jump』命令が飛ぶって感じね。飛んだあとの内容は別に書くf:id:wakanya:20161218150942j:plain

 

「下の『Axis Mappings』も見てみよう」

f:id:wakanya:20161218144951p:plain

「…??」

「Wを押すと前に1.0進んで、Sで-1.0進むってことなんだけど」f:id:wakanya:20161218150942j:plain

 

前に-1進むってややこいですね!後ろに1進むことになるんですね!」

 

「では撃つアクションを追加しましょう。『Action』の方の+押して」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218144954p:plain

f:id:wakanya:20161218144957p:plain

「追加されました。」

 

「名前は自由につけられるわ。」

 

「『Shoot』にしよう」

「Noneって書いてあるところをクリックすると設定できるわ」f:id:wakanya:20161218150942j:plain

 

「とりあえずシフトキーにしたい」

 

「検索窓にshiftって入れてみて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218145000p:plain

「shiのときに出てきた。左右でわけられるのか」

 

「とりあえず左にした」

f:id:wakanya:20161218145003p:plain

「あとで2P用の設定もするけど、とりあえず弾を出しましょう」f:id:wakanya:20161218150942j:plain

 

「はやく出したい」

 

「Third Person BP > Blueprintsに移動してちょうだい」f:id:wakanya:20161218150942j:plain

 

「左側の段アイコンをクリックするとツリー構造で見れるよ」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218202431p:plain

「おー、ツリーで見れるのはいいな!」

 

「ThirdPersonCharactorをダブルクリックして開いてみて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218202435p:plain

「こいつがさっき操作したキャラクターってことなんですね」

 

 「ってぐわあああ」

f:id:wakanya:20161218202439p:plain

 

「全体は大きくて威圧感あるけど一つ一つは難しくないの」f:id:wakanya:20161218150942j:plain

 

「ほんとぉ?」

「Jumpのところをマウスホイールや右クリックで拡大してみて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218204306p:plain

「インプット…Jump…」

 

「どう?」f:id:wakanya:20161218150942j:plain

 

「設定のところでJump設定してあったのが左の四角で、

 Jumpボタン押したら右のジャンプの四角、離したらジャンプをやめる右の四角に

 処理が流れるってことか!」

 

「察しが良すぎて気持ち悪いわ。減点」f:id:wakanya:20161218150942j:plain

 

「えっ」

「その通りで、設定したアクションに対し青い処理が続いている」f:id:wakanya:20161218150942j:plain

 

「自分で設定した『Shoot』ノードを追加してみましょう」f:id:wakanya:20161218150942j:plain

 

「やったぜ」

なにもないところで右クリックしてね♡f:id:wakanya:20161218150942j:plain

 

「パソコン教室に通っている気分だ…」

f:id:wakanya:20161218204345p:plain

「また選ぶ感じの画面が出てきました」

 

shootで検索してね♡f:id:wakanya:20161220232655p:plain

f:id:wakanya:20161218204354p:plain

「おおっ選択肢に出るようになっている。(スルーしよう…)」

 

f:id:wakanya:20161218204404p:plain

「選択すると『Jump』と同じ感じのが出てきました」

 

「『Shoot』の対応ボタンを押したり離したりしたら呼ばれるわ」f:id:wakanya:20161218150942j:plain

 

「シフト押されたら呼ばれる、か。押された後の実装はその後に続けて書くんですね」

 

「ええ。そのまえに弾をどこから出すのか決めないといけない」f:id:wakanya:20161218150942j:plain

 

「魔法はケツからですね」

「ビューポートを開いてちょうだい」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218205902p:plain

 

「おおっ、相棒!久しぶりだな」

f:id:wakanya:20161218205920p:plain

 

コンポーネントのところでこのBPの要素が見れるわね」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218205940p:plain

「さっき弾を作ったときと同じ感じで、カメラまでついてる」

 

「BPはブループリントの略…か」

 

「実際にこのカメラからの視点でゲームしているの」f:id:wakanya:20161218150942j:plain

 

「そういえば、この子武器をもってないですね」

「弾をどこから発射するかという問題が出てきたわね」f:id:wakanya:20161220231119p:plain

 

「目からビームか、股間しか思い浮かびませんでした」

「相手も同じ人なら目より股間から発射したほうが当てやすそうね」f:id:wakanya:20161218150942j:plain

 

やったぜ股間から出すぜ!

コンポーネント追加から、Sceneを追加してちょうだい」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218210117p:plain

「股間大活躍シーン」

「名前は発射するっぽい名前にしてね」f:id:wakanya:20161218150942j:plain

 

「P、、『Shooter』にしました…」

f:id:wakanya:20161218210331p:plain

 

Shooterの矢印をいじって発射口の位置を調整してね♡f:id:wakanya:20161220232655p:plain

 

f:id:wakanya:20161218210621g:plain

「・・・・・。」

 

「イベントグラフの方へ戻ってちょうだい」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218210827p:plain

 

「ShootイベントのPressedの三角をドラッグドロップして」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218211107g:plain

 

「えーと、また選ぶ感じですね」

 

「spawnで検索して、『クラスからアクタ~~』を選択」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218211308p:plain

「スポーンは産まれるとかって意味ですね。ゲームやってると時々聞きます」

 

FPSなんかだと倒されたらどこかにリスポーンするとか言うわね」f:id:wakanya:20161218150942j:plain

 

「クラスを選択を押して」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218211920p:plain

 

「スポーンする弾を選択するんですね!」

 

「そう。Bulletで出てくるはず」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218212020p:plain

 

「で、どこにスポーンするかを決めていくわ。」f:id:wakanya:20161218150942j:plain

 

「まだ設定することがあるんですね」

 

「Shooterの参照をゲットするわ」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218212242g:plain

 

日本語でおk

Shooterから出したいからShooterちゃんをボロンさせてね♡f:id:wakanya:20161220233655p:plain

 

「なんとなくは、わかる」

「Shooterの○から引っ張って検索して」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218212532p:plain

「もしかして、これから引っ張って検索しての繰り返しになる?」

 

「なる!だから言い方もだんだん省略的になるから覚えてね」f:id:wakanya:20161218150942j:plain

 

「はーい」

「『get trans』で検索してワールド座標を使う」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218212811p:plain

「この『Get World Transform』ってやつですね」

 

「Transformには位置、向き、大きさの情報が入っているわ」f:id:wakanya:20161218150942j:plain

 

 

「なるほどShooterの…右曲がりとかも含まれているんですね」

「何を言っているのかしら」f:id:wakanya:20161220231119p:plain

 

「乗ってあげたのに!」

「『Get~~』ノードのReturnからSpawnノードにつなげて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218213256p:plain

「色々揃った気がする」

「ええ、保存とコンパイルしてプレイしてみましょう」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218213831g:plain

 

「出てる…自分の出したものに押されて後ずさっている…」

 

いっぱいでたね♡f:id:wakanya:20161218150942j:plain

 

「出たものを進ませたいです」

 

「そしたら、弾のBPへ進む処理を入れましょう」f:id:wakanya:20161218150942j:plain

 

「BP_Bulletを開きました」

f:id:wakanya:20161218192711p:plain

 

「イベントグラフへ移動して、変数を追加します」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218214759p:plain

「変数?」

 

「それぞれの弾が持つパラメータって感じのものね」f:id:wakanya:20161218150942j:plain

 

「『進む向き』をもたせたいから、名前はDirectionとかにして」f:id:wakanya:20161218150942j:plain

 

「はーい」

 

「右の方の詳細で、変数の型をVectorにして」

f:id:wakanya:20161218215031p:plain

「ああ、3次元の向きを持ったってことですね。」

「値だけね。反映はこれから。編集可能にチェックしといて。」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218215158p:plain

 

「そして反映?」

 

「ええ。イベントTickノードが見えるかしら」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218215753p:plain

「みえます。」

 

「これが更新のたびに呼ばれるノード」f:id:wakanya:20161218150942j:plain

 

「毎フレームの処理とかそういうやつですか」

 

「そんな感じ。なにもないところで『Get Actor Location』作って」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218215739p:plain

 

「これは?」

f:id:wakanya:20161218215833p:plain

自身の位置を取得しているわ」f:id:wakanya:20161218150942j:plain

 

「自分探しをしないといけないんですね」

 

「次に弾が飛ぶ速度。変数に『Speed』を追加して。型はfloatね」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218220112p:plain

f:id:wakanya:20161218220118p:plain

「だんだんペースが早くなってきている…」

 

「保存とコンパイルしたら、デフォルト値を100くらいにして」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218220421p:plain

「速度変えたいときは、ここをいじればいいんだな」

 

「あれ?向きのデフォルトは?」

「それはあとで、スポーンさせたBP側から前方を与えるわ。」f:id:wakanya:20161218150942j:plain

 

「そっか一定じゃないもんなぁ」

 

「DirectionとSpeedの参照をとってきて」f:id:wakanya:20161218150942j:plain

 

「? ゲットとセットの選択肢が出てきました」

f:id:wakanya:20161218220805p:plain

 

「セットはその変数の値を変えるノードが出るわ。今回はゲットで」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218220907p:plain

「ふい~カラフルですね」

 

「Directionから伸ばして、検索に『*』を入れて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218221058p:plain

「『*』?掛け算?」

「そう。『向き』×『スピード』で位置の変化量を出すわ」f:id:wakanya:20161218150942j:plain

 

「理系っぽい」

 

vector*floatの演算を選択したら、Speedと結びつけて」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218221416p:plain

f:id:wakanya:20161218221421p:plain

「掛け算するのも一苦労だ」

「自分自身と掛け算の結果を足し算するの。できる?」f:id:wakanya:20161218150942j:plain

 

「検索のときに『+』をつかえば、できそう!」

f:id:wakanya:20161218221708p:plain

f:id:wakanya:20161218221718p:plain

f:id:wakanya:20161218221726p:plain

 

「なかなかやるじゃない」f:id:wakanya:20161218150942j:plain

 

「先輩、俺プログラマいけるかもしれない」

 

「才能あるかもね。次は、『Set Actor Location』」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218221942p:plain

f:id:wakanya:20161218222253p:plain

「自分の位置を変えるってことですか」

「そうよ。自分の位置と変化量を加えたところに移動するの」f:id:wakanya:20161218150942j:plain

 

「そして、いつ位置を変えるか?」

「イベントTickの白い矢印から、Setノードにつなげるのよ」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218222246p:plain

 

「おおおおわかってきた気がする。更新のたびに変化量分移動するんですね」

 

「次は向きね。保存とコンパイルして、相棒のBPに行って」f:id:wakanya:20161218150942j:plain

 

「うっす。Third Person Charactor開きました。Shootのところ?」

f:id:wakanya:20161218222624p:plain

 

「そこでいいわ。Return ValueからSet Directionを選択」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218222922p:plain

f:id:wakanya:20161218222931p:plain

「ええと、向きは正面に発射したいです」

 


「そしたらShooterから、『Get World Rotation』」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218223214p:plain

「これは?」

 

「ワールド座標での回転具合ね」f:id:wakanya:20161218150947j:plain

「前方を取得するには、そこから『Get Forward Vector』」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218223427p:plain

「やりたいことはわかっててもググったり知ってないと作り方わからない感じだなぁ」

 

「これをセットに使うんですね。」

 

「ええ。Spawnからの白いノードもつなげてね。」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218223751p:plain

「この白いのが続いてないと流れてこないんですか?」

 

「そうよ。他の値がいくら入ってても繋がってないと流れてこない」f:id:wakanya:20161218150942j:plain

 

 「もしかしてもう動きます?」

「動くわ。保存とコンパイルね。」f:id:wakanya:20161218150942j:plain

f:id:wakanya:20161218224834g:plain

おほおおお~出てりゅうううう

 

よかったね♡f:id:wakanya:20161218150942j:plain

 

【11:15】

「先輩、予定では12時までの45分でマルチプレイ化なんすけど…」

f:id:wakanya:20161218230141p:plain

 

「そうね、これからBPの説明の仕方を省略的にいくわよ」f:id:wakanya:20161218150947j:plain

 

「まじか~がんばるぞい」

 

次の記事に続きます。

wakanya.hatenablog.com