[C#] - MissileToTarget V2 - Script de missile

Cette section est destinée aux scripts partagés par la communauté. Chaque post est destiné à un script. Suivez bien les recommandations.
sephitoth
Messages : 495
Inscription : 06 Avr 2012 13:47
Localisation : toulouse

[C#] - MissileToTarget V2 - Script de missile

Message par sephitoth » 24 Mai 2012 16:19

-NOM DU SCRIPT : missileToTarget V2.0

-AUTEUR(S): Sephitoth

-DESCRIPTION : Script de missile à tête chercheuse en C# mais avec un comportement un peu différent
à l'aide de la fonction Vector3.smoothDamp()

-UTILISATION : Placer le script sur un objet missile et instanciez l'objet en lui affectant sa cible

-SCRIPT :

Code : Tout sélectionner


	// La Cible
	public GameObject target;
	
	//Incrmentation de la vitesse
	private float incrementSpeed = 0.01f;
	
	//Vitesse calculé
	private float SpeedCalculated = 0.0f;
	
	//Vitesse Max
	private float SpeedMax = 20.0f;
	
	//Temps de vie du missile
	private float timeLive = 15.0f;
	
	private playAnim p;
	
	//Vitesse retrouné par la fonction smoothDamp
	private Vector3 currentVelocity;
	
	//temps mis pour atteindre la valeur ciblé
	private float smoothTime = 1.5f;
	
	//Explosion
	public GameObject boom;
	
	// Use this for initialization
	IEnumerator Start () {
		
		//Lancement du compte à rebours
		return AutoDestruct();
	}
	
	// Update is called once per frame
	void Update () {
		
		//On calcul la direction de la cible
		Vector3 dir = target.transform.position - transform.position;
		
		//On utilise la fonction SmoothDamp pour calculer la nouvelle position
		transform.forward = Vector3.SmoothDamp(transform.forward,dir,ref currentVelocity,smoothTime);
		
		//On calcul la vitesse du missile pour une acceleration seulement si la vitesse max n'est pas atteinte
		if(SpeedCalculated <= SpeedMax)
		{
			SpeedCalculated = Mathf.Lerp(SpeedCalculated,SpeedMax,incrementSpeed);
		}
		
		// On applique la nouvelle vitesse à la nouvelle direction
		rigidbody.velocity = transform.forward * SpeedCalculated;
	}
	
	// OnCollisionEnter is called when rigidbody hit another collider for the first time
	void OnCollisionEnter(Collision other)
	{	
		// Si l'objet touché est la cible
		if(other.gameObject == target)
		{
			// On applique les dommage à la cible
		}
		
		// On détruit le missile
		Destruction();
	}
	
	// Fonction d'autoDestruction
	public IEnumerator AutoDestruct()
	{
		// On attent le temp de vie définis
		yield return new WaitForSeconds(timeLive);
		
		// On detruit le missile
		Destruction();
	}
	
	// Destruction du missile en explosion
	public void Destruction()
	{
		// On instancie l'explosion
		GameObject go = Instantiate(boom,transform.position,new Quaternion(Random.value,Random.value,Random.value,Random.value)) as GameObject;
		// On change son paent pour ne pas l'effacer en mm temps que le missile
		go.transform.parent = null;
		// On detrut le missile
		Destroy(this.gameObject);
	}
J'étais athée jusqu’à ce que je découvre que j'étais dieu !

Répondre

Revenir vers « Scripts »