Box Collider et OnCollisionEnter

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Avatar de l’utilisateur
DJ-OMZ
Messages : 129
Inscription : 11 Jan 2017 13:15

Box Collider et OnCollisionEnter

Message par DJ-OMZ » 24 Jan 2017 16:03

Bonjour,

Je débute sur Unity avec un petit projet que j'aimerais réaliser.

J'ai 2 cubes. L'un d'entre eux se déplace lorsque je clique sur un point a la souris, il va au point.

J'aimerais que le cube s’arrête lorsque il entre en collision avec le second cube. J'ai utilisé la fonction OnCollisionEnter, mais ça ne passe pas.

Je vous montre mon code , j'ai suivi un tuto pour le déplacement au click :

Code : Tout sélectionner

using UnityEngine;
using System.Collections;

public class characterMover : MonoBehaviour {

    private float speed = 10f;
    private Vector3 targetPosition;
    private bool isMoving;
    const int LEFT_MOUSE_BUTTON = 0;

	// Use this for initialization
	void Start () {
        targetPosition = transform.position;
        isMoving = false;	
	}
	
	// Update is called once per frame
	void Update () {
        if (Input.GetMouseButton(LEFT_MOUSE_BUTTON))
            SetTargetPosition();

        if (isMoving)
            MovePlayer();	
	}

    void SetTargetPosition()
    {
        Plane plane = new Plane(Vector3.up, transform.position);
        Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
        float point = 0f;

        if (plane.Raycast(ray, out point))
            targetPosition = ray.GetPoint(point);

        isMoving = true;
    }

    void MovePlayer()
    {
        transform.LookAt(targetPosition);
        transform.position = Vector3.MoveTowards(transform.position, targetPosition, speed * Time.deltaTime);

        if (transform.position == targetPosition)
            isMoving = false;
    }

    void OnCollisionEnter(Collision col)
    {
        targetPosition = transform.position;
    }

}
Donc tout en bas il y a la fonction OnCollisionEnter. Je lui précise que lorsque le cube entre en collision, le vecteur 3 de destination prend comme valeur la position actuelle (en gros, arrête toi ici). Mais ça ne passe pas. J'ai l'impression que la fonction n'est jamais appelée...

Avatar de l’utilisateur
@RLG
Messages : 367
Inscription : 17 Jan 2015 00:13
Localisation : Rennes

Re: Box Collider et OnCollisionEnter

Message par @RLG » 24 Jan 2017 16:11

Tu as essayé de mettre un Debug.Log dans la fonction?
Everything happens for a reason. Sometimes the reason is that you're stupid and make bad decisions.

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

Re: Box Collider et OnCollisionEnter

Message par boubouk50 » 24 Jan 2017 16:19

Salut DJ-OMZ,

Tout d'abord le lien vers la documentation: OnCollisionEnter () qui nous apprend que:
OnCollisionEnter () est appelé lorsque ce Collider/RigidBody a commencé à toucher un autre RigidBody/Collider.
Donc première question:
Ton cube qui se déplace possède-t-il un rigidBody? Si oui, est-il configuré configuré correctement pour les collisions?
Ensuite, une petite astuce:
Pour savoir si quelque chose se passe, ajoute un Debug.Log (Object message), à l'endroit voulu. Si le code passe par là, un message apparaîtra en console.
"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

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

Re: Box Collider et OnCollisionEnter

Message par ZJP » 24 Jan 2017 18:02

J'y ajoute le fameux Collision action matrix pour savoir qui "collide" (ou peut "collider") avec qui, car, entre les Static Collider , Rigidbody Collider et Kinematic Rigidbody Collider on est un peu perdu. :mrgreen:

Avatar de l’utilisateur
DJ-OMZ
Messages : 129
Inscription : 11 Jan 2017 13:15

Re: Box Collider et OnCollisionEnter

Message par DJ-OMZ » 24 Jan 2017 23:11

boubouk50 a écrit :Salut DJ-OMZ,

Tout d'abord le lien vers la documentation: OnCollisionEnter () qui nous apprend que:
OnCollisionEnter () est appelé lorsque ce Collider/RigidBody a commencé à toucher un autre RigidBody/Collider.
Donc première question:
Ton cube qui se déplace possède-t-il un rigidBody? Si oui, est-il configuré configuré correctement pour les collisions?
Ensuite, une petite astuce:
Pour savoir si quelque chose se passe, ajoute un Debug.Log (Object message), à l'endroit voulu. Si le code passe par là, un message apparaîtra en console.
Ok, je pensais que c'était avec les Box Collider et non pas les RigidBody... My bad.
Bon maintenant j'ai bien mon cube qui s'arrête mais j'ai un effet de cognement qui envoie valser les 2 cubes X| :hehe: tout un délire...

Bon je vous remercie de vos réponses, et je garde en tête le Debug.Log , je vais me documenter un peu sur les collisions, y a tout pleins de vidéos sur YouTube héhé.

zugsoft
Messages : 386
Inscription : 26 Juin 2014 23:43
Localisation : Swiss
Contact :

Re: Box Collider et OnCollisionEnter

Message par zugsoft » 25 Jan 2017 07:35

Tu dois jouer avec sa masse et son drag.
Moon RTS

Répondre

Revenir vers « Scripting »