Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice
  3. Join us on November 16th, 2023, between 1 pm and 9 pm CET for Ask the Experts Online on Discord and on Unity Discussions.
    Dismiss Notice

Please help syncing color over network

Discussion in 'Multiplayer' started by Capnarchie, Jun 14, 2016.

  1. Capnarchie

    Capnarchie

    Joined:
    Nov 1, 2015
    Posts:
    62
    i made a capture the point script but im trying to convert it so it would work in multiplayer and im having trouble because nothing is working
    Code (csharp):
    1.  
    2. using UnityEngine;
    3. using System.Collections;
    4. using UnityEngine.Networking;
    5.  
    6. public class CapController : NetworkBehaviour
    7. {
    8.  
    9.     public bool blueTeam = false;
    10.     public bool redTeam = false;
    11.  
    12.  
    13.     private float redcaptureperc = 0;
    14.     private float bluecaptureperc = 0;
    15.  
    16.     public GameObject flagRed;
    17.     public GameObject flagBlue;
    18.     public GameObject flagNeutral;
    19.  
    20.     public Rect capturebox = new Rect(10, 10, 300, 25);
    21.  
    22.     void Start()
    23.     {
    24.         flagNeutral.GetComponent<MeshRenderer>().enabled = true;
    25.     }
    26.     [Server]
    27.     public void ServerUpdate()
    28.     {
    29.         if (redcaptureperc != 100)
    30.         {
    31.             flagRed.GetComponent<MeshRenderer>().enabled = true;
    32.             flagBlue.GetComponent<MeshRenderer>().enabled = false;
    33.             flagNeutral.GetComponent<MeshRenderer>().enabled = false;
    34.         }
    35.        
    36.         if (bluecaptureperc != 100)
    37.         {
    38.             flagRed.GetComponent<MeshRenderer>().enabled = false;
    39.             flagBlue.GetComponent<MeshRenderer>().enabled = true;
    40.             flagNeutral.GetComponent<MeshRenderer>().enabled = false;
    41.         }
    42.  
    43.         if ((redcaptureperc >= 50 && bluecaptureperc >= 51) || (redcaptureperc >= 51 && bluecaptureperc >= 50))
    44.         {
    45.             flagRed.GetComponent<MeshRenderer>().enabled = false;
    46.             flagBlue.GetComponent<MeshRenderer>().enabled = false;
    47.             flagNeutral.GetComponent<MeshRenderer>().enabled = true;
    48.         }
    49.     }
    50.  
    51.    
    52.     [ClientRpc]
    53.  
    54.     public void RpcUpdate()
    55.     {
    56.         if (redcaptureperc != 100)
    57.         {
    58.             flagRed.GetComponent<MeshRenderer>().enabled = true;
    59.             flagBlue.GetComponent<MeshRenderer>().enabled = false;
    60.             flagNeutral.GetComponent<MeshRenderer>().enabled = false;
    61.         }
    62.  
    63.         if (bluecaptureperc != 100)
    64.         {
    65.             flagRed.GetComponent<MeshRenderer>().enabled = false;
    66.             flagBlue.GetComponent<MeshRenderer>().enabled = true;
    67.             flagNeutral.GetComponent<MeshRenderer>().enabled = false;
    68.         }
    69.  
    70.         if ((redcaptureperc <= 50 && bluecaptureperc <= 51) || (redcaptureperc >= 51 && bluecaptureperc >= 50))
    71.         {
    72.             flagRed.GetComponent<MeshRenderer>().enabled = false;
    73.             flagBlue.GetComponent<MeshRenderer>().enabled = false;
    74.             flagNeutral.GetComponent<MeshRenderer>().enabled = true;
    75.         }
    76.     }
    77.  
    78.  
    79.     void Update()
    80.     {
    81.         if (blueTeam == true)
    82.         {
    83.             bluecaptureperc += Time.deltaTime * 20;
    84.             redcaptureperc -= Time.deltaTime * 20;
    85.         }
    86.  
    87.         if (redTeam == true)
    88.         {
    89.             redcaptureperc += Time.deltaTime * 20;
    90.             bluecaptureperc -= Time.deltaTime * 20;
    91.         }
    92.  
    93.         if (redTeam == true && blueTeam == true)
    94.         {
    95.             redcaptureperc = redcaptureperc;
    96.             bluecaptureperc = bluecaptureperc;
    97.         }
    98.  
    99.         if (redcaptureperc >= 100)
    100.         {
    101.             redcaptureperc = 100;
    102.             flagRed.GetComponent<MeshRenderer>().enabled = true;      
    103.             flagBlue.GetComponent<MeshRenderer>().enabled = false;    
    104.             flagNeutral.GetComponent<MeshRenderer>().enabled = false;
    105.  
    106.         }
    107.  
    108.         if (bluecaptureperc >= 100)
    109.         {
    110.             bluecaptureperc = 100;
    111.             flagRed.GetComponent<MeshRenderer>().enabled = false;
    112.             flagBlue.GetComponent<MeshRenderer>().enabled = true;
    113.             flagNeutral.GetComponent<MeshRenderer>().enabled = false;
    114.  
    115.         }
    116.  
    117.         if ((redcaptureperc <= 50 && bluecaptureperc <= 51) || (redcaptureperc >= 51 && bluecaptureperc >= 50))
    118.         {
    119.             flagRed.GetComponent<MeshRenderer>().enabled = false;
    120.             flagBlue.GetComponent<MeshRenderer>().enabled = false;
    121.             flagNeutral.GetComponent<MeshRenderer>().enabled = true;
    122.  
    123.         }
    124.  
    125.         if (redcaptureperc <= 0)
    126.         {
    127.             redcaptureperc = 0;
    128.         }
    129.  
    130.         if (bluecaptureperc <= 0)
    131.         {
    132.             bluecaptureperc = 0;
    133.         }
    134.     }
    135.    
    136.     void OnGUI()
    137.     {
    138.         GUI.Box(capturebox, "Red Cap " + ((int)redcaptureperc).ToString() + " Blue Cap " + ((int)bluecaptureperc).ToString());
    139.     }
    140. }
    when a player enters a trigger area the player tagged red or blue start capturing the area and flag will change color to red or blue depending what teams percentage is 100. but the flags color change isnt sent to all the clients that are playing.

    I have added a network identity to the flags and made it local player only and its still not working. WHAT AM I DOING WRONG? networking is so annoying.
     
  2. SuperNeon

    SuperNeon

    Joined:
    Mar 16, 2014
    Posts:
    85
    Hi,

    You are not syncing any value and the RpcUpdate look like it is never called too.

    You can call the RpcUpdate from the ServerUpdate (which is not called too ?) with the redcaptureperc and bluecaptureperc in arguments to update the client values or use the SyncVar with a hook.