[DB-RS] Mise en réseau de chute d'objets

Pour les scripts écrits en C#
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
AsDePique
Messages : 5
Inscription : 11 Déc 2017 17:19

[DB-RS] Mise en réseau de chute d'objets

Message par AsDePique » 11 Déc 2017 18:05

Bonjour à tous,
Je suis tout nouveau sur ce forum donc s'il vous plait ne me linchez pas :-D

Tout d'abord je suis en train de créer un jeu multijoueur sur unity 3D, je vous explique vite fait:

c'est une sorte de jeux de tirs, plusieurs joueurs dans une arène, j'ai déjà mis la vie et les balles en réseau tout marche mais
j'ai ajouter des objets comme par exemple des murs: avec les balles que le joueur tir, le mur est censé tomber
mais sur ma version standalone les murs ne tombent pas.
J'ai essayer pleins de manip' mais sans résultats :naah:
Si quelqu'un m'a compris et biensur pourrais me répondre je vous remercie ::d

Voici mon script pour que ma balle ai une influence sur les murs:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class DWGDestroyer : MonoBehaviour {

	public float radius = 2;
	public float force = 50f;
	
	void OnCollisionEnter(Collision col){
			ExplodeForce();
			Destroy(GetComponent<DWGDestroyer>());
	}
	
	
	void ExplodeForce(){	
		Vector3 explodePos = transform.position;
		Collider[] colliders = Physics.OverlapSphere(explodePos, radius); 
		foreach (Collider hit in colliders){
			if(hit.GetComponent<Collider>().tag == "Destructible"){
				if(hit.GetComponent<Rigidbody>()){
					hit.GetComponent<Rigidbody>().isKinematic = false; 
					hit.GetComponent<Rigidbody>().AddExplosionForce(force, explodePos,radius);
				}
			}
		}
	}
}
et le script sur mon mur:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class ColliderEnabler : MonoBehaviour {
	void Start () {
		if(gameObject.GetComponent<Collider>()){
			gameObject.GetComponent<Collider>().enabled = true;
			Destroy(GetComponent<DWGColliderEnabler>()); 
		}
	}
}
.
 ! Message de : Max
Utilisez les balises code SVP
Merci de lire la Netiquette.
Dernière édition par AsDePique le 11 Déc 2017 18:23, édité 1 fois.

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6186
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: Mise en réseau de chute d'objets

Message par boubouk50 » 11 Déc 2017 18:12

AsDePique a écrit :
11 Déc 2017 18:05
Je suis tout nouveau sur ce forum donc s'il vous plait ne me linchez pas :-D
Hé ben super, on est déjà des exécuteurs à tes yeux...
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

AsDePique
Messages : 5
Inscription : 11 Déc 2017 17:19

Re: Mise en réseau de chute d'objets

Message par AsDePique » 11 Déc 2017 18:15

boubouk50 a écrit :
11 Déc 2017 18:12
AsDePique a écrit :
11 Déc 2017 18:05
Je suis tout nouveau sur ce forum donc s'il vous plait ne me linchez pas :-D
Hé ben super, on est déjà des exécuteurs à tes yeux...
Hehe non mais je préviens :lol:

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-RS] Mise en réseau de chute d'objets

Message par Max » 11 Déc 2017 21:13

Bonsoir,
AsDePique a écrit :
11 Déc 2017 18:05
mais sur ma version standalone les murs ne tombent pas.
je vois pas trop le rôle du script sur les murs (du moins au niveau de ta problématique) :-/ Leurs colliders ne sont pas actifs au départ ?
Sinon, as-tu fait un debug sur tes fonctions ?
Par exemple lors de l'impact de ta balle, entres tu bien dans le OnCollisionEnter() ?
Suite à ton OverlapSphere, ton tableau colliders contient-il bien les murs situés dans le radius ?
J'imagine que tu as essayé avec différentes valeurs de 'force' ?

Sinon, petit remarque, tu fais un usage abusif des GetComponent :mrgreen:
Dans certaines situations, tu gagnerais en opti et en lisibilité en écrivant des choses du genre:

Code : Tout sélectionner

                Rigidbody rb = hit.GetComponent<Rigidbody>();
                if (rb)
                {
                    rb.isKinematic = false;
                    rb.AddExplosionForce(force, explodePos, radius);
                }
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

AsDePique
Messages : 5
Inscription : 11 Déc 2017 17:19

Re: [DB-RS] Mise en réseau de chute d'objets

Message par AsDePique » 12 Déc 2017 17:53

Bonjour,
Oui au début les colliders de mes murs sont désactivés, puis quand je lance le jeu ils s'activent (Void Start).
Le script sur les murs servent justement à leur attribuer un collider, j'ai pensé que faire ça serais une bonne idée ::d

Lors de l'impact de la balle j'ai bien créer le OnCollisionsEnter()

