Page 1 sur 1

Collision sans mouvement

Publié : 11 Sep 2020 09:18
par lululaperlule
Salut à tous !
Je suis en train de m'aider d'une template pour developper un petit jeu d'arcrade type GTA 2 en style de conduite.
J'ai bien réussi à faire déplacer mes véhicules (ils suivent une navmesh), quand je leur fonce dedans, ils s'arrêtent (tout va bien), et mon véhicule subit la collision.
Problème, je souhaiterai que le véhicule se "détruise" une fois percuter, et je sèche.
J'ai tenté de mettres des rigibodys, de mettre des assets pour tenter de contourner le problèmes mais rien à faire.

Auriez vous une idée ?
Je developpe sur Unity 2020 et je débute vraiment dans le logiciel.

Voici le script que j'ai utilisé pour les collisions.

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TrafficCollider : MonoBehaviour {

	private bool collide;
	private bool traffic;



	public static int carInt;
	public string carName;

	void Start()
	{
		collide = false;
		traffic = false;
	}
	void OnTriggerEnter(Collider col)
	{
		if (col.gameObject.tag == "Player") {
			
			carName = transform.parent.gameObject.name;
			if (carName.Length == 5) {
				carName = carName.Substring (carName.Length - 2);
				carInt = int.Parse(carName)-1;
			} else {
				carName = carName.Substring (carName.Length - 3);
				carInt = int.Parse(carName);
			}
			MoveOnPath.col[carInt] = true;
			collide = false;
		}
		
	
		if (col.gameObject.tag == "Col") {
			
			carName = transform.parent.gameObject.name;
			if (carName.Length == 5) {
				carName = carName.Substring (carName.Length - 2);
				carInt = int.Parse(carName)-1;
			} else {
				carName = carName.Substring (carName.Length - 3);
				carInt = int.Parse(carName);
				
			}
			MoveOnPath.col[carInt] = true;
			traffic = true;
		}
		if (col.gameObject.tag == "SideCollider") {
			carName = transform.parent.gameObject.name;
			if (carName.Length == 5) {
				carName = carName.Substring (carName.Length - 2);
				carInt = int.Parse(carName)-1;
			} else {
				carName = carName.Substring (carName.Length - 3);
				carInt = int.Parse(carName);
			}
			MoveOnPath.col[carInt] = true;
			traffic = true;
		}
	}

	void OnTriggerStay(Collider col)
	{
		if (col.gameObject.tag == "Player") {
			carName = transform.parent.gameObject.name;
			if (carName.Length == 5) {
				carName = carName.Substring (carName.Length - 2);
				carInt = int.Parse(carName)-1;
			} else {
				carName = carName.Substring (carName.Length - 3);
				carInt = int.Parse(carName);
			}
			MoveOnPath.col[carInt] = true;
			collide = false;
		}
		if (col.gameObject.tag == "Col") {
			carName = transform.parent.gameObject.name;
			if (carName.Length == 5) {
				carName = carName.Substring (carName.Length - 2);
				carInt = int.Parse(carName)-1;
			} else {
				carName = carName.Substring (carName.Length - 3);
				carInt = int.Parse(carName);
			}
			MoveOnPath.col[carInt] = true;
			traffic = true;
		}
		if (col.gameObject.tag == "SideCollider") {
			carName = transform.parent.gameObject.name;
			if (carName.Length == 5) {
				carName = carName.Substring (carName.Length - 2);
				carInt = int.Parse(carName)-1;
			} else {
				carName = carName.Substring (carName.Length - 3);
				carInt = int.Parse(carName);
			}
			MoveOnPath.col[carInt] = true;
			traffic = true;
		}
	}

	void OnTriggerExit(Collider col)
	{
		if (col.gameObject.tag == "Player") {
			
			if (!traffic) {
				collide = true;
				StartCoroutine (CollidePlayer ());
			}
		}
		if (col.gameObject.tag == "Col") {
			{
				collide = true;
				traffic = false;
				StartCoroutine (CollideTraffic ());
			}
		}
		if (col.gameObject.tag == "SideCollider") {
			collide = true;
			traffic = false;
			StartCoroutine (CollideTraffic ());
		}
	}

	IEnumerator CollideTraffic() {
		yield return new WaitForSeconds(0);
		if (collide) {
			carName = transform.parent.gameObject.name;
			if (carName.Length == 5) {
				carName = carName.Substring (carName.Length - 2);
				carInt = int.Parse(carName)-1;
			} else {
				carName = carName.Substring (carName.Length - 3);
				carInt = int.Parse(carName);
			}
			MoveOnPath.col [carInt] = false;
		}
	}

	IEnumerator CollidePlayer() {
		yield return new WaitForSeconds(2);
		if (collide) {
			carName = transform.parent.gameObject.name;
			if (carName.Length == 5) {
				carName = carName.Substring (carName.Length - 2);
				carInt = int.Parse(carName)-1;
			} else {
				carName = carName.Substring (carName.Length - 3);
				carInt = int.Parse(carName);
			}
			MoveOnPath.col[carInt] = false;
		}
	}
}
Ca me rend fou j'y ai passé la nuit et j'ai toujours pas trouvé de solution... :triste1:

Re: Collision sans mouvement

Publié : 11 Sep 2020 10:36
par jmhoubre
Bonjour,

je n'ai pas trouvé d'appel à la méthode Destroy (). C'est normal ?