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();
}
}
}
Answer by Derebeyi · Apr 27, 2016 at 09:26 PM
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.
Answer by VarroPipes · Apr 25, 2017 at 07:59 PM
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 :)
Your answer
Follow this Question
Related Questions
Can i update button listener? 0 Answers
Sending Command from client to server Using an UI button 0 Answers
How to write and return a call for AddListener 1 Answer
Add listenner to button in loop error 0 Answers
using a button witout pressing it ? 1 Answer