main() blog

プログラムやゲーム、旅、愛する家族について綴っていきます。

CoderDojo千葉県合同企画『幕張プレゼンテーションDay』に参加しました!

今回のCoderDojoは千葉県合同企画『幕張プレゼンテーションDay』として千葉県にある各CoderDojoが一堂に会するして各DojoのNinjaたちが今までに作成した作品を発表しようというイベントが行われました。

 

幕張にある『幕張BASE☓LIBRARY』というカフェなどが併設されたイベント会場で行われました。

 

www.evensi.jp

 

現在、千葉県内はCoderDojoは9市、14箇所のDojoがあります。

千葉、柏、流山、若葉、柏の葉、浦安、野田、市川、市川真間、木更津、船橋、沼南町、松戸、南柏でCoderDojoの活動が行われています。

これは全国的に見ても他県に比べてDojoの数が多く、かなり活発な活動が行われている様です。

 

CoderDojoとは?

 

coderdojo.jp

 

CoderDojoとはアイルランドから始まったムーブメントです。

ボランティアと小中学生が一緒になり、プログラミングに励む「道場」です。

メンターというボランティアの人がいますが、基本的には手取り足取りは教えてくれません。

自分で課題を見つけて分からないことがあればメンターに聞く、ただしメンターも全ての教えるのではなく、一緒に考えるというポリシーで行われています。

 

午前の部

 

今回は子供の人数だけでも40人位は集まっていたようです。

午前中はいつもと同じでプログラミングが行われました。

メインのホールは経験者が集まって、別室は初心者が集まってScratchを使用したプログラム学習を行います。

 

※メインホールの様子

 

f:id:takezoh_1127:20171214225549j:image

 

※初心者ルームの様子

 

f:id:takezoh_1127:20171214225621j:image

 

午後の部

午後はNinjaたちの発表会。

 

<小2以下の部>

作品名「動く四角」

 

f:id:takezoh_1127:20171214231409j:image

 

パタパタアニメで動く四角とボタンを押すとランダムで風船や雪の絵が画面を埋めつく作品でした。

 

作品名「たからさがし」

 

f:id:takezoh_1127:20171214232444j:image 

ねこが冒険をするゲーム。

画面の端にいくと次の面に進んでいく。

蛇を超えて、船にのって海を渡り、ダンジョンに潜って、急に実写の背景に変わったり砂漠を越えたり、空飛ぶじゅうたんに乗ったり、バスケでゴールを決めたりととにかく全部で20面くらいはある超大作となっていました。

途中の船は自分が右に動いて船の先端に行くと船自体が前に進むといった動きをしていたりして小学1年生にしてはかなりがんばって作った作品になっていました。

 

作品名「野外ダンス(リズムゲーム

 

f:id:takezoh_1127:20171214231513j:image

 

画面下の白いラインのところに上下左右の矢印の絵が流れてきて、紫の範囲でタイミング良く押すとスコアが加算されていく。

ちゃんとリズムゲームとしての機能が実装されていることに驚きました。

これも小学2年の作品です。 

 

<3年生>

発表者が熱を出してしまったらしく、急遽ピンチヒッターで発表することに。

 

作品名「アドベントカレンダー屋『ちばる』」

 

f:id:takezoh_1127:20171214231620j:image

 

1番から4番までの商品が並んでいて買った値段に応じてネコがしゃべるというもの。

1000円、1000円?、50000円、100000円の商品から選択する。

 

1番の1000円を購入。

ねこ:「うーん、帰ろう...」

良くないセリフらしい...

 

2番の1000円(多分10000円)を購入。

ねこ:「まぁ、帰ろう...」

少しだけ良かったらしい...

 

3番の50000円を購入。

ねこ:「これか、帰ろう」

それなりに良かったらしい...

 

4番の100000円を購入。

ねこ:「いぇい、帰ろう」

かなり良かったらしい...

 

 どれを選んでもなぜ「帰る」のかはナゾだった...

 

<4年生>

 

作品名「スクラッチニュース」

 

f:id:takezoh_1127:20171214231554j:image

 

いきなりロケットの発射シーンから始まって、なぜかムーンウォークをする人などをニュース形式で伝えていく。

天気予報が流れるのが速い!

 

 

作品名「にんじんめざして、うさぎのめいろ」

 

f:id:takezoh_1127:20171214231649j:image

 

うさぎがエサのにんじんを求めて迷路を進むゲーム。

折り紙のウサギが主人公。

全部で5面の予定とのコトだがいまは2面までしかできていないとのコトです。

 

メンター(指導者)発表

 

MineCraftをScratchから制御する」

 

ScratchXというスクラッチを改造できるシステムを利用してMinecraftのシステムに繋ぎこんで操作してしまおうというプレゼン。

  

f:id:takezoh_1127:20171219020324j:image

 

拡張されたScratchで専用のコマンドを用意してMinecraftサーバーにメッセージを送ることでMinecraftを操作できるようにしているとのコトです。 

 

f:id:takezoh_1127:20171219020342j:image

 

Wi-Fiマイコンを使用したラジコンタンク」

 

ESP-WROOM-02というWi-Fiに接続可能なマイコンを使ってラジコンタンクを作ったというプレゼン。

 

f:id:takezoh_1127:20171219015829j:image

 

タンクのほうがWi-Fiのアクセスポイントになってスマホでアクセスすることでコントロールすることができる。

スマホ側にはプログラムの実装は無く、スマホのブラウザから接続するとコントローラーの画面が表示されてラジコンを操作することができる。 

 

システム構成は以下の通り。

 

タンク側

  • Wi-Fi AP
  • HTTPサーバー
  • WebSocketサーバー

 

スマホ

  • Wi-Fi APにアクセス
  • HTTPアクセス
  • タップ情報をWebSocketで送信

 

 f:id:takezoh_1127:20171219015856j:image

 

ということで実演。

 

f:id:takezoh_1127:20171219015917j:image

 

f:id:takezoh_1127:20171219015936j:image

 

 

「Scratchスカウター『コード忍者の里』」

 

Scratchプログラムの戦闘力を測定するというプレゼンです。

ループや分岐を計測してどれだけの複雑度やどういうプログラムが書かれているかを解析するプログラムとのことです。

 

f:id:takezoh_1127:20171218182014j:image

 

何に使うの?

1.他人のプログラムがどのように作れているかを知ることが出来る。

2.自分の修行の成果を見ることができる。

3.どのような教材を使えばいいかわかる。

4.大人のようなプログラムを作るにはどうしたらよいか知ることができる。

5.(メンターにとってニンジャの作ったプログラムの概要が一覧で把握できる)

 

これで大人と子供のプログラムの違いもわかるとのことです。

 

f:id:takezoh_1127:20171218182036j:image

 

手裏剣集め(サンプル集)を使って作っていくと若いニンジャは力を求めて暗黒面に陥ってしまうのでやり方を考え直しているところとのことです。

 

Scratch開発者のレズニックさんの言葉で「大切なこと」とは以下のことです。

創造性:新しく、楽しいものをつくること。

協力:みんなで力を合わせ、助け合いながら作ること。

論理的思考力:でも、物事を正しく見て、考えることも必要。

 

なかなか興味深いプレゼンでした。

 

「つどえ!ブレーメンのおんがくたい!」

 

f:id:takezoh_1127:20171219020016j:image

 

Unityで作られたゲーム。

特定のポイントにロバを移動させると次に犬が出てきて、先程のロバの上に乗っかると次にネコが出てきて、ニワトリが出てきて乗っかるとゲームクリア。

 

f:id:takezoh_1127:20171219020043j:image

 

<5年生>

 

作品名「Scratch空手」

 

f:id:takezoh_1127:20171219020102j:image 

 

二人で対戦する空手ゲーム。

 

 

作品名「マルチシューティングゲーム

 

f:id:takezoh_1127:20171214233131j:image

 

二人のプレイヤーで遊ぶ対戦シューティングゲーム

上下にいるプレイヤーを操作して弾を打ち合って戦うゲームです。

 

作品名「ねずみからにげろ」

 

f:id:takezoh_1127:20171214233224j:image

 

動き回るネズミにぶつからないように100秒逃げ切るゲーム。

ネズミにぶつかるとHPが減少していき、0になるとゲームオーバー。

 

 

<6年生>

作品名「猫のダンジョン」

 

f:id:takezoh_1127:20171214233321j:image

 

オープニングシーンも実装されている。

スタートするとドラクエ風の街の絵が。

とっても物悲しいBGMが流れはじめて、街にNPCが一人だけ立っている。

話しかけると外に出られるようになって、ダンジョンに移動します。

ダンジョンを進むと奥にボスがいてボスとのバトル。

ボス戦はなぜか弾を打ち合うゲームになっていました。

 

 

作品名「シューティングスター」

 

f:id:takezoh_1127:20171214231822j:image

 

横スクロールのシューティングゲーム

最初にステージ選択画面があるがまだ1ステージしか出来ていないとのこと。

敵を倒すとアイテムが出て取るとビームの連射間隔が速くなったり、太くなったりします。

ボスまで行くと上下から隙間の壁が降りてきて隙間の安全地帯で回避しながらボスを倒すという仕組みになっていました。

 

 

作品名「豆腐が挑む冒険」

 

f:id:takezoh_1127:20171214231838j:image

 

いわゆるスーパーマリオのようなプラットフォームゲーム

「なんか見たことあるよね?」

「マリオみたい!」

「今、マリオって言った?マリオじゃないよね?」

途中、?マークのボックスのようなもの出てきて会場も爆笑に包まれていました。

バグがあったみたいで途中で進めなくなってしまったらしく

「チート機能で進めます」

「スペースキー押すと一撃で殺せるようになります」

といって進めていました。

チート機能で会場も盛り上がっていましたが、これってゲーム開発で行われるデバッグ機能を知らず知らずのうちに実装していることになるんですよね。

そういうところに気がついて効率よく確認できる環境を整えるという考えがとても重要です。

 

CoderDojo柏の活動

CoderDojo柏の活動はかなり盛んの様です。

柏市内で4箇所のDojoがあり、各Dojoの運営も学生が主体で行っているそうです。

また、柏市は2017年から市内の小学校でプログラミングの授業を開始しており、CoderDojo柏と協力しながら取り組んでいる活動を行っているそうです。

 

f:id:takezoh_1127:20171214231900j:image

 

 f:id:takezoh_1127:20171214231918j:image

 

 

最後に

プレゼンというはピアノの発表会などとは違って自分で考えて作ったプログラムを自分の言葉で発表していかなければならないので、こういう場でプレゼンするという体験は子どもたちにとっても貴重な体験となったと思います。

というかみんな堂々とプレゼンしていることに驚きました。

他の地域のCoderDojoには足を運んだことがなかったので活動内容を知ることが出来てよかったです。

 

 

 

www.main-function.com

 

 

 

【おでかけ】『ふゆいち2017』でリース作りを体験!

今年も『ふゆいち』に行って来ました!

 

 f:id:takezoh_1127:20171218124012j:image

 

ふゆいちとは?

 

トミオという会社が主催の手作り雑貨や花のイベントです。

 

maminkaというモデルハウスと雑貨屋をやっているお店がイベントの会場になっています。

 

小さな雑貨屋たち – Rodina maminka shiro Dily

 

maminka(マミンカ)の家 | 千葉の注文住宅・リフォームならトミオ

 

 

一階はmaminkaが扱っている洋服や雑貨、キッチン用品、家具などが販売されています。

二階の部屋が手作り雑貨を販売しているイベントスペースになっています。

 

 

futsuyuichi.blogspot.jp

 

 

ママがお気に入りの花屋さん、雑貨屋さんが出店するイベントで毎回来ています。

 

 

リース作りのワークショップ

 

今回は日々花さんとpetit* gardenさんのコラボでリース作りのワークショップを体験してきました。 

 

日々花さんのリースをベースにpetit* gardenさんの小物を組み合わせて可愛いリース作りに挑戦です。

 

ママと上のお姉ちゃんが挑戦です。

 

 f:id:takezoh_1127:20171218124042j:image

 

こちらが出来上がったリースです。

 

f:id:takezoh_1127:20171218124101j:image 

 

f:id:takezoh_1127:20171218124134j:image

 

f:id:takezoh_1127:20171218124155j:image

 

イベントの様子

 

f:id:takezoh_1127:20171218124217j:image

 

f:id:takezoh_1127:20171218124247j:image

 

店内の様子

今回は日々花さんのしめ縄の展示もありました。

 

f:id:takezoh_1127:20171218124425j:image

 

 

他にも雑貨やキッチン用品なども販売しています。

 

f:id:takezoh_1127:20171218124310j:image 

 

f:id:takezoh_1127:20171218124434j:image

 

気になる食器とかもあるので次あたり行く機会があれば購入を検討してみようかな。

 

 

 

 

www.main-function.com

 

 

www.main-function.com

 

 

www.main-function.com

 

 

www.main-function.com

 

 

 

 

【子育て】「七五三」はやはり特別なお祝いだと思う

こんにちは。

タケゾーです。 

 

先日、下の子が今年3歳になったので七五三のお祝いをしました。

 

f:id:takezoh_1127:20171130205955j:image

 

七五三は子供の成長を祝うイベントで人生で何度も無いイベントだ。

うちも写真スタジオでの撮影の為に半年も前から予約するほどの熱の入れようだ。

 

当日も朝からてんやわんやの大騒ぎで、子供もスタジオ入った途端機嫌を損ねて

「きものイヤ!」

とか言い出す始末。

なんとかなだめて着付けしてもらったが、終始舌唇を噛み締めながら泣くを我慢しているようだった。

でも着物に着替えて出てくると本人も嬉しやら恥ずかしいやらで照れながらも笑顔になっていた。

着物姿を見るとホントかわいいと親バカぶりを発揮してしてビデオを取りまくったりするものだ。

 

着物も長く着るのが子供にとっては耐えられないことなのか、写真撮影が終わって神社に参りに行く頃にはまたもやゴネ始めたりするから大変だ。

 

なんとか神社も終わり家族みんなどっと疲れて一日が終わる。

 

どこの家も多分こんな感じだろう。

 

七五三自体は形骸化してきて着物やら写真撮影やら単なるイベントになって来てしまっている。

子供の成長を祝うのだから楽しいイベントで良い。

 

 

子供成長は素直に喜ばしい限りだが、今回はそれだけではない特別な思いがある。

 

本来の七五三のお祝いに込められた思いというのは昔は子供の死亡率が高かったので子供の無事や成長を祝う為に始まったとされている。

そうなのだ、昔は普通に成長することが当たり前ではなかったのだ。

 

 

そしてうちの子の場合。 

下の子は早産で予定よりも一ヶ月も早く生まれてしまった。

妻が妊娠高血圧症候群妊娠中毒症)で予定日より1ヶ月半前から入院することになってしまった。

経過を見ていたが10日ほど経っても血圧は下がらず、このまま長引けば母子ともに良くない状態との判断で帝王切開による早期出産となった。

 

手術は2時間程で終了。

 

手術室から出てきたのは保育器に入った状態の我が子。

1700gの小さな命。

ケース越しにか見ることができず、ほんの少しだけの対面でそのままNICU(新生児集中治療管理室)すぐに治療が始まるとのこと。

 

生まれた姿を見て嬉しいのはもちろんであったが、抱っこもできずそのままNICUに運ばれていく姿を見て思わず泣いてしまった。

 

面会が出来たのは次の日になってからだ。

そこで目にした姿は小さい体に管や心電などを計測するためのセンサなどが貼り付けられた状態の子供の姿だった。

 

f:id:takezoh_1127:20171130210233j:image

 

低体重で生まれたので24時間監視の元で何かあった場合に高度医療が受けられる状態にあるのだ。

 

この痛々しい姿を見て病室を出た後で泣いてしまった。

 

初めて抱っこができたのはその次の日になってからだ。

面会時間は決まっているので最初の数日は毎日病院に行った。

 

f:id:takezoh_1127:20171130210342j:image

 

妻の退院後は母乳を定期的に届ける必要があるので2、3日毎に面会しに行った。

 

そして出産から3週間程していよいよ退院。

上の子と病院のホールで待っていると向こうから妻とNICUの先生と看護師さんが赤ちゃんを連れてやってきた。

お姉ちゃんは初めて見る妹に少し戸惑いながらも嬉しそうな表情を浮かべている。

 

f:id:takezoh_1127:20171130210419j:image

 

無事に元気な姿を観ることが出来てNICUの先生方には本当に感謝の気持ちでいっぱいだ。

 

 

 

そんな子供ももう3歳を迎えた。

今では元気に飛び回ったり、虫に興味を持ったり、怒られても1日中テレビ観てたり、姉妹ゲンカしたり、でも仲良く遊んだり、笑ったり、泣いたり、怒ったり...

 

日々の忙しい子育てで忘れてしまっているが、こうして元気でいることがあたり前の幸せだということを改めて実感させられた。

 

本当に元気に育ってくれてありがとう。

 

【映画】『打ち上げ花火、下から見るか 横から見るか?』を観てきたけど...

こんにちは。

タケゾーです。 

 

今更ですが映画『打ち上げ花火、下から見るか 横から見るか?』を観てきました。

 

uchiagehanabi.jp

 

プロジェクトが忙しくなかなか観にいくことができないでいましたが、ようやく観にいくことができました。

上映回数も1日1回とそろそろ入れ替えになりそうで今観に行っておかないと劇場じゃ観られない!と思い平日の夜の回でしたがそれでも5人くらいは観に来ていました。

 

上映前は色々と期待していたのですが、評判については薄っすらと方々から聞こえてきたりしていましたが、それでも「岩井好き」なので観にいくことにしました。

 

で、映画を観た率直な感想としては

「原作好きからしたらとても残念だった」

としか言いようがない。

 

多分、”原作好き過ぎフィルター”でしか観ることが出来なかったためだろう。

 

設定は多少違えど序盤は一応原作に準えた構成になっていて、最初の”if”までは(と言っても原作は最初のifしかないのだが)原作とのズレを補完しつつもなんとか観る事ができた。

 

ところがオリジナルエピソードになってからが「?」なのだ。

なんか不思議な玉(もしも玉?フィラメントが”if”になってるし...)投げつけてタイムリープしてるし、なんか不思議な世界にいっちゃうし、なんか突然歌い出すし、原作とは違うだろうなとは思っていたけど正直この展開にはついていけなかった。 

 

ifの世界は望んで作られた世界なんだと思うけど妄想ファンタジーな演出には違和感を覚える。

妄想の世界から戻ってきてもなんでまた妄想の世界で繰り返すのかがよく分からない。

ん?結局妄想世界から戻った時はどこに戻ったんだ?

最期にデカイのがはじけた後の破片で見せられたのは色々な”if”な世界のハズだけど、どれも妄想もしくは選ばれなかった選択肢なのか?

そうすると最期に手にした破片が選んだ”if”だったのか?

最期に典道が学校に来てなかったのは?

原作と違って本当にナズナの元に行ってしまったのか?

でも中学生じゃやっぱり無理なのでは?

もしも玉とお父さんとかのエピソードは別に語らなくて良かったのでは? 

 

他にもいろいろあったがとにかく残念というか原作とのギャップの違和感で純粋に楽しむことが出来なかった。

 

まぁ、でも仕方がないことだ。

原作を超えることはなかなか難しいだろうし、超えられても困る。

原作のままのリメイクじゃ原作観れば済むことなのでリメイクする意味がないし、そもそも原作はドラマ枠で1時間なのに対してこっちは1時間半の映画にしなければならない。

原作を知らない人が楽しめる作品となるとやはり違った切り口で再構成する必要が出てくる。

であれば序盤の原作を準えるところもむしろもっと壊して別の作品にした方が良かったのでは?とも思えてくる。

この監督の作品が好きな人が観たらもしかしたら違う意見や楽しみ方があるのかもしれない。 

 

 

原作は(というか岩井作品は)なんでもない日常をうまく切り取って見せているところが実に面白いのだ。