Et oui j'ai bien essayé avec plusieurs force, radius.
Mais mon problème ici c'est juste que par exemple, je joues à mon jeu donc en multijoueur, je tire sur disons 2 murs, ils tombent et donc à ce moment la il faudrait que sur ta machine aussi tu voies ces murs détruits, et la est le problème sur
l'option game de unity ça marche, mais sur la version standalone la balle n'a aucun effet sur les murs.
Je ne sais pas si tu m'as compris mais j'essaies d'être le plus clair :hehe:

Merci pour ton conseil sur les GetComponent

Avatar de l’utilisateur
Max
Messages : 8764
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-RS] Mise en réseau de chute d'objets

Message par Max » 12 Déc 2017 19:20

Bonsoir,
AsDePique a écrit :
12 Déc 2017 17:53
Oui au début les colliders de mes murs sont désactivés, puis quand je lance le jeu ils s'activent (Void Start).
Le script sur les murs servent justement à leur attribuer un collider, j'ai pensé que faire ça serais une bonne idée ::d
heu, pourquoi n'ont-ils pas de collider au lancement du jeu ? c'est surtout là la question que je me pose. Parce que ajouter/activer par le biais de script au démarrage les composants dont on a besoin sur les gameobjects, ça parait plutôt lourdingue....
AsDePique a écrit :
12 Déc 2017 17:53
Lors de l'impact de la balle j'ai bien créer le OnCollisionsEnter()
Le fond de ma question n'était pas là en fait. Je suggérais de vérifier que cette fonction était bel et bien appelée lors de la collision. Par exemple en incluant à celle-ci un Debug.Log(col.gameObject.name);
AsDePique a écrit :
12 Déc 2017 17:53
Mais mon problème ici c'est juste que par exemple, je joues à mon jeu donc en multijoueur, je tire sur disons 2 murs, ils tombent et donc à ce moment la il faudrait que sur ta machine aussi tu voies ces murs détruits, et la est le problème.
Pour ce qui est de la partie réseau, tu ne t'es pas trop étendu, techniquement parlant (rien dans les codes par exemple, coté serveur comme client), et il faudra certainement en dire plus sur le sujet pour que quelqu'un puisse t'aider...
Pour cette partie,, cela sort de mon champ de compétences....
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Avatar de l’utilisateur
ZJP
Messages : 5745
Inscription : 15 Déc 2009 06:00

Re: [DB-RS] Mise en réseau de chute d'objets

Message par ZJP » 12 Déc 2017 22:03

Max a écrit :
12 Déc 2017 19:20
heu, pourquoi n'ont-ils pas de collider au lancement du jeu ? c'est surtout là la question que je me pose. Parce que ajouter/activer par le biais de script au démarrage les composants dont on a besoin sur les gameobjects, ça parait plutôt lourdingue....
:-D


C'est peut être cela le souci, mis en évidence par la différence de "vitesse de traitement" entre l’éditeur et l'EXE.

AsDePique
Messages : 5
Inscription : 11 Déc 2017 17:19

Re: [DB-RS] Mise en réseau de chute d'objets

Message par AsDePique » 12 Déc 2017 22:06

Merci pour ta réponse,

Je vais voir comment enlever mon script sur les murs sans tout chambouler ::d

J'ai donc essayer avec Debug.Log et donc oui la fonction est bien appelée lors de la collision
et même plusieurs fois ( la fonction est appelée à chaque "brique" de mon mur qui rentre
en collision avec ma balle ou qui subit ça force "d'impact")

Et c'est surtout justement la partie réseau client ou j'ai mon plus gros problème, donc
avant de m'étendre si tu es sur de ne pas pouvoir me répondre serais-tu si quelqu'un
ici pourrait m'aider ?

En tout cas merci de me répondre et de m'aider ;-)
Bonne soirée

AsDePique
Messages : 5
Inscription : 11 Déc 2017 17:19

Re: [DB-RS] Mise en réseau de chute d'objets

Message par AsDePique » 12 Déc 2017 22:08

ZJP a écrit :
12 Déc 2017 22:03
Max a écrit :
12 Déc 2017 19:20
heu, pourquoi n'ont-ils pas de collider au lancement du jeu ? c'est surtout là la question que je me pose. Parce que ajouter/activer par le biais de script au démarrage les composants dont on a besoin sur les gameobjects, ça parait plutôt lourdingue....
:-D


C'est peut être cela le souci, mis en évidence par la différence de "vitesse de traitement" entre l’éditeur et l'EXE.

Désolé je n'avais pas vu ton message, j'étais entrain d"écrire le mien ::d

Donc sûrement je testerais demain, tu as peut-être raison mais
je ne comprend pas comment cette fonction prendrais beaucoup de temps
entre l'éditeur et le joueur... Sachant que c'est une fonction Start qui devrais donc se
lancer au lancement du jeu :-/

Répondre

Revenir vers « (C#) CSharp »