- Home /
 
               Question by 
               Mahaganr · Nov 18, 2016 at 07:43 AM · 
                networkingmultiplayerlanscoring  
              
 
              Trying to sync score on multiplayer LAN game
So I'm developing a game where two players pick up items and when the time limit is up, the person with the most items wins. I've done extensive reading and video-watching on UNET attributes but I still have some problems I can't solve. For starters, I want each player to be able to see their own score and their opponent's score.
My playercontroller script:
 using UnityEngine;
 using UnityEngine.Networking;
 using System.Collections;
 using UnityEngine.UI;
 
 public class PlayerController : NetworkBehaviour
 {
     public GameObject bulletPrefab;
     public Transform bulletSpawn;
     public GameObject sproutPrefab;
     public Transform sproutSpawn;
     public Image carried;
     public Text holding;
 
     bool goldAcorn = false;
     int acornStash = 0;
 
 
     private IEnumerator Wait()
     {
         yield return new WaitForSeconds(30);
     }
 
     public override void OnStartLocalPlayer()
     {
         GetComponent<MeshRenderer>().material.color = Color.gray;
     }
 
     void Update()
     {
         if (!isLocalPlayer)
         {
             GetComponent<PlayerController>().enabled = false;
             GetComponentInChildren<Camera>().enabled = false;
             return;
         }
 
         var x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f;
         var z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f;
 
         transform.Rotate(0, x, 0);
         transform.Translate(0, 0, z);
 
         if (goldAcorn != true) {
             carried.enabled = false;
         }
 
         if (goldAcorn == true)
         {
             carried.enabled = true;
 
             if (Input.GetKeyDown(KeyCode.Space))
             {
                 CmdFire();
             }
 
             if (Input.GetKeyDown(KeyCode.V))
             {
                 CmdPlant();
             }
         }
 
         if (this.gameObject.GetComponent<Timer>().seconds == 0 && this.gameObject.GetComponent<Timer>().minutes == 0)
         {
             GetComponent<PlayerController>().enabled = false;
         }
     }
 
     void OnCollisionEnter(Collision other)
     {
         if (isLocalPlayer)
         {
             if (other.gameObject.CompareTag("Acorn"))
             {
                 Destroy(other.gameObject);
                 acornStash += 1;
                 holding.text = "Acorns held: " + acornStash;
             }
             if (other.gameObject.CompareTag("Gold Acorn"))
             {
                 goldAcorn = true;
                 Destroy(other.gameObject);
             }
 
             if (other.gameObject.CompareTag("Base"))
             {
                 this.gameObject.GetComponent<Score>().AcornScore(acornStash);
                 holding.text = "Acorns held: 0";
                 acornStash = 0;
             }
 
             if (other.gameObject.tag == "Sprout")
             {
                 if (Input.GetKeyDown(KeyCode.B))
                 {
                     Destroy(other.gameObject);
                     this.gameObject.GetComponent<Score>().DigScore();
                 }
             }
 
             if (other.gameObject.tag == "Bullet")
             {
                 this.gameObject.GetComponent<Score>().TakeDamage();
             }
         }
         if (!isLocalPlayer)
         {
             if (other.gameObject.CompareTag("Acorn"))
             {
                 Destroy(other.gameObject);
                 acornStash += 1;
                 holding.text = "Acorns held: " + acornStash;
             }
             if (other.gameObject.CompareTag("Gold Acorn"))
             {
                 goldAcorn = true;
                 Destroy(other.gameObject);
             }
 
             if (other.gameObject.CompareTag("Base"))
             {
                 this.gameObject.GetComponent<Score2>().AcornScore(acornStash);
                 holding.text = "Acorns held: 0";
                 acornStash = 0;
             }
 
             if (other.gameObject.tag == "Sprout")
             {
                 if (Input.GetKeyDown(KeyCode.B))
                 {
                     Destroy(other.gameObject);
                     this.gameObject.GetComponent<Score2>().DigScore();
                 }
             }
 
             if (other.gameObject.tag == "Bullet")
             {
                 this.gameObject.GetComponent<Score2>().TakeDamage();
             }
         }
 
     }
 
     public void callGS()
     {
         if (isLocalPlayer)
         {
             this.gameObject.GetComponent<Score>().GoldScore();
         }
         if (!isLocalPlayer)
         {
             this.gameObject.GetComponent<Score2>().GoldScore();
         }
         }
 
     [Command]
     void CmdFire()
     {
         var bullet = (GameObject)Instantiate(
         bulletPrefab,
         bulletSpawn.position,
         bulletSpawn.rotation);
         bullet.transform.parent = transform;
 
         bullet.GetComponent<Rigidbody>().velocity = bullet.transform.forward * 10;
         NetworkServer.Spawn(bullet);
        Destroy(bullet, 5.0f);
         goldAcorn = false;
 
     }
 
     [Command]
     void CmdPlant()
     {
         var sprout = (GameObject)Instantiate(
             sproutPrefab,
             sproutSpawn.position,
             sproutSpawn.rotation);
         NetworkServer.Spawn(sprout);
         Destroy(sprout, 15.0f);
         goldAcorn = false;
 
         if (isLocalPlayer)
         {
             this.gameObject.GetComponent<Score>().SproutScore();
         }
         if (!isLocalPlayer)
         {
             this.gameObject.GetComponent<Score2>().SproutScore();
         }
     }
 }
One of my score scripts:
 using UnityEngine;
 using UnityEngine.UI;
 using UnityEngine.Networking;
 using System.Collections;
 using System;
 
 public class Score : NetworkBehaviour
 {
     [SyncVar(hook = "DisplayBlueScore")]
     public int blueScore = 0;
     public Text scoreBlue;
 
     void Awake()
     {
         DisplayBlueScore (blueScore);
     }
         
     [Server]
     public void GoldScore()
     {
         RpcGoldScore();
     }
 
     [Server]
     public void SproutScore()
     {
         RpcSproutScore();
     }
 
     [Server]
     public void DigScore()
     {
         RpcDigScore();
     }
 
     [Server]
     public void AcornScore(int stash)
     {
         RpcAcornScore(stash);
     }
         
     [Server]
     public void TakeDamage()
     {
         RpcTakeDamage ();
     }
 
     [ClientRpc]
     void RpcTakeDamage()
     {
         blueScore -= 10;
 
         if (blueScore <= 0)
         {
             blueScore = 0;
         }
         DisplayBlueScore(blueScore);
     }
 
     [ClientRpc]
     void RpcAcornScore(int stash)
     {
              blueScore += stash;
             DisplayBlueScore(blueScore);
     }
 
     [ClientRpc]
     void RpcGoldScore()
     {
             blueScore += 10;
             DisplayBlueScore(blueScore);
     }
 
     [ClientRpc]
     void RpcSproutScore()
     {
         for (int x = 0; x < 3; ++x)
             {
                 blueScore += 10;
                 DisplayBlueScore(blueScore);
                 StartCoroutine(Wait());
         }
     }
 
     [ClientRpc]
     void RpcDigScore()
     {
             blueScore += 10;
             DisplayBlueScore(blueScore);
     }
 
 
     public void DisplayBlueScore(int score)
     {
         scoreBlue.text = string.Format("B: {0}", score);
     }
 
     private IEnumerator Wait()
     {
         yield return new WaitForSeconds(5);
     }
 }
I have two similar Score scripts but one is redScore instead of blueScore. Side note: I'm also having problems with syncing the timer for the game.
I'll provide any extra information necessary. Thanks!
               Comment
              
 
               
              Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                