Форум программистов, компьютерный форум, киберфорум
Unity, Unity3D
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
52 / 35 / 16
Регистрация: 03.08.2019
Сообщений: 389

PHoton rpc срабатывает больше одного раза

06.11.2022, 11:26. Показов 1444. Ответов 26

Студворк — интернет-сервис помощи студентам
Товарищи, помогите разобраться с довольно не приятной проблемой.

Перекопал гугл вдоль и поперек..
Написал на оф форуме фотона.. там на меня обиделись за "a week studying the crooked documentation - Oh, thanks." какие нежные...)))
оф дискорд тоже руками разводят мол мы только догадываемся.. о чем они догадываются - не понятно, тк только раздают направо и налево советы по оптимизации кода.

По сути проблемы.. Должно быть: один выстрел - "один труп", точнее минус один, два блока
C#
1
2
3
4
5
6
7
8
9
10
private void OnTriggerEnter2D(Collider2D coll)
  {
    if (coll.CompareTag("Player") || coll.CompareTag("Enemy") || coll.CompareTag("GameWall") || coll.CompareTag("swall") || coll.CompareTag("bwall"))
    {
 
      gameObject.SetActive(false);
      Destroy(gameObject, 2f);
 
    }
  }
знаю что нет синхронизации, но это я понял после запуска игры



после чего поправил код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
private void OnTriggerEnter2D(Collider2D coll)
    {
        if (coll.CompareTag("Player") ||
            coll.CompareTag("Enemy") ||
            coll.CompareTag("Bullet") ||
            coll.CompareTag("GameWall") ||
            coll.CompareTag("swall") ||
            coll.CompareTag("bwall"))
        {
            if (photonView)
                photonView.RPC("DelBullet", RpcTarget.AllViaServer);
        }
    }
[PunRPC]
    void DelBullet()
    {
        //PhotonNetwork.Destroy(gameObject);
        gameObject.SetActive(false);
        Destroy(gameObject);
    }
запустил игру и получил: один выстрел - много трупов. точнее пуля не удаляется при попадании в триггер первого блока(стены), а продолжает движение и в итоге сносит два блока и более. для полного "счастья" если за стальными есть кирпич, то пуля пролетает два стальных блока и сносит кирпичный блок



photonView.IsMine не помогает тк пули выпускают игроки и ИИ. к тому же получаю ошибку Object reference not set to an instance of an object.

Принимаются любые советы, предположения и тд.....
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.11.2022, 11:26
Ответы с готовыми решениями:

Кнопка не срабатывает больше одного раза
Здравствуйте! Я тотальный новичок и, вероятно, упускаю нечто совсем очевидное, но все же прошу помочь. Пытаюсь создать приложение,...

FileSystemWatcher - Created срабатывает больше одного раза
Доброго времени суток! Есть метод который выполняет копирование файла на удаленном *nix сервере из недоступной папки на шару (использую...

Триггер: не позволять больше одного раза в день покупать у одного продавца одному и тому же клиенту
Здравствуйте! Помогите пожалуйста написать триггер, который не позволяет больше одного раза в день покупать у одного продавца одному и...

26
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
06.11.2022, 11:45
жесть. Н о у них же тоже тэг isWall вот и уничтожаются хз почему так
Fantom1987,

Так с поворотом и не получилось ничего?
0
52 / 35 / 16
Регистрация: 03.08.2019
Сообщений: 389
06.11.2022, 11:49  [ТС]
В консоли видно что RPC отправляется два и более раза за 1 выстрел, что является главной причиной такого поведения
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
06.11.2022, 11:54
Fantom1987, думаю надо так делать
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void OnTriggerEnter2D(Collider2D coll)
    {
        if (coll.CompareTag("Player") ||
            coll.CompareTag("Enemy") ||
            coll.CompareTag("Bullet") ||
            coll.CompareTag("GameWall") ||
            coll.CompareTag("swall") ||
            coll.CompareTag("bwall"))
        {
            if (photonView)
                photonView.RPC("DelBullet", RpcTarget.AllViaServer, coll.GetComponent<PhotonView>().photonViewId);
        }
    }
[PunRPC]
    void DelBullet(int id)
    {
     if(id == photonView.id ){  // имеетса ввиду что photonView блока
//PhotonNetwork.Destroy(gameObject);
        gameObject.SetActive(false);
        Destroy(gameObject);
}
    }
1
52 / 35 / 16
Регистрация: 03.08.2019
Сообщений: 389
06.11.2022, 11:57  [ТС]
Цитата Сообщение от zhunshun Посмотреть сообщение
Так с поворотом и не получилось ничего?
эту беду я давно решил) хотя с синхронизацией у фотона мягко говоря беда))) если не мастер клиент, то жесть просто.. движение игроков норм, а вот движение врагов это слайд шоу
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
06.11.2022, 12:03
Fantom1987, а у тебя как синхрон идет? через IObservable или PhotonTransformView ?
0
52 / 35 / 16
Регистрация: 03.08.2019
Сообщений: 389
06.11.2022, 12:10  [ТС]
zhunshun, PhotonTransformView
IObservable встречал в фотонаниматоре когда делал поворот за счет анимации. Но последнее, скажем так, обновление логики врагов не требует участия анимации для поворота тк все вполне адекватно поворачивается
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
06.11.2022, 12:20
Fantom1987, Да я честно говоря удивлен почему PhotonTransformView не справляется с поворотами. Вроде таких багов не должно быть, там точно галочки стоят на ротеишен игрался со значениями?

