- Home /
Help|sync movement in multiplayer
hey, i have a fps project based FPS Kit 1.2. i'm trying to make it multiplayer, so i tried to sync the movement script (in the first time the script was "RigidController" but i switched it to "FPSWalker"-i will post the code in a minutes) by network.ismine but still, when i testing the movement in my comptuer (i open 2 exe files), i moving both of the players... here is the movement code:
/// This script moves the character controller forward
/// and sideways based on the arrow keys.
/// It also jumps when pressing space.
/// Make sure to attach a character controller to the same game object.
/// It is recommended that you make only one call to Move or SimpleMove per frame.
var speed : float = 6.0;
var jumpSpeed : float = 8.0;
var gravity : float = 20.0;
private var moveDirection : Vector3 = Vector3.zero;
function Update() {
if (networkView.isMine)
{
var controller : CharacterController = GetComponent(CharacterController);
if (controller.isGrounded) {
// We are grounded, so recalculate
// move direction directly from axes
moveDirection = Vector3(Input.GetAxis("Horizontal"), 0,
Input.GetAxis("Vertical"));
moveDirection = transform.TransformDirection(moveDirection);
moveDirection *= speed;
if (Input.GetButton ("Jump")) {
moveDirection.y = jumpSpeed;
}
}
// Apply gravity
moveDirection.y -= gravity * Time.deltaTime;
// Move the controller
controller.Move(moveDirection * Time.deltaTime);
}
if (!networkView.isMine)
{
enabled = false;
}
}
whats wrong with that?
insert Debug.Log() to block with input's reading. be sure that code is not executing on remote players
what do you mean "remote players"? the script is on the prefab of every player that spawned..
player instantiated for every player. and an "author" or "owner" should control this player only. others just see this player. and this player for others is "remote"
so how can i maked it bo be my owner, and for others to be romoted?
Answer by ScroodgeM · Jul 27, 2012 at 04:36 PM
first. insert this:
void OnConnectedToServer() { Network.Instantiate(SpaceCraft, this.transform.position, this.transform.rotation, 1); }
and remove any other instantiators
now new player should be created every time that somebody connects to server
server should not control players. clients should.
i saw a tutorial of movment in multiplayer:
using UnityEngine; using System.Collections;
public class PlayerControl : $$anonymous$$onoBehaviour { public float speed = 5; // Use this for initialization void Start () {
if(!networkView.is$$anonymous$$ine)
{
enabled = false;
}
}
// Update is called once per frame void Update () { if(networkView.is$$anonymous$$ine) { Vector3 moveDir = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical")); transform.Translate(speed moveDir Time.deltaTime); } }
void OnSerializeNetworkView(BitStream stream, Network$$anonymous$$essageInfo info)
{
if (stream.isWriting)
{
Vector3 pos = transform.position;
stream.Serialize(ref pos);
}
else
{
Vector3 posRec = Vector3.zero;
stream.Serialize(ref posRec);
transform.position = posRec;
}
}
}
this is the script that was in the tutorial... but still i can to control the two players...
i'm sure script from tutorial is O$$anonymous$$.
again. you have a script where you apply user's inputs to character. just pay attention to it and be sure it doesn't work if character instantiated is remote (other player's)
okay, but by the way, this is my spawning script:
var SpaceCraft : Transform;
function OnNetworkLoadedLevel () {
// Instantiating SpaceCraft when Network is loaded
Network.Instantiate(SpaceCraft, this.transform.position, this.transform.rotation, 1);
}
function OnPlayerDisconnected (player : NetworkPlayer) {
Network.RemoveRPCs(player, 0);
Network.DestroyPlayerObjects(player);
}
function OnServerInitialized(){
//Spawn a player for the server itself
Network.Instantiate(SpaceCraft, this.transform.position, this.transform.rotation, 1);
}
which object does player should control? why do you initialize 'SpaceCraft' OnServerInitialized and OnNetworkLoadedLevel? what is this object and what does it doing?
SpaceCraft is another name for player prefab.. the player have couple of cameras... like main camera and weapon camera... and the player have weapons... that's it.
Your answer
Follow this Question
Related Questions
Set unity process as server and client? 0 Answers
Can you create a Stand alone server for your game? 0 Answers
Unity networking tutorial? 6 Answers
Networking, players can't see each others movements 1 Answer