Есть такой механизм - RPC (remote procedure call). По своей сути, это сообщение, которое содержит некоторую информацию: сущность процедуры, данные, источник и цели вызова.
Для начала на объект со скриптом добавьте PhotonView - у него мы и вызовем метод .RPC(), куда передадим всё что нам нужно. Выглядеть это будет как-то так:
using UnityEngine;
using UnityEngine.UI;
using Photon.Pun;
public class ButtonController : MonoBehaviourPunCallbacks {
public int gen = 0;
public Text statusText;
private PhotonView photonView;
private void Start() {
photonView = GetComponent<PhotonView>();
}
// привязывается к кнопке
public void OnButtonClick() {
if (!photonView.IsMine)
return;
gen = 1;
UpdateStatusText();
photonView.RPC(nameof(SyncGen), RpcTarget.All, gen);
}
// локально меняет текст
private void UpdateStatusText() {
if (statusText != null)
statusText.text = (gen == 1) ? "done" : "not done";
}
// вот этот метод запускается сразу у всех копий этого объекта на всех его инстансах в текущей сессии
[PunRPC]
private void SyncGen(int newGenValue) {
gen = newGenValue;
UpdateStatusText();
}
}