Добавлено через 3 минуты
я имею ввиду IObservable это когда реалезуешь его в коде чтобы заработала функция OnPhotonSerialiseView вот типа как здесь
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using Photon.Pun;
 
public class Health : MonoBehaviour, IPunObservable
{
 
    public int health;
 
 
    public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
 
        if (stream.IsWriting)
        {
            stream.SendNext(health);
 
        }
        else
        {
            health = (int)stream.ReceiveNext();
        }
    }
 
 
    public void TakeDamage(int Damage)
    {
        health -= Damage;
    }
   
}
0
52 / 35 / 16
Регистрация: 03.08.2019
Сообщений: 389
06.11.2022, 12:26  [ТС]
zhunshun, со значениями? ты о чем? в PhotonTransformView только галки можно поставить.. это в PhotonTransformView классик есть куча всего и как там пользоваться всеми параметрами и на кой они вообще надо я даже не разбирался
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
06.11.2022, 12:30
Fantom1987, ну там же есть и таимауты и перечисление с процессорнои обработи на линеиную(всякие примочки) должно помогать. Точно уже не подскажу как должно выставлятся но кто то уже в сеть выкладовал поищи по этои теие
0
52 / 35 / 16
Регистрация: 03.08.2019
Сообщений: 389
06.11.2022, 12:56  [ТС]
zhunshun,
Ошибка CS1061 "PhotonView" не содержит определения "photonViewId", и не удалось найти доступный метод расширения "photonViewId", принимающий тип "PhotonView" в качестве первого аргумента (возможно, пропущена директива using или ссылка на сборку)
photonViewId в списке нет. может это ViewID?
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
06.11.2022, 13:04
Fantom1987, не вы не совсем так поняли, вернее поняли но о том что я писал. А в коде я подставил из головы все параметры - photonViewId может правильно вызываться photonView.Id мне же надо доки читать

Добавлено через 4 минуты
Fantom1987, и потом эту функцию rpc надо вызывать в ыкрипте блоков методом что бы удалялась не пуля а блок, так как до его photonView нельзя достучаться из класса пули у тебя есть только объект col с него вызываешь метод которыи и запускает rpc в блоке
0
52 / 35 / 16
Регистрация: 03.08.2019
Сообщений: 389
06.11.2022, 13:39  [ТС]
zhunshun,
скрипт для стен
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
private void OnTriggerEnter2D(Collider2D coll)
    {
        if (coll.CompareTag("Bullet"))
        {
            var heavy = coll.gameObject.GetComponent<Bullet>().IsHeavy;
            if (gameObject.CompareTag("swall"))
            {
                if (heavy)
                    if (photonView)
                        photonView.RPC("DelWall", RpcTarget.AllViaServer);
                else
                    return;
            }
            if (gameObject.CompareTag("bwall"))
            {
                if (photonView)
                    photonView.RPC("DelWall", RpcTarget.AllViaServer);
            }  
        }
    }
 
    [PunRPC]
    void DelWall()
    {
        //PhotonNetwork.Destroy(gameObject);
        gameObject.SetActive(false);
        Destroy(gameObject);
    }
