void Update() { // 入室したら処理を始める if (PhotonNetwork.InRoom) { /* ゲーム状態によって処理を変える。 * この処理は各自ローカルで処理しているが、ネットワークとしては「イベント」で処理をしたい。 * Photon Event を使って作り直すとよいでしょう。 */ switch (m_state) { case HockeyGameState.Initializing: // 初期化前 if (PhotonNetwork.CurrentRoom.PlayerCount > 1) // 二人揃ったら { m_state = HockeyGameState.Player2Serve; // 二人目のプレイヤーのサーブから始める } break; case HockeyGameState.Player1Serve: SpawnPack(1); m_state = HockeyGameState.InGame; break; case HockeyGameState.Player2Serve: SpawnPack(2); m_state = HockeyGameState.InGame; break; default: break; } } }
void Client_StartGaming() { state = HockeyGameState.gaming; GameObject obj = null; obj = Network.Instantiate(prefab_player, respawn_top, Quaternion.identity, 0) as GameObject; playerMe = obj.GetComponent <Rigidbody>(); }
/// <summary> /// サーブ権を設定する /// </summary> /// <param name="actorNumber">サーブ権を与えるプレイヤーの ActorNumber</param> public void Serve(int actorNumber) { if (actorNumber == 1) { m_state = HockeyGameState.Player1Serve; } else { m_state = HockeyGameState.Player2Serve; } }
void Update() { if (state != HockeyGameState.gaming) { return; } if (Input.GetMouseButton(0)) { Vector3 point = cam.ScreenToWorldPoint(Input.mousePosition); float x = Mathf.Clamp(point.x, -bound_x, bound_x); float z = Mathf.Clamp(point.z, -bound_z, bound_z); Vector3 newPos = new Vector3(x, 0.25f, z); playerMe.MovePosition(Vector3.Lerp(playerMe.position, newPos, 0.3f)); force2Ball = (playerMe.position - lastPos).magnitude * 100f; } lastPos = playerMe.position; if (Network.isServer) { if (playerMe.position.z > respawn_center.z) { playerMe.position = new Vector3(playerMe.position.x, playerMe.position.y, respawn_center.z - 0.2f); } if (ball.transform.position.z < -6 || ball.transform.position.z > 6) { Network.Destroy(ball.GetComponent <NetworkView>().viewID); state = HockeyGameState.end; bool isHostWin = ball.transform.position.z > 0; GameEnd(isHostWin); networkView.RPC("GameEnd", RPCMode.Others, !isHostWin); } } else { if (playerMe.position.z < respawn_center.z) { playerMe.position = new Vector3(playerMe.position.x, playerMe.position.y, respawn_center.z + 0.2f); } } }
void StartGaming() { state = HockeyGameState.gaming; GameObject obj = null; obj = Network.Instantiate(prefab_player, respawn_bot, Quaternion.identity, 0) as GameObject; playerMe = obj.GetComponent <Rigidbody>(); obj = Network.Instantiate(prefab_ball, respawn_center, Quaternion.identity, 0) as GameObject; ball = obj.GetComponent <Rigidbody>(); networkView.RPC("Client_StartGaming", RPCMode.Others); // if(Network.isServer) // obj.GetComponent<Renderer>().material.color = Color.red; // else // obj.GetComponent<Renderer>().material.color = Color.green; }
void OnLobby() { if (GUILayout.Button("建立服务器")) { NetworkConnectionError error = Network.InitializeServer(10, Port, false); if (error == NetworkConnectionError.NoError) { state = HockeyGameState.idle; } } GUILayout.Label("======================================"); GUILayout.BeginHorizontal(); GUILayout.Label("服务器IP地址:"); IP = GUILayout.TextField(IP); GUILayout.EndHorizontal(); if (GUILayout.Button("连接服务器")) { NetworkConnectionError error = Network.Connect(IP, Port); if (error == NetworkConnectionError.NoError) { state = HockeyGameState.idle; } } }
void GameEnd(bool win) { Network.Destroy(playerMe.GetComponent <NetworkView>().viewID); result = win; state = HockeyGameState.end; }