Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by JPower · Feb 01, 2018 at 01:51 PM · c#multiplayer-networking

Unity UNET Multiplayer Networking. Problem with Host and Client not being able to control their respective characters.

Hi everyone. I'm James and this is my first question I've ever asked so apologies if I do anything incorrectly.

I have a simple 2 player Multiplayer level using UNET and the Network Lobby asset from the asset store.

The problem I have is when the players spawn in the host is able to control it's player but the client can only control the host players player. What I want is for the players to only be able to control their respective player.

Movement is accomplished through 2 scripts TP_Controller and TP_Motor. These call on the Character controller component of the player prefab.

 //This is the code for TP_Controller
 
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class TP_Controller : MonoBehaviour {
 
     public static CharacterController CharacterController;    //reference to the Iroks character controller
     public static TP_Controller Instance;    //refenence to the Tp_Controller
 
     void Awake () {
         
         CharacterController = GetComponent ("CharacterController") as CharacterController;    //cast the return value of getComponent to type CharacterController
         Instance = this;    //point to this instance of TP_Controller
     
         TP_Camera.UseExistingOrCreateNewMainCamera ();
     }
     
 
     void Update () {
 
         if (Camera.main == null)
             return;
 
 
         GetLocomotionInput ();
         HandleActionInput ();
 
         TP_Motor.Instance.UpdateMotor ();
     }
 
     //handle press key for jump
     void HandleActionInput(){
 
         if (Input.GetButton ("Jump"))
             Jump ();
     }
 
     void Jump(){
         TP_Motor.Instance.Jump ();
     }
 
     void GetLocomotionInput(){
 
         var deadZone = 0.1f;
         //acceleration
         TP_Motor.Instance.verticalVelocity = TP_Motor.Instance.moveVector.y;
 
         TP_Motor.Instance.moveVector = Vector3.zero;    //stops motion adding on each other
                                                         //zero the moveVector value as it is re calculated each frame
 
         //move forward/backwards only takes place on the z axis
         //Vertical checks for the w and s keys
         if ((Input.GetAxis ("Vertical") > deadZone) || (Input.GetAxis ("Vertical") < -deadZone)) {
             TP_Motor.Instance.moveVector += new Vector3 (0, 0, Input.GetAxis ("Vertical"));
         }
 
         //move left/right only takes place on the x axis
         //Horizontal checks for the w and s keys
         if ((Input.GetAxis ("Horizontal") > deadZone) || (Input.GetAxis ("Horizontal") < -deadZone)) {
             TP_Motor.Instance.moveVector += new Vector3 (Input.GetAxis ("Horizontal"),0, 0 );
         }
     }    
 }



 //This is the code for TP_Motor
 
 
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class TP_Motor : MonoBehaviour {
 
     public static TP_Motor Instance;    
     public float moveSpeed = 10f;
 
     public float gravity = 21f;
     public float terminalVelocity = 20f;
     public float jumpSpeed = 6f;
 
     public Vector3 moveVector { get; set; }
     public float verticalVelocity { get; set;}
 
 
     void Awake () {
         Instance = this;
     }
 
     void ApplyGravity(){
         //check terminal velocity
         if (moveVector.y > -terminalVelocity) {
             //apply gravity on y axis (downward vector)
             moveVector = new Vector3(moveVector.x, moveVector.y - gravity * Time.deltaTime, moveVector.z);
         }
         if (TP_Controller.CharacterController.isGrounded && moveVector.y < -1)
             moveVector = new Vector3(moveVector.x, -1, moveVector.z);
         
     }
 
     public void Jump(){
         if (TP_Controller.CharacterController.isGrounded)
             verticalVelocity = jumpSpeed;
     }
     
     //public so TP_Controller can access this method
     public void UpdateMotor () {
         ProcessMotion ();
         SnapAllignCharacterWithCamera ();
     }
 
 
 
     void ProcessMotion(){
 
         //Transform MoveVector to WorldSpace
         moveVector = transform.TransformDirection(moveVector);
 
         //Normalize MoveVector if Magnitude > 1
         if(moveVector.magnitude > 1){
             moveVector = Vector3.Normalize (moveVector);    //assign moveVector the value of the normalized moveVecotr
         }
 
         //Multiply MoveVector by MoveSpeed
         moveVector *= moveSpeed;
 
         //Multiply MoveVector by Delta Time
 
         //reapply vertical velocity to the y of moveVector
         moveVector = new Vector3(moveVector.x, verticalVelocity, moveVector.z);
 
         ApplyGravity ();
 
         //Move the Irok in World Space
         TP_Controller.CharacterController.Move(moveVector * Time.deltaTime);
 
     }
 
     void SnapAllignCharacterWithCamera(){
 
         //only snap camera to player if moving
 
         if (moveVector.x != 0 || moveVector.z != 0) {
             transform.rotation = Quaternion.Euler (transform.eulerAngles.x,
                 Camera.main.transform.eulerAngles.y, transform.eulerAngles.z);
         }
     }
 }


I have a script SetLocalPlayer which checks for the local version of the player and enables components which should allow movement. This is where I think the problem lies. I don't think what is inside the isLocalPlayer loop is doing what it's meant to.

 //Code for SetLocalPlayer
 
 
 using UnityEngine;
 using System.Collections;
 using UnityEngine.Networking;
 
 public class SetLocalPlayer : NetworkBehaviour {
 
     [SyncVar]
     public string pname = "player";
 
     [SyncVar]
     public Color playerColor;
 
     [SyncVar]
     public Quaternion rotation;
 
 
     //[SyncVar] 
     //public Vector3 mirrorRotate;        //
 
     bool collided = false;
     
     [SyncVar]
     public GameObject otherObj;
 
 
     // Use this for initialization
     void Start()
     {
         
         if (isLocalPlayer) {
             
             //enable local player script with new movement
             GetComponent<TP_Controller> ().enabled = true;
 
             if (GetComponent<TP_Controller> ().enabled == true)
                 Debug.Log ("TP_Controller is enabled");
             else
                 Debug.Log ("TP_Controller is disabled");
 
 
             GetComponent<TP_Motor> ().enabled = true;
 
             if (GetComponent<TP_Motor> ().enabled == true)
                 Debug.Log ("TP_Motor is enabled");
             else
                 Debug.Log ("TP_Motor is disabled");
 
             this.GetComponent<CharacterController>().enabled = true;
 
             
 
             //this works Camera moves to correct target
             //TP_Camera script used to select the player for the camera to target. targetLookAt is a child of the player prehab.
             //Camera script looks for and targets this object.
             Camera.main.GetComponent <TP_Camera> ().TargetLookAt = this.transform.GetChild (0).transform;
 
 
         }
 
         //need botth players color to update regardless of localPlayer
         //this works Player colour updated correctly
 
             Renderer rend = GetComponent<Renderer> ();
             rend.material.shader = Shader.Find ("MK/Glow/Selective/Transparent/Diffuse");
             Debug.Log ("Found shader");
             rend.material.SetColor ("_MKGlowColor", playerColor);    
     }
 }

Lastly here is a screenshot of my player prefab with the necessary components attached. alt text

Any help is greatly appreciated. Thank you all in advance.

irokprefab.png (63.7 kB)
Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

0 Replies

· Add your reply
  • Sort: 

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

436 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

Related Questions

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

NetworkMatch creating match not being found when doing ListMatches 0 Answers

Illuminating a 3D object's edges OnMouseOver (script in c#)? 1 Answer

Problems with Scene Change networking Unet 0 Answers


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges