Здравствуйте. Снова я задаю вопрос о решении моей проблемы с RPC (Около двух недель назад задавал уже этот вопрос, но ответа так и не получил). В этой тебе попытаюсь объяснить, как у меня все устроено, дабы получить адекватные ответы.
Начнем с самого начала: Есть у меня игровой объект, который "создается" игроком:
Все от того, что не понимаешь как работает фотон, и тем более шарп. Попытаюсь помочь. Приготовься Мои коменты будут жирным)
void OnTriggerEnter(Collider other) { if (other.tag == this.gameObject.tag){ var hppp = other.GetComponent<hp>(); //не понял зачем, можно спокойно удалять var oth = other; //var pw = other.GetComponent<PhotonView>(); //зачем? тоже не надо dva (oth); //теперь самое интересное. Давай посмотрим что здесь произайдет. //1. RPC выполниться у всех игроков(PhotonTargets.All) на текущем объекте(т.е. с этим Id, т.к. указан photonView). PhotonNetwork.RPC(photonView,"dva",PhotonTargets.All); } }
//очень бредово, потому что фотон не сможет передать аргумент такого типа. Можно даже не смотреть дальше [RPC] void dva(Collider dva){ var hp8 = dva.GetComponent<hp>(); hp8.curhp -= 500; }
Теперь разберемся, а как, собственно, правильно будет.
1. Вешаем на бомбу, у нее должен быть PhotonView 2. Код. Нам нужно отослать ВСЕМ игрокам RPC о том, что какой-то КОНКРЕТНЫЙ персонаж получит урон.
void OnTriggerEnter(Collider other){ //не знаю, что ща теги, но правильнее было бы проверить не является ли вошедший объект игроком. Или бомба тоже Player? if (other.tag == "Player"){ //самое тикавое. Говорим ВСЕМ вызвать dva у КОНКРЕТНОГО объекта, в данном случае, который нарвался на бомбу var pv = other.GetComponent<PhotonView>(); pv.RPC("dva",PhotonTargets.All); //Тут еще важно что-то с бомбой сделать. Либо удалить ее, либо отключить. Так как на других клиентах этот же игрок тоже наступит на бомбу и пошлются еще мессаджи. } }
3. Этот код нужно повесить на игрока, у игрока должен быть еще PhotonView скрипт. Вызовется он у всех клиентов на КОНКРЕТНОЙ объекте, т.е. как раз на том объекте, который встал на бомбу.
[RPC] void dva(){ //если этот код в другом скрипте, а не в hp, тогда получаем хп var myHp = gameObject.GetComponent<hp>(); myHp.curhp -= 500; }
4. Надеюсь теперь более понятно стало, как работают RPC