---
# System prepended metadata

title: Photon Unity Networking
tags: [Unity, Photon Unity Networking]

---

Photon Unity Networking
===
> 下記以外のメソッド、プロパティ、コールバックを使用したら自由に追加してください。

###### tags: `Unity`, `Photon Unity Networking`

PunTurnManager.cs をについてまとめる

### Overview
ターンベース制ゲームを作るのに使えるクラス

### Documents
[[Photon] ターンベースゲームデモ](https://doc.photonengine.com/ja-jp/pun/current/demos-and-tutorials/package-demos/rockpaperscissors-demo)
[PunBehavior Class document](https://doc-api.photonengine.com/ja-jp/pun/current/class_photon_1_1_pun_behaviour.html)
[PhotonPlayer Class document](https://doc-api.photonengine.com/ja-jp/pun/current/class_photon_player.html#adb4677870c9c5903527ce75dc0edba2b)
[PhotonNetwork Class document](https://doc-api.photonengine.com/ja-jp/pun/current/class_photon_network.html)
[Room Class document](https://doc-api.photonengine.com/ja-jp/pun/current/class_room.html#details)

### Basic flow

```graphviz
digraph flaw{
    user    [label="ユーザー"]
    master  [label="マスターサーバー", shape=octagon]
    lobby   [label="ロビー", shape=box]
    room    [label="ルーム", shape=box]
    game    [label="ゲーム", shape=diamond]
    
    user   ->  master []
    master ->  lobby  []
    lobby  ->  room   []
    room   ->  game   []
    game   ->  game   []
    game   ->  master []
}
```



PhotonNetwork Class
---

サーバー、ロビーを管理するクラス

### Methods
#### Photonへ接続
```csharp
PhotonNetwork.ConnectUsingSettings(version);
```

#### ロビーに入室
```csharp
PhotonNetwork.JoinLobby();
```

#### ルームを作成
```csharp
PhotonNetwork.CreateRoom();
```

#### ランダムでルームに入室
```csharp
PhotonNetwork.JoinRandomRoom();
```

#### ルームを退室
```csharp
PhotonNetwork.LeaveRoom();
```

### Callbacks
#### Photonに接続時
```csharp
public void OnConnectedToMaster(){ }
```

#### Photonに接続失敗時
```csharp
public void OnDisconnectedFromPhoton(){ }
```

#### ロビーに入室時
```csharp
public void OnJoinedLobby(){ }
```

#### ルームを作成時
```csharp
public void OnCreatedRoom(){ }
```

#### ルームに入室時
```csharp
public void OnJoinedRoom(){ }
```

#### リモートプレイヤーが入室時
```csharp
public void OnPhotonPlayersConnected(PhotonPlayer newPlayer){ }
```

#### ルームを退室時
```csharp
public void OnLeftRoom(){ }
```


### Properties

#### ルームを数える
```csharp
int PhotonNetwork.countOfRooms { get; }
```

#### マスターか調べる
```csharp
bool PhotonNetwork.isMasterClient { get; }
```

### プレイヤー名を取得
```csharp
string PhotonNetwork.playerName { get; }
```



PunTurnManager Class
---

ターンベースゲームを管理するクラス
以下のコードを追加する

```csharp
private PunTurnManager turnManager;
void Start()
{
    this.turnManager = this.gameObject.AddComponent<PunTurnManager>();
    this.turnManager.TurnManagerListener = this;
}
```

また、 Photon接続を次のように変更する
```csharp
PhotonNetwork.ConnectUsingSettings(version);
PhotonHandler.StopFallbackSendAckThred();
```

### Methods
`PunTurnManager` クラスを継承する
`MonoBehaviour` クラスを継承しているので書き換えで良い
#### ターンを開始
マスターが開始させる
```csharp
if(PhotonNetwork.isMasterClient) this.turnManager.BeginTurn();
```

#### 行動を送信
```csharp
this.turnManager.SendMove(object move, bool finish);
```


### Callbacks
`IPunTurnManagerCallbacks` インターフェースを継承する。
なお、インターフェースに含まれるメソッドはすべて使用しなければならない。

#### ターンの開始時
```csharp
public void OnTurnBegins(int turn){ }
```

#### プレイヤーの行動時
```csharp
public void OnPlayerMove(PhotonPlayer player, int turn, object move){ }
```

#### プレイヤーの完了時
```csharp
public void OnPlayerFinished(PhotonPlayer player, int turn, object move){ }
```

#### ターンの完了時
```csharp
public void OnTurnCompleted(int turn){ }
```

#### ターンのタイムアウト時
```csharp
public void OnTurnTimeEnds(int turn){ }
```


### Properties
#### ターン数の取得
```csharp
int this.turnManager.Turn { get; }
```



PhotonPlayer Class
---
プレイヤーを管理するクラス

### Methods

### Attributes
#### ローカルプレイヤーか調べる
```csharp
bool PhotonPlayer.isLocal
```

### Properties



Room Class
---
ルームを管理するクラス

### Methods

### Properties
#### ルームの最大人数を設定
```csharp
int PhotonNetwork.room.MaxPlayers { get; set; }
```

#### ルームの人数を取得
```csharp
int PhotonNetwork.room.PlayerCount { get; }
