---
title: 今から始めるネットワークマルチプレイ
tags: 
author: [月ヶ瀬　理緒](https://convert.docswell.com/user/tukigaselio)
site: [Docswell](https://www.docswell.com/)
thumbnail: https://bcdn.docswell.com/page/LE3PWX95J5.jpg?width=480
description: 今から始めるネットワークマルチプレイ by 月ヶ瀬　理緒
published: January 20, 25
canonical: https://convert.docswell.com/s/tukigaselio/5DN93L-2025-01-20-013003
---
# Page. 1

![Page Image](https://bcdn.docswell.com/page/LE3PWX95J5.jpg)

今から始める
ネットワーク
マルチプレイ
月ヶ瀬


# Page. 2

![Page Image](https://bcdn.docswell.com/page/8EDLK2GYJG.jpg)

自己紹介
月ヶ瀬 理緒
@Gisu_Love
• UE歴4年目
• 最近遊戯王にはまったので大須の周
辺のカードショップで発見できる
• ディプロス株式会社のノンゲームエ
ンジニアとTAの間のようなポジ
• X（Twitter)によくいるので気軽に話
しかけてください


# Page. 3

![Page Image](https://bcdn.docswell.com/page/V7P2K13278.jpg)

はじめに
• コード書きません
• BPは書けるけどマルチはやったことがない人向け
• 体験談がかなり含まれます（詳しい方は生暖かい目で見てくだ
さい）
• 間違い/修正などはご気軽にご連絡下さい（Twitterなど）


# Page. 4

![Page Image](https://bcdn.docswell.com/page/2JVDVY4XJQ.jpg)

今日の内容
• UEのサーバーについて
• とりあえずネットワークマルチをしてみよう
• 同期について考える
• 所有権について考える
• ちょっと応用 シームレストラベル
• もうちょっと応用 EOSでセッション立ててみる


# Page. 5

![Page Image](https://bcdn.docswell.com/page/5EGYL91REL.jpg)

・接続形態/ホスト方法について


# Page. 6

![Page Image](https://bcdn.docswell.com/page/4JQMYWDY7P.jpg)

接続形態について
• P2P(Peer to Peer)型
• Client Server型
端末同士を直接接続して通信する
プレイヤーはサーバーにのみ接続する
Unreal Engineはこっち！


# Page. 7

![Page Image](https://bcdn.docswell.com/page/K74VWKZZJ1.jpg)

ゲームをホストする方法
• Listen Server
• Dedicated Server
セッション作った端末でサーバーとクラ
イアント両方が実行される
サーバーにローカルのプレイヤーが存在
する
専用のサーバーが不要なので比較的簡単
専用サーバーを用意し、プレイヤーは
サーバーに接続する方式
サーバーにローカルのプレイヤーが存
在しない
いろいろ大変
今日話すのはこっち！


# Page. 8

![Page Image](https://bcdn.docswell.com/page/LJ13YXRD7G.jpg)

・とりあえずネットワーク
マルチにしてみよう


# Page. 9

![Page Image](https://bcdn.docswell.com/page/GJWPGN1872.jpg)

PIEでマルチする
• Playボタンの横からネットモードと人数を設定することでマル
チでPIEをプレイすることができる


# Page. 10

![Page Image](https://bcdn.docswell.com/page/4EZKL3P9E3.jpg)

IP直接続
• ホストになるPlayerのIPv4アドレスをクライアントが直打ちして接続する
• 一番わかりやすく同一ネットワーク内ならこれで十分動く


# Page. 11

![Page Image](https://bcdn.docswell.com/page/Y76QWXMD7V.jpg)

Online Subsystemでセッションする
• デフォルトで入っているプラグインのOnline Subsystemを使って
セッションを作成・参加する
• IPを打つことがなく同一ネットワーク内のセッションに参加できる
• Collab Viewerで使用されている


# Page. 12

![Page Image](https://bcdn.docswell.com/page/G75RMXZ8E4.jpg)

よっしゃ！マルチプレイ簡単や！


# Page. 13

![Page Image](https://bcdn.docswell.com/page/9J2D9XRVJR.jpg)

…とはならない


# Page. 14

![Page Image](https://bcdn.docswell.com/page/DEY248DQEM.jpg)

このままだと…
椅子をSpawnします！
クライアントA
いや、しらんけど…
サーバー
サーバーが知らない
なら知らないよ
クライアントB
クライアントがやったことをサーバーは知らない、のでホストに
もほかのクライアントにも同期されない


# Page. 15

![Page Image](https://bcdn.docswell.com/page/VJN8YQ6278.jpg)

・同期について考える


# Page. 16

![Page Image](https://bcdn.docswell.com/page/YE9KPDLDE3.jpg)

UEの同期するための動き
• UnrealEngineで同期される動きは
1.サーバーで実行する
2.クライアントに複製する
に分解できる
椅子Spawn
したいんだけど
クライアントA
いいよー
サーバー
作ったよー
サーバー
やったー
クライアント達


# Page. 17

![Page Image](https://bcdn.docswell.com/page/GE8RD3X5JD.jpg)

椅子をスポーンしたいんだけど
…を、実際に行うのが
RPC
Remote Procedure Call）
（


# Page. 18

![Page Image](https://bcdn.docswell.com/page/LELKMV83JR.jpg)

RPCの種類
• RPCは
Run on Server（サーバーで実行）
MultiCast（すべてで実行）
Run on Client（所有しているクライアントで実行）
の３種類ある


# Page. 19

![Page Image](https://bcdn.docswell.com/page/4JM2YG6MJW.jpg)

RPCの作り方
• カスタムイベントの詳細タブにある
「複製する」のドロップダウンから
選ぶことでRPCにすることができる


# Page. 20

![Page Image](https://bcdn.docswell.com/page/PJRM9ZPLE9.jpg)

Run on Server
• このノードに続けられた処理
をサーバーで実行する
• BPで何かの同期がいるイベン
トを起こしたい場合、ほぼこ
のノードを使う
サーバーさん！
椅子をSpawnし
てください！
クライアントA
クライアントか
ら連絡来たな…
椅子を作ってほ
しい？
サーバー


# Page. 21

![Page Image](https://bcdn.docswell.com/page/PEXVQ9N67X.jpg)

MultiCast
• このノードをサーバーで実行
した場合、クライアントと
サーバーで同じノードが実行
される
椅子の皆さんは
180度回転して
くださいね～
なんか回転する
らしいぞ～
クライアントA
の椅子
サーバー
サーバー
の椅子
クライアントB
の椅子


# Page. 22

![Page Image](https://bcdn.docswell.com/page/3EKQ9PNGED.jpg)

Run on Client
• このノードをサーバーで実行し
た場合、所有権を持っているク
ライアントで実行される
• でも所有権って大体サーバーが
持っているのであまり使わない
このUI持ってる
でしょ？HP変え
といて
持ってます！
変えときます
サーバー
クライアントA


# Page. 23

![Page Image](https://bcdn.docswell.com/page/L73PWXV5E5.jpg)

RPCは完璧だ！早速椅子を作ってみよう！
椅子Spawn
したいんだけど
クライアントA
いいよー
サーバー
…
サーバー
あ、あれ…？椅子は…？
クライアント達
…そう、まだ「作ったよ～」とお知らせするパラメーターがある


# Page. 24

![Page Image](https://bcdn.docswell.com/page/87DLK28YEG.jpg)

Replicateする
• 同期したいすべてのActorはReplicateされる必要がある
• Actorの詳細欄やSet Replicationノードで設定できる


# Page. 25

![Page Image](https://bcdn.docswell.com/page/VJP2K182J8.jpg)

もっとReplicateする
• Replicateしただけではすべて同期されるわけではなく、Actor
を動かしたりcomponentを動かすには追加のReplicateの設定
を行う必要がある
動きを同期するReplicate Movement
コンポーネントを同期するcomponent Replicate


# Page. 26

![Page Image](https://bcdn.docswell.com/page/2EVDVYNXEQ.jpg)

変数をReplicateする
• 変数はサーバーの変数をSetしたときに自動的にクライアント
に複製する設定がある
• 変数の詳細のレプリケーションから設定できる


# Page. 27

![Page Image](https://bcdn.docswell.com/page/57GYL9KR7L.jpg)

ReplicatedとRepNotifyの違い
• Replicated
• RepNotify
サーバーでSetされた際に自動
的にクライアント側に変数の
値が複製される。
サーバーでセットした後、自動的にクライア
ント側に変数の値が複製され通知が入る
RepNotifyの変数を作ると関数が作成され変
数がセットされると呼び出される


# Page. 28

![Page Image](https://bcdn.docswell.com/page/4EQMYWNYJP.jpg)

よし！同期は完璧だ！
レベル上のドア、
Run on Serverで
開けちゃうぜ～！
あ、あれ…
クライアントでも
ホストでも開かな
いぞ…
シーン…
クライアントA
クライアントA
次回：所有権とかいうよくわかんない罠


# Page. 29

![Page Image](https://bcdn.docswell.com/page/KJ4VWKGZE1.jpg)

・所有権について考える


# Page. 30

![Page Image](https://bcdn.docswell.com/page/LE13YXDDJG.jpg)

所有権とかRoleとか呼ばれるものについて
• すべてのActorには所有権が設定されている
• SpawnしたものはSpawn した人が所有権を持つ
• レベルに配置されているものは各個プレイヤーが所有する
• 所有している人とモノによってロールが変わる
Run on Serverでスポーン
したもの、全部所有して
ます
サーバー
サーバーに黙ってローカルで
スポーンしたReplicateされて
ないActorやUI、レベルの
Actorを所有してます
クライアント


# Page. 31

![Page Image](https://bcdn.docswell.com/page/GEWPGNY8J2.jpg)

Roleの種類
• Authority
なんでもできる奴。偉い。
大体サーバーにいる
• Autonomous
Proxy
Authorityになんか言える珍しい
ロール。このロールなのでPlayer
ControllerとPawnは偉い。
• Simulate
Proxy
ローカル内だけでの処理と
サーバーの複製しかできない


# Page. 32

![Page Image](https://bcdn.docswell.com/page/47ZKL3X973.jpg)

所有権とロールの対応
物＼所有してる人
Server
Client
Player Controllerと
PossessされているPawn
Authority
Autonomous Proxy
Replicateされている
Actor
Authority
Simulate Proxy
Replicateされていない
ローカルで生成されたActor
Authority
Authority


# Page. 33

![Page Image](https://bcdn.docswell.com/page/YJ6QWX4DJV.jpg)

レベルに置かれたドアで起きたこと
ドア開けて
あなたそんな権限
ありませんよね？
いいよ～
Run on Server
サーバーのドアへ
ドアを開けてください
それをコピーします
クライアントA
所有権が
クライアントAのドア
所有権がサーバーのドア


# Page. 34

![Page Image](https://bcdn.docswell.com/page/GJ5RMXQ874.jpg)

どうすればよかったのか
サーバーの俺、
ドア開けて
ひらけドア！
いいよ～
サーバー上の
クライアントA
クライアントA
複製できた！
所有権が
クライアントAのドア
サーバー上のクライアン
トのPlayer Controllerか
らのお願いなら…まあ…
所有権が
サーバーのドア
サーバー


# Page. 35

![Page Image](https://bcdn.docswell.com/page/LE3PWXVGJ5.jpg)

いるとかいないとかの話
• すべてのActorがすべてのPlayerに複製されているわけではない
こっちの世界、Player
controller自分しかいな
いんだけど…
ローカルで生成され
たもの以外大体全部
情報持ってます
サーバー
クライアントA


# Page. 36

![Page Image](https://bcdn.docswell.com/page/8EDLK28NJG.jpg)

Game Mode
Game State
Game State
Game State
Player State
Player State
Player State
Player State
Player State
Player State
Player State
Player State
Player State
Pawn
Pawn
Pawn
Instance
Instance
PC
サーバーの世界
PC
クライアントAの世界
Instance
PC
クライアントBの世界


# Page. 37

![Page Image](https://bcdn.docswell.com/page/V7P2K18N78.jpg)

•MultiCastなどで沼りがちなので気を
付けよう！


# Page. 38

![Page Image](https://bcdn.docswell.com/page/2JVDVYNYJQ.jpg)

・ここからちょっと応用


# Page. 39

![Page Image](https://bcdn.docswell.com/page/5EGYL9KWEL.jpg)

シームレストラベルについて


# Page. 40

![Page Image](https://bcdn.docswell.com/page/4JQMYWNQ7P.jpg)

マルチプレイでのレベル遷移
• マルチプレイの状態の時、サーバーがOpen Levelしてもクライ
アントはついていくことができない
自分次の○○って
Mapに行くんで
サーバー
どこそれ…
クライアントA


# Page. 41

![Page Image](https://bcdn.docswell.com/page/K74VWKGYJ1.jpg)

シームレストラベルを使う
• Game ModeのUse
Seamless Travelを
有効にします
• 空のレベルを作り、
プロジェクト設定の
マップ＆モードから
遷移マップに設定し
ます。
• Execute console commandで
「servertravel/Game以下移動
したいレベルのパス」
とサーバーで唱えます


# Page. 42

![Page Image](https://bcdn.docswell.com/page/LJ13YXDN7G.jpg)



# Page. 43

![Page Image](https://bcdn.docswell.com/page/GJWPGN8M72.jpg)

レベル移動できた！


# Page. 44

![Page Image](https://bcdn.docswell.com/page/4EZKL38ME3.jpg)

もうちょっと応用：
EOSを使ってみる


# Page. 45

![Page Image](https://bcdn.docswell.com/page/Y76QWXP57V.jpg)

EOSってC++必須じゃないんですか？
• UdemyでC++を使用したEOSでのオンラインゲーム制作の講座
を販売している方がプラグインを出しているので使ってみた
https://www.udemy.com/course/unreal-engine-5-cpp-multiplayershooter/?referralCode=627D7FD010D0E0E49592&amp;couponCode=D
UMMY25116
他にもBPだけで組めるようにするプラグインを出している方は
たくさんいる


# Page. 46

![Page Image](https://bcdn.docswell.com/page/G75RMXKGE4.jpg)

Developer Portalから製品を設定する
• Enterpriseのシートの購入などに使われる組織を作成し、
Developer Portalから新しい製品を作成する


# Page. 47

![Page Image](https://bcdn.docswell.com/page/9J2D9XWDJR.jpg)

クライアントとポリシーを作成する
• 製品設定のクライアント
から新規のポリシーなど
を作成する
• ここでゲーム内実績をつ
けるかなどを設定できる


# Page. 48

![Page Image](https://bcdn.docswell.com/page/DEY248LMEM.jpg)

製品情報を設定する
• Epicアカウントサービスからアクセス許可などを設定する


# Page. 49

![Page Image](https://bcdn.docswell.com/page/VJN8YQ4378.jpg)

Developer portal側の設定完了！


# Page. 50

![Page Image](https://bcdn.docswell.com/page/YE9KPDQPE3.jpg)

プロジェクトファイルを操作する
• Third Person テンプレートでプロジェクトをC++作成し、Online
Subsystem EOSを追加する


# Page. 51

![Page Image](https://bcdn.docswell.com/page/GE8RD3GXJD.jpg)

Default Engine .iniを書き換える
• Default Engine .iniの最後にEOS用の設定を付け足す
[OnlineSubsystemEOS]
bEnabled=true
[OnlineSubsystem]
DefaultPlatformService=EOS
[/Script/Engine.GameEngine]
+NetDriverDefinitions=(DefName=&quot;GameNetDriver&quot;,DriverClassName=&quot;OnlineSubsystemEOS.
NetDriverEOS&quot;,DriverClassNameFallback=&quot;OnlineSubsystemUtils.IpNetDriver&quot;)
[/Script/OnlineSubsystemEOS.NetDriverEOS]
bIsUsingP2PSockets=true


# Page. 52

![Page Image](https://bcdn.docswell.com/page/LELKMVGNJR.jpg)

EOSのプラグインの設定をする
• プロジェクト設定のOnline Subsystem EOSから
・エピックアカウントにログイン
・クロスプレイ用のユーザーID
にチェックを入れる
必要に応じて下の実績についてやクロスプレイもオンにする


# Page. 53

![Page Image](https://bcdn.docswell.com/page/4JM2YGQQJW.jpg)

IDやキーを設定する
• EOSの製品情報からIdなどをコピーしてEOSの設定に貼り付け
る
• 暗号化キーにはとりあえず0を64個入れておく


# Page. 54

![Page Image](https://bcdn.docswell.com/page/PJRM9Z8KE9.jpg)

プラグインを入れる
• MultiplayerCourseMenuSystem
https://github.com/DruidMech/MultiplayerCourseMenuSystem
をダウンロードしてプラグインを先ほど作ったプロジェクトに移
植し、VSファイルを再生成する
プラグインは5.1まで


# Page. 55

![Page Image](https://bcdn.docswell.com/page/PEXVQ9857X.jpg)

UIを作成する
• プラグイン独自のUMGクラスのMenuの子としてウェジットを作
成する
• プラグイン独自の命名規則に沿ったボタンを作っておく


# Page. 56

![Page Image](https://bcdn.docswell.com/page/3EKQ9PKRED.jpg)

UIを表示する
• レベルBPでCreate Widget をしてAdd to Viewportではなく独自の
関数でロビーを開くようにする


# Page. 57

![Page Image](https://bcdn.docswell.com/page/L73PWXZGE5.jpg)

そしてパッケージ化…


# Page. 58

![Page Image](https://bcdn.docswell.com/page/87DLK2RNEG.jpg)

NAT越えできない
• 出来上がったパッケージではNAT越え（つまり別のネットワー
クとの接続）ができなかった
• 設定などに問題がありそうなので、今後も研究してうまくいっ
たらまたしゃべっているかもしれない


# Page. 59

![Page Image](https://bcdn.docswell.com/page/VJP2K1WNJ8.jpg)

参考にさせていただいたもの
• UE4でマルチプレイゲームをつくろう
https://www.docswell.com/s/EpicGamesJapan/ZWX64KUE4_CEDEC19_MultiPlayerGame?utm_source=twitter&amp;utm_mediu
m=social&amp;utm_campaign=singlepage
• C++コードはいらない！UE4で作るお手軽マルチプレイネット
ワークゲームについて
https://www.docswell.com/s/alwei/KRW71Z-2022-05-12152255?utm_source=twitter&amp;utm_medium=social&amp;utm_campai
gn=singlepage
• 【UE4/UE5初心者向け】オンラインマルチプレイ入門編
https://youtube.com/playlist?list=PLfKehW5Urkqu4DXGJCgWZCxweW9qjnsv&amp;si=yWPnzmW2SdRLnD7a


# Page. 60

![Page Image](https://bcdn.docswell.com/page/2EVDVY8YEQ.jpg)

• UE4/5におけるオンラインマルチプレイ(導入編）
https://www.docswell.com/s/yoshikata/54W6GK-2022-07-09183611?utm_source=twitter&amp;utm_medium=social&amp;utm_campaig
n=singlepage
• [UE4] マルチプレイでの所有権とRPC
https://historia.co.jp/archives/12823/
• UE4 ネットワークマルチプレイヤーゲームを作る時の役割につ
いて
• https://unrealengine.hatenablog.com/entry/2021/02/23/232048
• Unreal Engineでオンラインゲームを作るための技術について
https://www.docswell.com/s/alwei/58G89P-2024-03-17232045?utm_source=twitter&amp;utm_medium=social&amp;utm_campaig
n=singlepage


# Page. 61

![Page Image](https://bcdn.docswell.com/page/57GYL95W7L.jpg)

まとめ
• ネットワークマルチプレイは仕組みがわかれば怖くない！
• みんなもマルチゲームを作ろう！


