trigger et rigid body 2D

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
demzone
Messages : 17
Inscription : 26 Fév 2015 21:33

trigger et rigid body 2D

Message par demzone » 26 Fév 2015 21:37

Bonjour,

j'ai un petit soucis ( les galères du débutant ^^),

j'essaie de décocher "is kinematc"d'un objet grâce a ce script :

Code : Tout sélectionner

public class UnCheckIsKinematicOnTriggerEnter : MonoBehaviour {
	
	[SerializeField]
	private Rigidbody2D _targetrigidbody2D;
	
	public void OnDrawGizmos()
	{
		if (_targetrigidbody2D != null)
			Debug.DrawLine(this.transform.position, _targetrigidbody2D.transform.position, Color.yellow);
	}
	
	public void OnTriggerEnter(Collider all)
	{
		if (_targetrigidbody2D != null) {
			_targetrigidbody2D.isKinematic = false;
			_targetrigidbody2D.WakeUp ();
		} else {
			Debug.Log("<color=red>Fatal error:</color> rigid body2D null");
		}
	}
}

mais aucune action n'est apporter a mon _targetrigidbody2D ... le trigger fonctionne bien mais aucun changement sur mon rigid body ...

Quelqu'un pourrais m’éclairai ?


demzone
Messages : 17
Inscription : 26 Fév 2015 21:33

Re: trigger et rigid body 2D

Message par demzone » 26 Fév 2015 22:19

En drag and drop , j'ai créé un objet vide, je lui est assigné un rigid body 2D ainsi qu'une box collider et j'ai mit des sprite a l'interieur de cette objet...

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: trigger et rigid body 2D

Message par artemisart » 26 Fév 2015 23:11

Ok dans ce cas si tu veux recup le rigidbody de ton gameobject c'est juste avec (this.)rigibody2D http://docs.unity3d.com/ScriptReference ... ody2D.html, pas besoin d'une autre variable (ou alors tu l'assigne en Awake/Start avec _targetrigidbody2D = rigidbody2D;).

demzone
Messages : 17
Inscription : 26 Fév 2015 21:33

Re: trigger et rigid body 2D

Message par demzone » 26 Fév 2015 23:45

Je ne comprend pas ...

Désolé je débute et j'essaie de comprendre le fonctionnement mais la ...
si j'ai bien compris :

Je créé le champ ou je pourrais drag mon gameobject (qui a un rigidbody2D) avec :

Code : Tout sélectionner

	[SerializeField]
	private Rigidbody2D _targetrigidbody2D;
ensuite je recupère cette valeur juste avec this.rigidbody et je change la valeur de iskinematic ? :

Code : Tout sélectionner

	public void OnTriggerEnter(Collider all)
	{
		if (_targetrigidbody2D != null) {
			this.rigidbody2D.isKinematic = false;
			this.rigidbody2D.WakeUp ();
		}
	}
mais chez moi cela ne fonctionne pas ( j'ai essayer aussi avec les ( ) au cas ou xD)

Avatar de l’utilisateur
artemisart
Messages : 1893
Inscription : 21 Juin 2011 19:51
Localisation : Centre
Contact :

Re: trigger et rigid body 2D

Message par artemisart » 27 Fév 2015 01:18

Si tu veux récupérer le rigidbody2D du gameobject où tu mets ton script, t'as juste besoin de this.rigidbody2D (this. est facultatif).
Si tu veux référencer un autre rigidbody ta variable doit être publique (et du coup le SerializeField devient inutile), tu mets juste public Rigidbody2D targetrigidbody2D; et tu drop le rigidbody dans le field "targetrigidbody 2D" dans l'inspector du script.

demzone
Messages : 17
Inscription : 26 Fév 2015 21:33

Re: trigger et rigid body 2D

Message par demzone » 27 Fév 2015 14:25

Ok donc si mon rigidbody se trouve sur un autre gameobject je doit faire ceci ?

Code : Tout sélectionner


// creation du champ dans l'inspector
public Rigidbody2D _targetrigidbody2D;

// J'attend jusqu'a l'entrée dans le trigger
   public void OnTriggerEnter(Collider all)
   {

// je vérifie si je n'est pas oublier de drag mon gameobject dans l'inspector
      if (_targetrigidbody2D != null) {
// Je deoche is kinematic
         _targetrigidbody2D.isKinematic = false;
         _targetrigidbody2D.WakeUp ();
      }
   }

MadJlzz
Messages : 7
Inscription : 27 Fév 2015 15:42

Re: trigger et rigid body 2D

Message par MadJlzz » 27 Fév 2015 16:28

Salut,

Non ce n'est pas ça qu'essaye de t'expliquer artemisart.

Comme tu es débutant, une pointe de rappels s'impose. Un GameObject est composé de 1 ou plusieurs Components (Transform étant obligatoire et affecté d'office lors de la création d'un GameObject). Lorsque je parle de Component, j'entends par là : scripts, rigidbodys, colliders, etc... En somme, tout ce que tu peux attacher à ton GameObject (et qui d'après l'API Unity, hérite de MonoBehaviour)

Maintenant, Unity te propose des accesseurs simplifiés pour certains Components : RigidBody et RigidBody2D en font partie.

Du coup, remplace tes occurences de _targetrigidbody2D par rigidbody2D et supprime ton attribut :

Code : Tout sélectionner

// J'attend jusqu'a l'entrée dans le trigger
public void OnTriggerEnter(Collider all)
{
    // je vérifie si je n'est pas oublier de drag mon gameobject dans l'inspector
    if (rigidbody2D != null) {
    // Je decoche is kinematic
        rigidbody2D.isKinematic = false;
        rigidbody2D.WakeUp ();
    }
}
Si tu veux à tout pris stocker ton attribut (pour faire une copie d'objet par exemple), alors là oui, déclare ta variable et affecte là dans Awake() où Start().

Avatar de l’utilisateur
minirop
Messages : 184
Inscription : 25 Juin 2014 12:58

Re: trigger et rigid body 2D

Message par minirop » 27 Fév 2015 22:12

MadJlzz a écrit :(et qui d'après l'API Unity, hérite de MonoBehaviour)
c'est Component qui sert à ça, MonoBehaviour ne sert que pour les scripts ;)
Développeur Nintendo & PS Vita RIP PSM. Vive moi. Vive Unity. Flappikachu Vita

demzone
Messages : 17
Inscription : 26 Fév 2015 21:33

Re: trigger et rigid body 2D

Message par demzone » 27 Fév 2015 23:52

D'accord je vien de comprendre... ceci devrait fonctionner ... ( j'ai modifié les ontriggerenter en ontriggerenter2D ) je test sa ce week end ^^encore merci pour votre pédagogie :P sa change des forums ou on vous lache le code tout fait sans rien vous expliqué :P

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class UnCheckIsKinematicOnTriggerEnter : MonoBehaviour {

public Rigidbody2D rigidbody2D;

public void OnDrawGizmos()
	{
	if (rigidbody2D != null)
			Debug.DrawLine(this.transform.position, rigidbody2D.transform.position, Color.yellow);
	}
	
	void OnTriggerEnter2D(Collider2D all) {
		if (rigidbody2D != null) {
			rigidbody2D.isKinematic = false;
		}
	}
}

Répondre

Revenir vers « (C#) CSharp »