Je n'arrive pas à corriger ce code qui devrait déterminer 2 points de contact:le 1er entre collision (plan horizontal) et objet[0] et le 2nd entre collision et objets[1]
objets sont des plans verticaux intersectant collision
Code : Tout sélectionner
using System.Collections.Generic;
using UnityEngine;
public class several_adjacents_planes_cut_2 : MonoBehaviour
{
public GameObject collision;
public GameObject point;
public GameObject[] objets;
List<GameObject> ListPoints = new List<GameObject>();
private bool collisionDetected = false;
Vector3 echelle_plan;
float decalage_mask_x, decalage_mask_z;
int k = 0;
void Start()
{
echelle_plan = collision.GetComponent<Transform>().localScale;
}
void OnCollisionEnter(Collision collision)
{
if (!collisionDetected && IsPointOnPlane(objets[k], collision.contacts[0].point, 0.001f))
{
ListPoints.Add(Instantiate(point));
ListPoints[ListPoints.Count - 1].transform.position = collision.contacts[0].point;
print("collision :" + (ListPoints.Count - 1) + " k :" + k);
print("point d'intersection n° " + (ListPoints.Count - 1) + " :" + ListPoints[ListPoints.Count - 1].transform.position);
point.transform.position = ListPoints[ListPoints.Count - 1].transform.position;
k++;
collisionDetected = true;
}
}
public bool IsPointOnPlane(GameObject plane, Vector3 point, float tolerance = 0.001f)
{
Vector3 normal = plane.transform.up; // Vecteur normal au plan
float distance = -Vector3.Dot(normal, plane.transform.position); // Distance du plan à l'origine
float result = Vector3.Dot(normal, point) + distance; // Calcul de la valeur de gauche de l'équation du plan
return Mathf.Abs(result) < tolerance; // Vérification si la valeur est proche de zéro
}
}
merci de votre aide