Can't Add OnClick.Add.Listener To Multiplayer UI

I can’t add listener to player’s UI button.Somehow I can get button name with:

 GameObject.Find("Button").GetComponent<Button>().name

But,adding listeners always fail.

Other elements like text fields are working flawlessly.

UI elements are editor added so I’m not instantiating them. Local player authority is set.I can use CmdPressButton methode with:

if (Input.GetKey(KeyCode.Space))

Here is the only script I’m using.

using UnityEngine;
using System.Collections;
using UnityEngine.Networking;
using UnityEngine.UI;

public class Player : NetworkBehaviour {
    public int score;
    public Text scoreText;
    
    void Start()
    {
        if(isServer)
        {
            GameObject.Find("Button").GetComponent<Button>().onClick.RemoveAllListeners();
            GameObject.Find("Button").GetComponent<Button>().onClick.AddListener(CmdPressButton);
        }
        else
        {
            if (isLocalPlayer)
            {
                scoreText = GameObject.Find("Score").GetComponent<Text>();
                scoreText.text = "Zero.";
                GameObject.Find("Button").GetComponent<Button>().onClick.RemoveAllListeners();
                GameObject.Find("Button").GetComponent<Button>().onClick.AddListener(CmdPressButton);               
            }
        }        
    }


    //Server Side.
    [Server]
    void UpdateScore()
    {
        score++;
        OnScoreChanged();
    }

    [Server]
    void OnScoreChanged()
    {
        RpcUpdateLocalScore(score);
    }

    [Command]
    void CmdPressButton()
    {
        score += 123;
        OnScoreChanged();
    }

    //Client Side.   
    [ClientRpc]
    void RpcUpdateLocalScore(int newScore)
    {
        if (isLocalPlayer && !isServer)
        {
            scoreText.text = newScore.ToString();
        }
    }
}

Changing

.onClick.AddListener(CmdPressButton);

to

.onClick.AddListener(() => CmdPressButton());

solved client click issue.Now clients can issue commands.However server is not able to click.When server clicks it raises score of last joining client.

Just a guess, but have you tried moving those lines from Start() to:

public override void OnStartLocalPlayer()

I followed your example code and my OnStartLocalPlayer() looks like:

public override void OnStartLocalPlayer()
    {
        base.OnStartLocalPlayer();
        gameButton.onClick.RemoveAllListeners();
        gameButton.onClick.AddListener(() => CmdPressButton());
    }

And this worked for me, so thank you :slight_smile: