Collision sans mouvement

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
lululaperlule
Messages : 1
Inscription : 09 Fév 2018 18:59

Collision sans mouvement

Message par lululaperlule » 11 Sep 2020 09:18

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:

Avatar de l’utilisateur
jmhoubre
Messages : 856
Inscription : 05 Oct 2019 22:05

Re: Collision sans mouvement

Message par jmhoubre » 11 Sep 2020 10:36

Bonjour,

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

Répondre

Revenir vers « Scripting »