Почему инстантятся два объекта вместо одного в photon

Почему инстантятся два объекта вместо одного в photon

Сообщение jimmm 25 ноя 2016, 07:48

Здравствуйте, кто знает в чем причина, почему инстантяться 2 объекта?

Синтаксис:
Используется csharp
public void DropArrowButton(){
GetComponent<PhotonView>().RPC ("DropArrow", PhotonTargets.All, arrow1name);
}
[RPC]
public void DropArrow(string arrowName){
GameObject myArrow = (GameObject) PhotonNetwork.Instatiate ("arrow", spownarrow.position, spownarrow.rotation, 0);
myArrow.rigidbody.velocity = spownarrow.transform.forword*force;
myArrow.GetComponent<PhotonView>().RPC ("dressUpArrow", PhotonTargets.All, arrowName);
}

Почему на двух устройствах инстантяться два объекта, и как этого можно избежать?
Инстантить через photon нужно для того чтобы одеть в одинаковый скин стрелу на всех устройствах, и главное чтоб потом припарентить попавшую стрелу в место попадания.
jimmm
UNIверсал
 
Сообщения: 417
Зарегистрирован: 23 янв 2013, 22:57

Re: Почему инстантятся два объекта вместо одного в photon

Сообщение ikhtd 25 ноя 2016, 10:39

они на 2 аватарах итнстансятся- если в сцене 2 игрока. потому что инстансить надо в проверке
if (photoView.isMine){} - иначе заинстанситься на всех клиентах.

if (photoView.isMine){
GetComponent<PhotonView>().RPC ("DropArrow", PhotonTargets.All, arrow1name);
}
Скрытый текст:
Объективная реальность это - что в жизни не может быть более одного пути, который в свою очередь обусловлен максимальным существующим давлением. (второй _ttp://habrahabr.ru/post/202654/)
ikhtd
Адепт
 
Сообщения: 1124
Зарегистрирован: 24 мар 2014, 12:20

Re: Почему инстантятся два объекта вместо одного в photon

Сообщение jimmm 25 ноя 2016, 14:12

Блин, всю голову сломал(, так теперь никак не передается велосити, стрела падает просто на месте у других игроков, что я делаю не правильно?
И не одевается в нужный скин по Rpc
jimmm
UNIверсал
 
Сообщения: 417
Зарегистрирован: 23 янв 2013, 22:57

Re: Почему инстантятся два объекта вместо одного в photon

Сообщение юnity 25 ноя 2016, 21:37

Синхронизируете полёт и имя скина?
Give exact coordinates of the decision of the problems
Аватара пользователя
юnity
UNITрон
 
Сообщения: 290
Зарегистрирован: 21 июл 2015, 18:30

Re: Почему инстантятся два объекта вместо одного в photon

Сообщение Aleksey 28 ноя 2016, 22:28

я делаю так.(у тебя заместо пули стрела)
создаю пулю в скрипте поведения игрока
PhotonNetwork.Instantiate(Resources.Load("Bullet").name, transform.position - transform.up * 1.6f, transform.rotation, 0);
Вешаю два скрипта на префаб пули. первый скрипт передача по сети полета пули
Синтаксис:
Используется csharp
using UnityEngine;
public class NetworkBullet : Photon.MonoBehaviour
{
    void Start()
    {
        correctPlayerPos = transform.position;
        correctPlayerRot = transform.rotation;
    }
    void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info)
    {
        if (stream.isWriting)
        {
            stream.SendNext(transform.position);
            stream.SendNext(transform.rotation);
            stream.SendNext(GetComponent<Rigidbody2D>().velocity);
        }
        else
        {
            correctPlayerPos = (Vector3)stream.ReceiveNext();
            correctPlayerRot = (Quaternion)stream.ReceiveNext();
            GetComponent<Rigidbody2D>().velocity = (Vector2)stream.ReceiveNext();
        }
    }
    private Vector3 correctPlayerPos;
    private Quaternion correctPlayerRot;
    void Update()
    {
        if (!photonView.isMine)
        {
            transform.position = Vector3.Lerp(transform.position, correctPlayerPos, Time.deltaTime * 5f);
            transform.rotation = Quaternion.Lerp(transform.rotation, correctPlayerRot, Time.deltaTime * 5f);
        }
    }
}

второй скрипт это ее поведение. например так
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class Bullet : Photon.MonoBehaviour
{
    public float speed_bullet;
    private Rigidbody2D rb;
    void Awake()
    {
        if (photonView.isMine)
        {
            rb = GetComponent<Rigidbody2D>();
            rb.velocity = -transform.up.normalized * speed_bullet;
        }
    }
    void OnCollisionEnter2D(Collision2D other)
    {
        if (!photonView.isMine) return;
        PhotonView target = other.gameObject.GetComponent<PhotonView>();
        if (other.gameObject.tag == "Player" && !target.isMine && target.owner.customProperties["Immortal"].ToString() == "False")
        {// второе условие чтобы не убивать себя своей пулей
            other.gameObject.GetComponent<PhotonView>().RPC("destroy_player", PhotonTargets.All);
        }
        StartCoroutine(bullet_self_destruct_());
    }
    IEnumerator bullet_self_destruct_()
    { /// звук пули чтобы не обрывался когда стреляем впритык.
        GetComponent<SpriteRenderer>().enabled = false;
        GetComponent<BoxCollider2D>().enabled = false;
        while (GetComponent<AudioSource>().isPlaying == true)
            yield return new WaitForSeconds(0.1f);

        PhotonNetwork.Destroy(gameObject);
    }
}
Продукты на тему онлайна в Ассет Сторе
_https://www.assetstore.unity3d.com/en/# ... sher:21589
Аватара пользователя
Aleksey
UNIт
 
Сообщения: 56
Зарегистрирован: 17 фев 2015, 16:09


Вернуться в Photon

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2