-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);
}