「花火を横から見たら丸いのか?平べったいのか?」と言うどうでもよい話があって、ナズナは親の離婚で夏休みが終わったら引越ししなければならない、反抗したところで現実は変えられないの分かっているからせめてなにか最後にという思いで行動する。

男の子たちは能天気なもので女の子に誘われても遊びを取ってしまう。

だけどちょっとだけ背伸びもしたくなる。

そんな思春期の入り口をうまく描いているのだ。

 

ナズナの表情はあどけなさが残る顔、現状どうすることもできない苛立ち、憂いを帯びた表情、決意した顔、そして大人の顔を垣間見せる表情。

「16歳に見える?」

「次会えるの楽しみだね」

の時の表情は本当に素晴らしい。

思い出しただけも鳥肌がたつ。

実年齢とのギャップはアニメでは絵描ききれないところなのか?

 

今度久しぶりに原作を観てみよう... 

 

 

 

www.main-function.com

 

 

 

【おでかけ】タンジョウファーム 秋の収穫祭に行ってきました!

こんにちは。

タケゾーです。

 

 千葉市花見川区にあるタンジョウファームで行われた「秋の収穫祭」というイベントに行ってきました。

 

f:id:takezoh_1127:20171127090659j:image

 

妻が好きな手作り雑貨の作家さんや花屋さんが出店するとのことでこのイベントを知りました。

 

タンジョウファームは農場や酪農で季節な野菜など、自家栽培した食材を使用した料理を提供するレストランもあるようです。

 

www.tanjofarm.net

 

敷地内の一軒家を改装したレストランとなっており、半分は和室がそのまま残っており、今回は休憩場所として解放されていました。

 

 そのレストランの庭がイベントの広場となっていて手作り雑貨や花屋、カフェやパン屋、野菜市場などお店が出ていました。

 

出店の一覧です。

 

f:id:takezoh_1127:20171127090758j:image 

  • 麦香(パン)
  • カナパン(パン)
  • カシ○イシ(焼き菓子)
  • モバイルカフェ福笑屋(自家焙煎コーヒー)
  • いちにのさん(洋服・おめかし用品)+こさえる
  • 和の花 日々花(花とこもの)
  • petit*garden

 

11時過ぎにはもうたくさんの人。

 

f:id:takezoh_1127:20171127092733j:image

 

f:id:takezoh_1127:20171127122005j:image

 

f:id:takezoh_1127:20171127122026j:image

 

f:id:takezoh_1127:20171127122057j:image

 

妻はお目当ての雑貨屋さんと花屋さんを見ているので、パパは子供たちとクラムチャウダーとマフィンを買って和室でお食事。

 

その後は野菜の詰め放題でサツマイモ、玉ねぎなどを大量に袋に詰めていました。

 

f:id:takezoh_1127:20171127091108j:image

 

最後に美味しいコーヒーを頂きました。

 

f:id:takezoh_1127:20171127122126j:image 

 

この日は少し風が強く、屋外のイベントとしてはちょっと大変でした。

今回はレストランで食事はしませんでしたが、また別の機会があったら食べてみたいと思います。

 

 

 

【UE4】UCharacterMovementComponentのAPIリファレンスを翻訳してみる

はじめに

バージョンは4.17.0。

UCharacterMovementComponentはUE4でキャラクタを動かすために使用されるコンポーネント

このコンポーネントを使って最後まで開発しているのだろうか?
それとも独自で作るのだろうか?
ここに関しては方々から色々な声が聞こえてくる。

このコンポーネントだけでできる範囲のものであれば当然これを使っていけば良い。
そうじゃない場合は機能拡張を行うか、新規に自前で作る必要が出てくる。

で、結局どっちが良いのか?
迷うところではある。

とは言っても最初に何かしたら動かす場合にはお世話になるし、
拡張や、使わないしてもまずはできることできないことをちゃんと把握しておく必要がある。

しゃがむとか泳ぐとかあるけど、スプリント(ボタン押しで速く走る)のようなことをしたい場合は独自の対応が必要なる。

  • はじめに
  • UE4のドキュメントを見てみる
  • API Reference
  • Componentのプロパティ
  • 関数
  • 参考
続きを読む

【UE4】GameMode、GameState、PlayerState、PlayerControllerの関連を確認してみる

GameModeとGameStateとPlayerStateの関連について再度確認してみる。

毎回、
「GameModeはサーバーだけにしかなくて、GameStateは各端末毎に生成されるんだっけ?」
「PlayerStateは?PlayerControllerは?」
とその都度確認しているので再度確認してみる。

各クラスの概要

UE4のオフィシャルドキュメント。

簡単にまとめると以下の通り。

GameMode

  • サーバーにしか存在しない

GameState

  • 各マシン毎に存在
  • PlayerArrayという変数でプレイヤ分のPlayerStateを保持
  • Ownerは持たない(GetOwner()はnullptr)

PlayerState

  • 全てのマシン上で、全てのプレイヤーに対してPlayerStateが存在
  • OwnerはPlayerController(GetOwner()でPlayerControllerを返す)

PlayerController

  • 操作しているPawnを所持(GetControlledPawn()で操作しているPawnが取得できる)
  • Ownerは持たない(GetOwner()はnullptr)

Playerが操作しているPawn

  • SpawnされてPossessされるとPlayerControllerに所有される

シングルプレイ、マルチプレイでの構成について確認してみる。

シングルプレイの場合

GameMode GameStateの関連図.png

マルチプレイの場合

Server

GameMode GameStateの関連図(Server).png

Client1

GameMode GameStateの関連図(Client1).png

Client2

GameMode GameStateの関連図(Client2).png

確認

パーシスタントレベルにBPを組んでログで確認。
※BPのスクリーンショットは割愛

シングルプレイ

LogBlueprintUserMessages: [Test_Map_C_1] found GameMode  : MyGameMode
LogBlueprintUserMessages: [Test_Map_C_1]   found GameState : MyGameState
LogBlueprintUserMessages: [Test_Map_C_1]     GameState : not found Owner
LogBlueprintUserMessages: [Test_Map_C_1]     found PlayerState : MyPlayerState
LogBlueprintUserMessages: [Test_Map_C_1]       found Owner : MyPlayerController
LogBlueprintUserMessages: [Test_Map_C_1]         PlayerController : not found Owner
LogBlueprintUserMessages: [Test_Map_C_1]           found GetControlledPawn : MyPlayerPawn
LogBlueprintUserMessages: [Test_Map_C_1]           locally controlled
LogBlueprintUserMessages: [Test_Map_C_1] all actors > PlayerPawn : 1
LogBlueprintUserMessages: [Test_Map_C_1]   Player : MyPlayer
LogBlueprintUserMessages: [Test_Map_C_1] all actors > PlayerController : 1
LogBlueprintUserMessages: [Test_Map_C_1]   player controller : MyPlayerController

マルチプレイ

Server

GameModeもGameStateもClinet含めたPlayerStateもPlayerController、PlayerPawnも全て生成されていることが確認できる。
PlayerPawnは必ずしも順番通りにはならいことに注意。

LogBlueprintUserMessages: [Test_Map_C_2] Server: found GameMode  : MyGameMode
LogBlueprintUserMessages: [Test_Map_C_2] Server:   found GameState : MyGameState
LogBlueprintUserMessages: [Test_Map_C_2] Server:     GameState : not found Owner
LogBlueprintUserMessages: [Test_Map_C_2] Server:     found PlayerState  MyPlayerState
LogBlueprintUserMessages: [Test_Map_C_2] Server:       found Owner : MyPlayerController
LogBlueprintUserMessages: [Test_Map_C_2] Server:         found GetControlledPawn : MyPlayerPawn
LogBlueprintUserMessages: [Test_Map_C_2] Server:         locally controlled
LogBlueprintUserMessages: [Test_Map_C_2] Server:     found PlayerState : MyPlayerState1
LogBlueprintUserMessages: [Test_Map_C_2] Server:       found Owner : MyPlayerController1
LogBlueprintUserMessages: [Test_Map_C_2] Server:         found GetControlledPawn : MyPlayrPawn1
LogBlueprintUserMessages: [Test_Map_C_2] Server:         not locally controlled
LogBlueprintUserMessages: [Test_Map_C_2] Server:     found PlayerState : MyPlayerState2
LogBlueprintUserMessages: [Test_Map_C_2] Server:       found Owner : MyPlayerController2
LogBlueprintUserMessages: [Test_Map_C_2] Server:         found GetControlledPawn : MyPlayerPawn2
LogBlueprintUserMessages: [Test_Map_C_2] Server:         not locally controlled
LogBlueprintUserMessages: [Test_Map_C_2] Server: all actors > PlayerPawn : 3
LogBlueprintUserMessages: [Test_Map_C_2] Server:   Player : MyPlayerPawn2
LogBlueprintUserMessages: [Test_Map_C_2] Server:   Player : MyPlayerPawn
LogBlueprintUserMessages: [Test_Map_C_2] Server:   Player : MyPlayerPawn1
LogBlueprintUserMessages: [Test_Map_C_2] Server: all actors > PlayerController : 3
LogBlueprintUserMessages: [Test_Map_C_2] Server:   player controller : MyPlayerController
LogBlueprintUserMessages: [Test_Map_C_2] Server:   player controller : MyPlayerController1
LogBlueprintUserMessages: [Test_Map_C_2] Server:   player controller : MyPlayerController2
Client1

クライアントの場合はGameModeは生成されていない。
GameStateは生成されてPlayerArrayを回すとPlayerState自体はプレイヤー人数分取得できる。
PlayerControllerは自分のみ生成されている。
PlayerPawnはプレイヤー分生成されない。
実際に2人分のみが生成されていることが分かる。
他の端末との距離や表示範囲などで同期が必要ない場合はSpawnされない。
一定範囲や描画されるなどで同期が必要になったタイミングで初めてSpawnされる。
必ず同期取りたい場合はPawnのプロパティにAlwaysRelevantを有効にすることで必ず同期を取るようになるので最初にSpawnされるようになる。

LogBlueprintUserMessages: [Test_Map_C_2] Client 1: not found GameMode
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:   found GameState : MyGameState
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:     GameState : not found Owner
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:     found PlayerState : MyPlayerState
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:       not found Owner
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:     found PlayerState : MyPlayerState1
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:       found Owner : MyPlayerController
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:         found GetControlledPawn : PlayerPawn
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:         locally controlled
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:     found MyPlayerState : MyPlayerState2
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:       not found Owner
LogBlueprintUserMessages: [Test_Map_C_2] Client 1: all actors > Player : 2
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:   Player : PlayerPawn
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:   Player : PlayerPawn2
LogBlueprintUserMessages: [Test_Map_C_2] Client 1: all actors > PlayerController : 1
LogBlueprintUserMessages: [Test_Map_C_2] Client 1:   player controller : MyPlayerController

AlwaysRelevantを有効にした場合は全員Spawnされている。

    :
    :
LogBlueprintUserMessages: [Test_Map_C_2] Client 2: all actors > PlayerPawn : 3
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:   Player : MyPlayerPawn
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:   Player : MyPlayerPawn1
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:   Player : MyPlayerPawn2
Client2

Clinet2も同様。

LogBlueprintUserMessages: [Test_Map_C_2] Client 2: not found GameMode
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:   found GameState : MyGameState
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:     GameState : not found Owner
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:     found PlayerState : MyPlayerState
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:       not found Owner
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:     found PlayerState : MyPlayerState1
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:       not found Owner
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:     found PlayerState : MyPlayerState2
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:       found Owner : MyPlayerController
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:         found GetControlledPawn : MyPlayerPawn
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:         locally controlled
LogBlueprintUserMessages: [Test_Map_C_2] Client 2: all actors > PlayerPawn : 2
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:   Player : MyPlayerPawn
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:   Player : MyPlayerPawn1
LogBlueprintUserMessages: [Test_Map_C_2] Client 2: all actors > PlayerController : 1
LogBlueprintUserMessages: [Test_Map_C_2] Client 2:   player controller : MyPlayerController