読者です 読者をやめる 読者になる 読者になる

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