public void EndGameStatement(int heartCount, int earnedCoinCount, int earnedCrystalCount)
    {
        //GameManager scriptindeki trigger vasıtasıyla oyun bittiğinde bu metot çağırılır. Referanslar alınır.
        roomRef.Child("GameScenePlaces").GetValueAsync().ContinueWithOnMainThread(task =>
        {
            DataSnapshot snapshot = task.Result;
            if (snapshot.GetRawJsonValue() != null)
            {
                GameScenePlaces playerPlaces = JsonUtility.FromJson <GameScenePlaces>(snapshot.GetRawJsonValue());
                playerPlaces.finishedPlayerCount++;
                int place = playerPlaces.finishedPlayerCount;
                roomRef.Child("GameScenePlaces").SetRawJsonValueAsync(JsonUtility.ToJson(playerPlaces));

                //Oyuncunun oyunu kaçıncı bitirdiğine ve kaç can harcadığına göre bir puan elde edilir.
                //O puana göre oyuncunun elde ettiği coin ve energy miktarları çarpılır.
                int placeResultPoint    = (int)(connectedPlayerCount + 1) - place;
                int remainingHeartPoint = heartCount * placeResultPoint;
                int earnedCoin          = remainingHeartPoint * earnedCoinCount;
                int earnedCrystal       = remainingHeartPoint * earnedCrystalCount;

                UpdateUserData(earnedCoin, earnedCrystal);

                //Bitiş menüsündeki ilgili textlere gerekli bilgiler yazılır.
                finishPlaceText.text    = "-" + place + "-";
                placeResultText.text    = "+" + placeResultPoint + " point";
                remainingHeartText.text = "+" + remainingHeartPoint + " point";
                coinText.text           = "+" + earnedCoin + " coin";
                crystalText.text        = "+" + earnedCrystal + " crystal";
            }
        });
    }
    private void Update()
    {
        if (waiting)
        {
            //Diğer oyuncular beklenirken, tüm oyuncular bağlandıysa ya da maksimum bekleme süresine ulaşıldıysa oyuna başlanır.
            waitTimer += Time.deltaTime;
            roomRef.Child("GameScene").GetValueAsync().ContinueWithOnMainThread(task =>
            {
                DataSnapshot snapshot = task.Result;
                if (snapshot.GetRawJsonValue() != null)
                {
                    connectedPlayerCount = snapshot.ChildrenCount;
                    if (connectedPlayerCount >= playingPlayerCount || waitTimer >= maxWaitTimeForPlayer)
                    {
                        waiting      = false;
                        starting     = true;
                        otherPlayers = new GameObject[connectedPlayerCount - 1];
                    }
                }
            });
        }
        if (starting)
        {
            //Oyunun başlaması tetiklendiğinde başlatma için editörden alınan sayıdan geriye sayılır.
            startingText.text = "The game will start after " + (int)(maxWaitTimeForStart - startTimer) + " seconds";
            startTimer       += Time.deltaTime;
            if (startTimer >= maxWaitTimeForStart)
            {
                starting = false;
                roomRef.Child("GameScene").GetValueAsync().ContinueWithOnMainThread(task =>
                {
                    DataSnapshot snapshot = task.Result;
                    if (snapshot.GetRawJsonValue() != null)
                    {
                        int i = 0;
                        foreach (DataSnapshot ds in snapshot.Children)
                        {
                            //Tüm oyuncular listeye eklenir.
                            Player otherPlayer = JsonUtility.FromJson <Player>(ds.GetRawJsonValue());
                            placeList.Add((i + 1) + ". " + otherPlayer.nick);

                            //Eğer ki ilgili oyuncu Aktif oyuncu ile aynı ID'ye sahipse bu oyuncu sahnede tekrar oluşturulmaz.
                            if (otherPlayer.userId == auth.CurrentUser.UserId)
                            {
                                continue;
                            }

                            //İlgili oyuncu sahnede oluşturulur ve skin değişkeni uygulanır.
                            otherPlayers[i] = Instantiate(otherPlayerPrefab);
                            otherPlayers[i].GetComponent <Renderer>().material.color = otherPlayer.skin;
                            i++;
                        }
                        UpdatePlaceText();
                    }
                });
                waitingMenu.SetActive(false);
                gamingMenu.SetActive(true);
                playerObject.GetComponent <Rigidbody>().useGravity = true;

                //Oyun başlatıldıktan sonra listeye eklenen oyuncular Database'e yazdırılır.
                GameScenePlaces playerPlaces = new GameScenePlaces();
                playerPlaces.finishedPlayerCount = 0;
                roomRef.Child("GameScenePlaces").SetRawJsonValueAsync(JsonUtility.ToJson(playerPlaces));
            }
        }
    }