作者:zhuzhu-2012_389 | 来源:互联网 | 2023-07-21 02:31
SoIhaveaPlayerandanEnemyinasceneandwhenoneplayermoves,itupdatestheFirebasewithi
So I have a Player and an Enemy in a scene and when one player moves, it updates the Firebase with its position perfectly, fast and exact. But when updating the enemy for the other player, it takes a long time.
Code for Enemy Updater:
所以我在一个场景中有一个玩家和一个敌人,当一个玩家移动时,它会以完美,快速和准确的位置更新Firebase。但是当为其他玩家更新敌人时,需要很长时间。敌人更新代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Firebase;
using Firebase.Database;
using Firebase.Unity.Editor;
public class enemyUpdater : MonoBehaviour {
private DatabaseReference dataBase;
private bool gameStarted = false;
private float Z;
private float X;
// Use this for initialization
void Start () {
// Set up the Editor before calling into the realtime database.
FirebaseApp.DefaultInstance.SetEditorDatabaseUrl("Not Showing This");
// Get the root reference location of the database.
dataBase = FirebaseDatabase.DefaultInstance.RootReference;
setup();
}
// Update is called once per frame
void FixedUpdate () {
this.gameObject.transform.position = new Vector3(X, this.gameObject.transform.position.y, Z);
}
void HandleU1XChanged(object sender, ValueChangedEventArgs args)
{
if (args.DatabaseError != null)
{
Debug.LogError(args.DatabaseError.Message);
return;
}
string tmp = args.Snapshot.Value.ToString();
float.TryParse(tmp, out X);
}
void HandleU1ZChanged(object sender, ValueChangedEventArgs args)
{
if (args.DatabaseError != null)
{
Debug.LogError(args.DatabaseError.Message);
return;
}
string tmp = args.Snapshot.Value.ToString();
float.TryParse(tmp, out Z);
}
void HandleU2XChanged(object sender, ValueChangedEventArgs args)
{
if (args.DatabaseError != null)
{
Debug.LogError(args.DatabaseError.Message);
return;
}
string tmp = args.Snapshot.Value.ToString();
float.TryParse(tmp, out X);
}
void HandleU2ZChanged(object sender, ValueChangedEventArgs args)
{
if (args.DatabaseError != null)
{
Debug.LogError(args.DatabaseError.Message);
return;
}
string tmp = args.Snapshot.Value.ToString();
float.TryParse(tmp, out Z);
}
void setup()
{
if (multiSetup.isUserOne)
{
this.gameObject.transform.position = new Vector3(7.5f, this.gameObject.transform.position.y, -7.5f);
FirebaseDatabase.DefaultInstance
.GetReference("matches").Child("rooms").Child("room"+multiSetup.roomNum).Child("user2").Child("Xaxis")
.ValueChanged += HandleU1XChanged;
FirebaseDatabase.DefaultInstance
.GetReference("matches").Child("rooms").Child("room" + multiSetup.roomNum).Child("user2").Child("Zaxis")
.ValueChanged += HandleU1ZChanged;
}
else if (!multiSetup.isUserOne)
{
this.gameObject.transform.position = new Vector3(-7.5f, this.gameObject.transform.position.y, 7.5f);
FirebaseDatabase.DefaultInstance
.GetReference("matches").Child("rooms").Child("room" + multiSetup.roomNum).Child("user1").Child("Xaxis")
.ValueChanged += HandleU1XChanged;
FirebaseDatabase.DefaultInstance
.GetReference("matches").Child("rooms").Child("room" + multiSetup.roomNum).Child("user1").Child("Zaxis")
.ValueChanged += HandleU1ZChanged;
}
}
}
Here's a GIF of it in Action
As well as the delayed updating https://drive.google.com/open?id=1tv4BCfVsV6AIjEiKE1Umj4FfIyy-AG-R
以下是行动中的GIF以及延迟更新https://drive.google.com/open?id=1tv4BCfVsV6AIjEiKE1Umj4FfIyy-AG-R
1 个解决方案