Ich erstelle ein Multiplayer-Spiele mit Raumschiffen, die Sie betreten können. Ich verwende Photon für Multiplayer.Mehrspieler-Rigidbody-Bewegung nicht synchronisiert (Photon)
Wie Sie auf dem Bild unten sehen können, habe ich in PhotonView Schiff Rigidbody, Transform und gleich auf Player.
Aber wenn ich das Schiff betrete, sieht die Sicht von einem anderen Spieler extrem lückig aus (wenn ich das Schiff schiebe, wird es normal synchronisiert). Hier ist eine video zeigt das Problem.
Mein Player ist über eine feste Verbindung mit dem Schiff verbunden.
Hier ist meine verkürzte Code:
void Update()
{
//Raycast to check for ship
if ((Physics.Raycast(look, out hit, 9f) && hit.collider.tag == "Ship")
{
//set variables
shipObj = hit.collider.gameObject.transform.parent.gameObject;
ship = shipObj.GetComponent<SmallShipController>();
if (Input.GetKeyDown(KeyCode.R))
{
//check if ship is driven
if (!ship.driven)
{
driving = true;
ship.ChangeDriven();
transform.position = ship.driverSeat.transform.position;
transform.rotation = ship.driverSeat.transform.rotation;
playersCamera.transform.position = ship.thirdPersonPosition.position;
playersCamera.transform.rotation = ship.thirdPersonPosition.rotation;
rb.detectCollisions = false;
rb.mass = 0;
rb.drag = 0;
rb.angularDrag = 0;
photonView.RPC("SetJoint", PhotonTargets.AllBuffered, shipObj.GetPhotonView().viewID);
}
}
if (driving)
{
if (Input.GetKey(KeyCode.A))
{
ship.rb.AddRelativeForce(Vector3.left * ship.moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.W))
{
ship.rb.AddRelativeForce(Vector3.forward * ship.moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.D))
{
ship.rb.AddRelativeForce(Vector3.right * ship.moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.S))
{
ship.rb.AddRelativeForce(Vector3.back * ship.moveSpeed * Time.deltaTime);
}
if (Input.GetKey(KeyCode.Space))
{
ship.rb.AddRelativeForce(Vector3.up * ship.moveSpeed * Time.deltaTime * 0.5f);
}
if (Input.GetKey(KeyCode.LeftShift))
{
ship.rb.AddRelativeForce(Vector3.down * ship.moveSpeed * Time.deltaTime * 0.5f);
}
if (Input.GetKey(KeyCode.Q))
{
ship.rb.AddRelativeTorque(new Vector3(0, 0, Time.deltaTime * ship.moveSpeed));
}
if (Input.GetKey(KeyCode.E))
{
ship.rb.AddRelativeTorque(new Vector3(0, 0, Time.deltaTime * -ship.moveSpeed));
}
if (Input.GetAxisRaw("Mouse Y") > 0.5f || Input.GetAxisRaw("Mouse Y") < 0.5f || Input.GetAxisRaw("Mouse X") > 0.5f || Input.GetAxisRaw("Mouse X") < 0.5f)
{
ship.rb.AddRelativeTorque(new Vector3(-Input.GetAxis("Mouse Y"), Input.GetAxis("Mouse X"), 0) * Time.deltaTime * ship.rotationSpeed);
}
if (Input.GetKey(KeyCode.C))
{
ship.rb.velocity = ship.rb.velocity * 0.99f;
ship.rb.angularVelocity = ship.rb.angularVelocity * 0.99f;
}
}
}
}
[PunRPC]
void SetJoint(int shipView)
{
shipObj = PhotonView.Find(shipView).gameObject;
shipObj.GetComponent<FixedJoint>().connectedBody = rb;
}