- Home /
network fps HELP ASAP
OK when i have a player join into the game i see mine but it screw up the control and i lent up controlling both i ve been try to fix it for about 5 day now and i get really frustrated any help would be nice
Answer by syclamoth · Jan 17, 2012 at 03:17 AM
The problem is that if you are instantiating the same prefab for your character on both clients, unless you have something to check that it is currently on it's owner's client, your keyboard inputs will be received by both players! You need to put all of your player inputs into a block starting with-
if(networkView.isMine)
{
// do player inputs
}
This way, it will only listen to the key inputs if it detects that it is supposed to be owned by that client.
I sorry i know this sight isnt for free stuff but can you help me with and do like a unity paggage it would be great :D
@tylerdouglas: after 5 questions you should know that Answers should only be used to answer the question. If you found the solution yourself, feel free to post an answer, but for everything else use comments or edit your question.
Also to quote the FAQs:
Don't write things that will be irrelevant in a few days. Writing that "This is urgent!" will probably not get you faster answers, but it may make people frown at your question.
Answer by conflictbliz · Jan 17, 2012 at 03:13 AM
it is because you are using the same computer i thought it was just me untill i got my laptop and pc and tried them both on an server, if you want i would be happy to test it out with you.
Answer by tyler.douglas · Jan 17, 2012 at 05:41 AM
private var motor : CharacterMotor;
// Use this for initialization function Awake () { motor = GetComponent(CharacterMotor); }
// Update is called once per frame function Update () {
if(NetworkView.isMine){
var directionVector = new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"));
if (directionVector != Vector3.zero) {
// Get the length of the directon vector and then normalize it
// Dividing by the length is cheaper than normalizing when we already have the length anyway
var directionLength = directionVector.magnitude;
directionVector = directionVector / directionLength;
// Make sure the length is no bigger than 1
directionLength = Mathf.Min(1, directionLength);
// Make the input vector more sensitive towards the extremes and less sensitive in the middle
// This makes it easier to control slow speeds when using analog sticks
directionLength = directionLength * directionLength;
// Multiply the normalized direction vector by the modified length
directionVector = directionVector * directionLength;
}
// Apply the direction to the CharacterMotor
motor.inputMoveDirection = transform.rotation * directionVector;
motor.inputJump = Input.GetButton("Jump");
}
}
// Require a character controller to be attached to the same game object @script RequireComponent (CharacterMotor) @script AddComponentMenu ("Character/FPS Input Controller")
so like this?
Yes, you're on the right track. $$anonymous$$ake sure that a given player's movement is properly synchronised on all clients.