претензий нет.. стены удаляются без проблем
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
06.11.2022, 13:51
Fantom1987, ище заметил у тебя странную конструкцию
C#
1
if (photonView)
если вызываешь функцию надо писать тоесть что это ты , а то их несколько будет вызываться от всех играющих
C#
1
if (photonView.isMain)
или это сеичас движок обновился что можно так писать?
0
52 / 35 / 16
Регистрация: 03.08.2019
Сообщений: 389
06.11.2022, 14:04  [ТС]
zhunshun,
Цитата Сообщение от zhunshun Посмотреть сообщение
ище заметил у тебя странную конструкцию
C#
1
2
3
4
5
6
PhotonView photonView;
 
    private void Start()
    {
        photonView = GetComponent<PhotonView>();
    }
Цитата Сообщение от Fantom1987 Посмотреть сообщение
photonView.IsMine не помогает тк пули выпускают игроки и ИИ. к тому же получаю ошибку Object reference not set to an instance of an object
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
06.11.2022, 14:14
Цитата Сообщение от Fantom1987 Посмотреть сообщение
photonView.IsMine
C#
1
photonView.isMine
а почему не наиден??

Добавлено через 7 минут
при чем тут кто выпускает пули?? на стенах есть photonView?
0
52 / 35 / 16
Регистрация: 03.08.2019
Сообщений: 389
06.11.2022, 14:36  [ТС]
Цитата Сообщение от zhunshun Посмотреть сообщение
а почему не наиден??
ответ на скринах) обе пули выпущенные врагом, а владельцы IsMine разные
Цитата Сообщение от zhunshun Посмотреть сообщение
на стенах есть photonView?
Компонент PhotonView весит на всех объектах которые должны между собой взаимодействовать
Миниатюры
PHoton rpc срабатывает больше одного раза   PHoton rpc срабатывает больше одного раза   PHoton rpc срабатывает больше одного раза  

0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
06.11.2022, 15:10
Fantom1987, Ты в этом скрипте проверить хочешь PHoton rpc срабатывает больше одного раза . Какая разница откуда пулька летит надо писать
C#
1
if (photonView.IsMain)
а у тебя
C#
1
if (photonView)
ошибки не должно возникать
0
52 / 35 / 16
Регистрация: 03.08.2019
Сообщений: 389
06.11.2022, 16:42  [ТС]
Цитата Сообщение от zhunshun Посмотреть сообщение
ошибки не должно возникать
этот фотон до инфаркта доведет
Ev Destroy Failed. Could not find PhotonView with instantiationId 1660

Добавлено через 4 минуты
решил одну проблему и получил другую
0
 Аватар для zhunshun
767 / 495 / 216
Регистрация: 05.04.2015
Сообщений: 2,073
06.11.2022, 17:27
Цитата Сообщение от Fantom1987 Посмотреть сообщение
Ev Destroy Failed. Could not find PhotonView with instantiationId 1660
В каком скрипте ругается

Добавлено через 4 минуты
на пулю или на блок?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.11.2022, 17:27
Помогаю со студенческими работами здесь

Запретить submit больше одного раза
Отправляю форму аяксом: $(document).ready(function(){ $('#myform').submit(function(stop){ stop.preventDefault();// отменяем...

Анимация не проигрывается больше одного раза
Есть анимация вращения картинки, которая активируется по нажатию на кнопку, однако это происходит только один раз, если нажать на кнопку...

Запретить клик по элементу больше одного раза
Здравствуйте! Есть много элементов &lt;li class=&quot;calc-list__item&quot;&gt;Замена резины &lt;span class=&quot;num-price&quot;&gt;800...

Почему stringstream не работает больше одного раза
Есть простая задача - использовать stringstream дважды, то есть сначала я записываю в него что-нибудь stringstream ss; int a = 0, b...

Проверить встречается ли строка больше одного раза?
Это учебная задачка, имеется двумерный массив и при бронирования билета второй раз должно выводится что это место уже занято Enter the...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru