[MY-RS] Synchronisation de destroy

Pour les scripts écrits en Javascript (UnityScript). :!: Obsolète :!:
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Pankake
Messages : 5
Inscription : 14 Sep 2016 15:26

[MY-RS] Synchronisation de destroy

Message par Pankake » 09 Nov 2016 18:43

Bonsoir!
Je travaille depuis quelques temps sur toute la partie réseau d'Unity, et la je me retrouve bloqué sur un truc:
J'ai un programme qui va host un serveur qui sera théoriquement allumé en permanence, et les joueurs pourront se connecter dessus.

J'ai un script qui va instancier un prefab comme ceci:

Code : Tout sélectionner

	Network.Instantiate(prefab, transform.position, transform.rotation, 0);
Tout marche bien, c'est fantastique, la vie est belle: tous les client voient le prefab

Mais a un certain moment, je souhaite le supprimer du réseau, j'utilise donc ça:

Code : Tout sélectionner

	Network.Destroy(prefab);
Encore une fois, la vie est belle! Tout marche! Les clients voient le prefab disparaitre !
Sauf que la vie est un peu moins belle la, parce que seuls les clients connectés au moment du Destroy ne verront plus le prefab.
C'est à dire que si un client se connecte après le Destroy, il verra le prefab.

J'ai fouillé un peu sur l'internet, j'ai lu des trucs qui parlait de RPC, mais je sais absolument pas utiliser ça, ni si mon problème en sera résolu :/
Ah au fait, mon prefab a un NetworkView qui observe son RectTransform (parce que c'est un UI).

Merci d'avance a tous ceux qui me répondront et m'éclaireront surement :-D

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: [MY-RS] Synchronisation de destroy

Message par Iwa » 10 Nov 2016 10:46

Salut à toi,

J'ai pas trop trifouillé le nouveau réseau. Ceci étant, le comportement que tu as me parait somme toute logique en fait. C'est un peu comme si tu tentais d'appeler une fonction sur un objet inactif. A un moment ça marche pas.

A première vu, quand un utilisateur se connecte je noterais la connexion chez lui dans un ptit log/fichier/dans la class user. Quand il se déconnecte idem. Et je ferais une liste de choses qui sont apparus et qui ont disparus après sa dernière connexion, avec possibilité de reset cette liste par certains type d'event : genre le mec c'est pas connecté depuis une semaine, tous les événements qui datent d'avant tu fais le tri de supprimé ou pas :).

Je sais pas si ce que je bave est clair ou pas.
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [MY-RS] Synchronisation de destroy

Message par Moi 1971 » 10 Nov 2016 10:54

Bonjour,
Alors moi je pense avoir compris ta question :] et je crois que l'instanciation de ton objet doit être conditionnée (par un booléen par exemple) Si il est codé en dur la création de l'objet, elle se fera, même si deux minutes avant les précédents objets créés ont été détruits.
Donc pour moi :
un booléen sur le serveur accessible en lecture par les clients.
Quand un client est créé il va lire la valeur de ce booléen.
Suivant la valeur de ce booléen il instancie ou pas l'objet.

Pankake
Messages : 5
Inscription : 14 Sep 2016 15:26

Re: [MY-RS] Synchronisation de destroy

Message par Pankake » 12 Nov 2016 17:26

Bonjour,
j'essaierai dès que je pourrais ces options, la je suis un peu submergé par le travail x)

Mais par contre, comment peut on accéder a une variable du serveur? Pas besoin d'un cours complet, juste quelques notions (et si possible, sans me recaler en mode "wé de toutes facons tu te lance dans des trop gros trucs t'y arrivera pas" ^^').

Moi 1971
Messages : 727
Inscription : 29 Sep 2015 13:38

Re: [MY-RS] Synchronisation de destroy

Message par Moi 1971 » 12 Nov 2016 20:28

Pankake a écrit :... comment peut on accéder a une variable du serveur? P
Il faut regarder dans les fonctions Network... il doit bien y en avoir pour communiquer entre client(s) et serveur.

Pankake
Messages : 5
Inscription : 14 Sep 2016 15:26

Re: [MY-RS] Synchronisation de destroy

Message par Pankake » 13 Nov 2016 17:03

Je trouve pas grand chose, ou alors je cherche mal :/
Et j'avoue pas trop m'y connaitre niveau communication serveur/client (et inversement).

Quelqu'un aurait une piste ou une solution la dessus?
Merci d'avance !

thyma
Messages : 70
Inscription : 23 Juin 2015 12:25

Re: [MY-RS] Synchronisation de destroy

Message par thyma » 30 Juin 2017 14:44

Bon je sait que je répond un peu en retard mais c'est mieux que rien :)

en plus de la fonction Network.Destory
il faut que le serveur exécute cette commande : Network.RemoveRPCs(player);
la variable player se récupère sur chaque clients comme ça : network.Player
et comme la variable ne peut que se récup du coté client et la commande doit s'éxec du coté serveur tu doit envoyer la variable par une fonction rpc

du coup fait comme ça

Code : Tout sélectionner

// coté client : 
function (je suis mort){
GetComponent.<NetworkView>().RPC("mort", RPCMode.Server, Network.player);
}

// coté serveur
@RPC function mort(player : NetworkPlayer){
	Network.RemoveRPCs(player);
	Network.DestroyPlayerObjects(player);
}
 ! Message de : boubouk50
Alleeeeeeeez! Après 70 messages, tu devrais savoir utiliser les balises CODE tout de même...
voila !!!

Verrouillé

Revenir vers « (Js) Javascript »