/** * @brief 更新関数. */ void Update() { // ゲーム中の処理 if (isGameStart && !isGameEnd) { // まだ自分のキャラクタのspawnが終わっていない状態であれば、自身のキャラクタをspawnする if (!isSpawnMyChara) { OnGameStart(); } // 自身のキャラクタ位置の退避 if (myObject != null) { myPosition = myObject.transform.position; myRotation = myObject.transform.rotation; } // ルーム名の退避 if (MonobitNetwork.room != null) { reconnectRoomName = MonobitNetwork.room.name; } // ホストの場合の処理 if (MonobitNetwork.isHost) { // アイテムに接近したら、アイテム取得処理を実行する if (gameItemRakeupCount < gameItemLimit) { for (int index = itemObject.Count - 1; index >= 0; --index) { foreach (SD_Unitychan_PC playerObject in s_PlayerObject) { if ((playerObject.transform.position - itemObject[index].transform.position).magnitude < 1.0f) { // そのオブジェクトを削除する MonobitNetwork.Destroy(itemObject[index]); itemObject.Remove(itemObject[index]); // 自身のスコア情報を加算するRPC処理を実行する monobitView.RPC("OnUpdateScore", MonobitTargets.All, playerObject.GetPlayerID(), playerObject.MyScore + 100); gameItemRakeupCount++; } } } } else { // ゲーム終了メッセージを送信 monobitView.RPC("OnGameEnd", MonobitTargets.All, null); } // 制限時間の減少 if (gameTimeLimit > 0) { gameTimeLimit--; } else { // ゲーム終了メッセージを送信 monobitView.RPC("OnGameEnd", MonobitTargets.All, null); } // 個数制限&時間制限のタイミングで、ゲームシーン上にオブジェクトを配置 if ((gameItemIsPut < gameItemLimit) && (gameTimeLimit % 10 == 0)) { // ある程度ランダムな位置・姿勢でプレイヤーを配置する Vector3 position = Vector3.zero; position.x = UnityEngine.Random.Range(-10.0f, 10.0f); position.z = UnityEngine.Random.Range(-10.0f, 10.0f); Quaternion rotation = Quaternion.AngleAxis(UnityEngine.Random.Range(-180.0f, 180.0f), Vector3.up); // オブジェクトの配置(他クライアントにも同時にInstantiateする) MonobitNetwork.InstantiateSceneObject("item", position, rotation, 0, null); // ゲームオブジェクト出現個数を加算 gameItemIsPut++; } // 制限時間をRPCで送信 monobitView.RPC("TickCount", MonobitTargets.Others, gameTimeLimit); } } }