main() blog

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

【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

参考

imoue.hatenablog.com


デザイン思考とは? 革新的なアイデアを生み出す思考法

タケゾーです。

先日、『デザイン思考』について学ぶ機会があったのでその時の資料をまとめました。

 

はじめに 

近い将来、現在の仕事の半分は人工知能(AI)やロボットが担うことになると言われている。

ではAIやロボットが担えない仕事は何か?

それは今までになかったモノやコトを創り出す力、発想力を必要とされる仕事に他ならない。

今までにない革新的なアイデア・プロダクトを造り、社会に対して発想力、実践力の力が必要になってくる。

そこで求められるのが『デザイン思考』という考え方。

 

AppleGoogleといった大企業において、新製品・新サービスを開発するときにデザイン思考を用いて行っているケースがある。

 

 

  • はじめに 
  • デザイン思考とは?
    • デザイン思考って何?
    • デザイン思考のプロセス
      • ①理解と共感
      • ②問題の定義
      • ③アイデア発想
      • ④プロトタイプ&テスト
    • デザイン思考の実例
  • 理解と共感
    • シーンを見つける
    • ユーザーを理解する
    • シーンを観察する
      • 着目したシーンについて観察してみる
    • 観察結果を分析する
    • ユーザーにインタビューする
    • ユーザーの行動と気持ちを整理する
  • 問題の定義
  • イデア発想
    • 発想法からアイデアを考える
    • 四則演算によるアイデア発想
    • イデアを絞る
    • イデアをまとめる
    • プロトタイプを造る
    • ストーリーを造る
    • ユーザーテスト
    • プレゼンテーション
  • イデアを壊す
    • 考えたアイデアを破壊する
    • 何度も繰り返してみる
  • 最後に

 

続きを読む

今日は課外活動でお弁当の日。なぜか「BLT」にハマっている...

今週のお題「お弁当」


タケゾーです。


今日は上のお姉ちゃんの課外活動で工場見学や科学館に行く日なのでみんなで早起きしてお弁当作りです。

なぜか「BLT」にハマっているらしく、お弁当の日は必ず「BLTにして!」と言われます。

 

いつも通り、ケチャップとマヨネーズを混ぜてソースを作り、ベーコンを焼いて、レタス、トマトを切って準備完了。

BLT作りはパパと娘の二人で行います。

家族全員分のBLTを作ったら弁当箱に詰めていきます。

 

娘のお弁当

f:id:takezoh_1127:20171006194707j:image 

 

パパも弁当を詰めて会社に持っていきます。

 

パパのお弁当

f:id:takezoh_1127:20171006194727j:image 

 

 

お昼に同じ弁当食べているとなんだかうれしくなります。

 

BLTの弁当はいつまで食べられるのかなぁ...

 

 

 

www.main-function.com

 

【CEATEC JAPAN 2017】リアルな近未来のプロダクトが刺激的!

タケゾーです。

 

千葉県幕張メッセで開催されている最先端IT、エレクトロニクスの総合展「CEATEC JAPAN 2017」に行ってきました。

 

www.ceatec.com

 

アジアで最大級の最先端IT、エレクトロニクスの総合展示会です。 

東京ゲームショウの様な派手さはないですが、普段はお目にかかれないような最先端の技術などを見ることができ、空想ではなく実際に動いて、見て、触ることができるプロダクトの展示はとてもリアルな近未来を感じさせてくれます。

 

今年のテーマは「つながる社会、共創する未来」ということでAI、IoT、ロボット、VR、ARを活用して社会を、未来を変えていくプロダクトの出展がメインとなっていました。

 

AIを活用した画像解析によりリアルタイムに特定の人物を発見、追跡する技術や、声からこころの不調を早期に発見、物流改善や業務改善などといった内容が目立っていました。

 

そんな中でも「なんじゃ!こりゃ!?」「お!?これは?」と思えるようなプロダクトがあったので紹介したいと思います。

 

続きを読む

【東京ゲームショウ2017】実はインディーズも熱い!『センス・オブ・ワンダーナイト』で刺激的なゲームに出会える!

タケゾーです。

 

国内最大級のゲームショウ東京ゲームショウ2017を見学して来ました!

 

expo.nikkeibp.co.jp

 

9/21(木)から9/24(日)の4日間開催され、最初の2日間はビジネスデーとして主に関係者が見学することができ、土日の2日間は一般デーとして通常のお客さんが見学することができます。 

4日間のイベントで25万人が来場したとのことです。 

 

2、3年位前はスマホ、ソシャゲー勢が大半を占めておりましたが、今年はほとんど出展が無く、また去年VR元年として盛り上がっていたVR関連も展示はありましたが去年の程の盛り上がりではありませんでした。

 

その代わりに今年は期待されるタイトルが続々と出展されているのと、e-sports関連が目立っていました。

 

ゲーム業界もまだまだ熱い!ということですな。

もっともっと盛り上がって行ってもらいたいものです。

 

メジャータイトルは勿論、インディーズ、特にビジネスデー2日目に行われる『センス・オブ・ワンダーナイト』が面白いので紹介していきます。 

 

※なお、コンパニオンのお姉ちゃんやコスプレなどの写真はないので少しでも期待している人はゴメンナサイ...

 

続きを読む

CoderDojo千葉 2017.9 活動報告!

タケゾーです。

 

今月もCoderDojo千葉に参加しました。

 

f:id:takezoh_1127:20170919023327j:image

 

台風18号の影響で開催が危ぶまれましたが、何とか開催出来ました。

午前中もまだ強風ではありましたが多くの方が参加してくれていました。

 

CoderDojoとは?

 

CoderDojo とはアイルランドから始まったムーブメントです。
ボランティアと小中学生が一緒になり、プログラミングにはげむ「道場」です。 

 

coderdojo.jp

 

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

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

 

今回は初めての方が3組、それ以外の方が8組程参加されていました。

 

続きを読む

【ゼルダ BotW】ハイラル旅日記!ちょっとのつもりでプレイしたらやはりやめられなくなった!(不定期更新)

タケゾーです。

 

とうとうこの日を迎えてしまった…

 

今日、「ゼルダの伝説BotW」をクリアしてしまった…

仕事の参考にと始めたもののやめられなくなってしまって、気がつけば3カ月も経過してしまった。

会社の備品で始めてしまったので基本的には平日の行き帰りの電車の中でしか出来ず、また毎日は持って帰れないので少しづつ進めるしかなかった。

電車の中では遠足の小学生の団体と乗り合わせると周りを囲まれて堂々と覗き込んでくるし、祠の謎解きでジャイロ操作で大きく傾けたり、振ったりとなかなか怪しいオッさんになっていたこと間違いなしですわ。

 

それでもやっぱりやめられない。

どこに行くにも、どこから攻略するのも自由で、ただ歩き回っているだけでも次から次へと新しい仕掛けがあってホントに飽きない、もっと遊んでいたいと思ってしまうくらいだ。

現にハテナ村の後南、西ルートで進めていたが(これはこれで勿論間違いではないのだが)、話の展開や難易度から言ったら東、北ルートが本来のルートだったのかもしれない。

それでも神獣ヴァ・ナボリスはなんとか攻略できたからね。

塔や祠の攻略だって進行度によって絶対クリアできないというのはほとんどなく攻略法を見つけ出せばクリアできるような仕掛けだったり難易度だったりとものすごく調整されたデザインになっている。

塔を攻略する時でも今のガンバリゲージだと登れない、少しでも高いところからなんとか飛び移れないか、他に何かギミックがないか周りを探してみたりと色々な攻略を考える。

 

クリアしてしまったけどまだクリアしていない祠やチャレンジがあるので、時間があったら進めていきたい。

 

自宅では据え置き機でゆっくりゲームをする時間が取れず、電車の中でも携帯ゲームやスマホでゲームはやっているがここまでハマって時間をかけて遊んだゲームは久しくなかった。

 

あ〜、早くSwitch買わなくっちゃ。

 

 

はじめに

今更だが現プロジェクトの参考にと『ゼルダBOW』を始めてみたところ、やはり面白くてやめられなくなってしまった。

まだクリアはしていないし、レビューといってもAmazonレビューで語る人が続出しているのでその方々が言っているとおりだと思う。

 

語るのはもう少し後にして、現状のプレイの進行状況をメモしていたので不定期ながら更新して行きたいと思う。

 

攻略ルートは人それぞれだと思うので、自分が旅したルートを記録していきます。

 

Switchは未だに購入できず、会社の機材ではじめちまったんだよなぁ...

プレイは行き帰りの通勤、それも毎日はできないから少しずつ進めていっています。

 

 

続きを読む