@Alex_Schultz

Как сделать изменение переменной и текста у всех игроков Unity Photon Pun 2?

У всех игроков есть кнопка, int переменная "gen" равная 0 и текст на канвасе. Если кто-то из игроков нажмет эту кнопку, gen должен быть равен 1 и текст должен меняться на "done" у всех игроков. Как реализовать?
  • Вопрос задан
  • 202 просмотра
Решения вопроса 1
@Ezekiel4
Охотник на пиратов и сборщик монолитов
Есть такой механизм - 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();
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы