Il faut un rigidbody pour détecter une collision.
pour prouvez mes dire, j'ai mis deux pnj créer pour l'occasion,
Rick Astley et un sanglier.
Sur Rick Astley, j'ai mis le script que j'utilise actuellement et dont on parle dans les messages précédents.
Sur le sanglier j'ai mis le script présenter dans la vidéo "Créer un jeu en 2D facilement avec Unity (#4 : Premier ennemi)"
qui fonctionne donc sans rigidBody
(voici le script)
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class TestPnjMove : MonoBehaviour
{
public float speed;
public Transform[] waypoints;
private Transform target;
public int destPoint = 0;
void Start()
{
target = waypoints[0];
}
void Update()
{
Vector3 dir = target.position - transform.position;
transform.Translate(dir.normalized * speed * Time.deltaTime, Space.World);
if (Vector3.Distance(transform.position, target.position) < 1.2f)
{
destPoint = (destPoint + 1) % waypoints.Length;
target = waypoints[destPoint];
}
}
}
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class testCollisionJaune : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("PNJ"))
{
Debug.Log("le pnj a toucher le waypoint Jaune");
}
}
}
Code : Tout sélectionner
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class testcollisionVert : MonoBehaviour
{
private void OnTriggerEnter2D(Collider2D collision)
{
if (collision.CompareTag("PNJ"))
{
Debug.Log("le pnj a toucher le waypoint vert");
}
}
}
je précise également que les deux pnj ont le tag "pnj".
https://www.youtube.com/watch?v=7ByEoz7E09Q
même si la vitesse est différente, on voit bien que Rick Astley avec son rigidbody arrive a activé le waypoint vert mais pas le sanglier sans rigidBody
J'ai tester en mettant "istrigger" ou pas sur la box collider du sanglier ça ne change rien.
Donc conclusion, le rigidbody est indispensable .