Четверг, 28 Марта 2024, 16:07

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » И снова я о своем RPC [РЕШЕНО] (Photon Cloud)
И снова я о своем RPC [РЕШЕНО]
lakorisДата: Четверг, 30 Января 2014, 22:33 | Сообщение # 1
постоянный участник
Сейчас нет на сайте
Здравствуйте. Снова я задаю вопрос о решении моей проблемы с RPC (Около двух недель назад задавал уже этот вопрос, но ответа так и не получил). В этой тебе попытаюсь объяснить, как у меня все устроено, дабы получить адекватные ответы.

Начнем с самого начала:
Есть у меня игровой объект, который "создается" игроком:
Код
PhotonNetwork.Instantiate("[b]BombModel[/b]", bombSpawnPoint.transform.position, bombSpawnPoint.transform.rotation, 0);

При входе в триггер этого объекта выполняется такой кусок кода (скрипт висит на BombModel):
Код

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);
     PhotonNetwork.RPC(photonView,"dva",PhotonTargets.All);

   }

    }
   [RPC]
   void dva(Collider dva){
    var hp8 = dva.GetComponent<hp>();
    hp8.curhp -= 500;
   }



hp - это скрипт, висящий на игроке, содержит инфу о хп, в том числе и переменную curhp.
если все это дело запустить без:
Код
PhotonNetwork.RPC(photonView,"dva",PhotonTargets.All);

то все будет работать, но только без передачи по сети. (а мне нужно передавать по сети)
если же использовать RPC, то выскакивает ошибка:



Компонент PhotonView висит на объекте Bomb Model.

Давайте вместе подумаем, что это за ерунда и как ее решить. Не ленитесь помогать новичкам, ведь может и новички когда-то помогут вам (норм сказанул).

Добавлено (30.01.2014, 22:33)
---------------------------------------------
Ап.


Сообщение отредактировал lakoris - Пятница, 31 Января 2014, 14:41
afrokickДата: Пятница, 31 Января 2014, 05:23 | Сообщение # 2
участник
Сейчас нет на сайте
Все от того, что не понимаешь как работает фотон, и тем более шарп. Попытаюсь помочь. Приготовься
Мои коменты будут жирным)

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
lakorisДата: Пятница, 31 Января 2014, 14:21 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
afrokick, Огромное спасибо, помог) Да, теперь более понятен RPC стал smile
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » И снова я о своем RPC [РЕШЕНО] (Photon Cloud)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг