player sync

This commit is contained in:
brausjonas
2022-05-13 14:21:30 +02:00
parent 4e625ea185
commit 1fe20dbb5d
4 changed files with 79 additions and 2 deletions
@@ -130,6 +130,24 @@ public class Client
Send(new byte[]{6}); Send(new byte[]{6});
} }
//1.12 == [1] = 1, [2] = 12
public void SendPositionUpdate(Vector3 position)
{
string x = position.x.ToString("F");
string y = position.y.ToString("F");
string z = position.z.ToString("F");
byte xV = byte.Parse(x.Split(',')[0]);
byte xN = byte.Parse(x.Split(',')[1]);
byte yV = byte.Parse(y.Split(',')[0]);
byte yN = byte.Parse(y.Split(',')[1]);
byte zV = byte.Parse(z.Split(',')[0]);
byte zN = byte.Parse(z.Split(',')[1]);
Send(new byte[] { 7, xV, xN, yV, yN, zV, zN });
}
private void Receive() private void Receive()
{ {
while(true) while(true)
@@ -150,6 +168,21 @@ public class Client
{ {
world.AddPlayer(data[1]); world.AddPlayer(data[1]);
} }
if (data[0] == 7)
{
string xS = data[1] + "," + data[2];
string yS = data[3] + "," + data[4];
string zS = data[5] + "," + data[6];
float x = float.Parse(xS);
float y = float.Parse(yS);
float z = float.Parse(zS);
byte id = data[7];
world.UpdatePlayerPosition(new Vector3(x, y, z), id);
}
} }
} }
@@ -12,6 +12,7 @@ public class Player : MonoBehaviour
[SerializeField] private World world; [SerializeField] private World world;
private Camera camera = null; private Camera camera = null;
private Rigidbody rigidbody; private Rigidbody rigidbody;
private Vector3 lastPosition = new Vector3();
//network //network
private Client client = null; private Client client = null;
@@ -30,6 +31,15 @@ public class Player : MonoBehaviour
{ {
transform.Translate(Input.GetAxisRaw("Horizontal") * moveSpeed * Time.fixedDeltaTime, 0, transform.Translate(Input.GetAxisRaw("Horizontal") * moveSpeed * Time.fixedDeltaTime, 0,
Input.GetAxisRaw("Vertical") * moveSpeed * Time.fixedDeltaTime); Input.GetAxisRaw("Vertical") * moveSpeed * Time.fixedDeltaTime);
Vector3 position = transform.position;
if (lastPosition.x != position.x || lastPosition.y != position.y || lastPosition.z != position.z)
{
client.SendPositionUpdate(transform.position);
}
lastPosition = new Vector3(transform.position.x, transform.position.y, transform.position.z);
} }
private void Update() private void Update()
@@ -52,6 +52,15 @@ public class World : MonoBehaviour
} }
} }
public void UpdatePlayerPosition(Vector3 position, byte id)
{
otherPlayers.TryGetValue(id, out GameObject g);
if(g != null)
{
g.transform.position = position;
}
}
public void AddPlayer(byte id) public void AddPlayer(byte id)
{ {
playersToCreate.Enqueue(id); playersToCreate.Enqueue(id);
+27 -2
View File
@@ -12,6 +12,7 @@ public class Server
{ {
//game //game
private World world; private World world;
private List<Vector3> playerPositions = new List<Vector3>();
//network //network
private UdpClient client; private UdpClient client;
@@ -43,7 +44,7 @@ public class Server
//[0] = 4: disconnect player //[0] = 4: disconnect player
//[0] = 5: create new player in client //[0] = 5: create new player in client
//[0] = 6: player ready //[0] = 6: player ready
//[0] = 7: //[0] = 7: player position update
private void Receive() private void Receive()
{ {
@@ -75,7 +76,7 @@ public class Server
players.Remove(tempEndPoint); players.Remove(tempEndPoint);
Console.WriteLine(playerNames[i] + " left the game" + "\n"); Console.WriteLine(playerNames[i] + " left the game" + "\n");
playerNames.RemoveAt(i); playerNames.RemoveAt(i);
playerPositions.RemoveAt(i);
} }
} }
@@ -99,6 +100,7 @@ public class Server
//add player //add player
players.Add(endPoint); players.Add(endPoint);
playerNames.Add(name); playerNames.Add(name);
playerPositions.Add(new Vector3(0, 0, 0));
} }
if (data[0] == 3) if (data[0] == 3)
@@ -133,6 +135,29 @@ public class Server
} }
} }
} }
if (data[0] == 7)
{
string xS = data[1] + "," + data[2];
string yS = data[3] + "," + data[4];
string zS = data[5] + "," + data[6];
float x = float.Parse(xS);
float y = float.Parse(yS);
float z = float.Parse(zS);
int id = GetPlayerID(endPoint);
playerPositions[id] = new Vector3(x, y, z);
foreach (IPEndPoint e in players)
{
if (id != GetPlayerID(e))
{
Send(new byte[]{7, data[1], data[2], data[3], data[4], data[5], data[6], (byte)id}, e);
}
}
}
} }
catch (Exception e) catch (Exception e)
{ {