// Gère la condition permettant de savoir quelle attaque doit être effectuer et gère le déplacement void Update() { float distance = (Vector3.Distance(Teddy.transform.position, gameObject.transform.position)); //Si Teddy est proche du clown, alors ce dernier ce met à tourner if (distance < 0.3) { _enfant.localEulerAngles = new Vector3(_enfant.localEulerAngles.x, _enfant.localEulerAngles.y + 5, _enfant.localEulerAngles.z); vitesseDeplacement = 7; Deplacement(); } //sinon il va sauter else if (distance < 0.7) { if (_solTouche == true) { gameObject.GetComponent <Rigidbody>().AddForce(0, 0.5f, 0, ForceMode.VelocityChange); _solTouche = false; } vitesseDeplacement = 15; Deplacement(); //détecte la direction de teddy et assige un angle au clown if (Teddy.transform.position.x - transform.position.x > 0) { _enfant.localEulerAngles = new Vector3(_enfant.localEulerAngles.x, 0, _enfant.localEulerAngles.z); } else { _enfant.localEulerAngles = new Vector3(_enfant.localEulerAngles.x, 180, _enfant.localEulerAngles.z); } } //si l'ennemi est trop loins et n'est pas blaisser, alors l'ennemi est détruit sans donner l'exp else if (distance > 1.3 && _ennemi.pointsVie == _ennemi.pointsVieMax && !_ennemi.estUnique) { _ennemi.Mort(false); } gameObject.GetComponent <Rigidbody>().velocity = _deplacement; }
// Gère le déplacement de la voiture et sa destruction si Teddy est trop loins void Update() { float distance = (Vector3.Distance(Teddy.transform.position, gameObject.transform.position)); //si teddy est suffisamment proche il fonce vers lui if (distance < 0.6) { if ((Teddy.transform.position.x - gameObject.transform.position.x) > 0) { _deplacement = new Vector3(vitesseDeplacement * Time.deltaTime, 0, 0); } else { _deplacement = new Vector3(-vitesseDeplacement * Time.deltaTime, 0, 0); } } //si teddy est trop loins il se détruit else if (distance > 1.1 && _ennemi.pointsVie == _ennemi.pointsVieMax && !_ennemi.estUnique) { _ennemi.Mort(false); } /************************************************Gestion de la détection avec le sol************************************************/ RaycastHit raycast_0; RaycastHit raycast_1; RaycastHit raycast_2; //détection du raycast_0 raycast if (Physics.Raycast(gameObject.transform.position, gameObject.transform.TransformDirection(Vector3.back), out raycast_0, distanceRaycast)) { if (debugRaycast) { Debug.DrawRay(gameObject.transform.position, gameObject.transform.TransformDirection(Vector3.back) * raycast_0.distance, Color.yellow); } } //détection du raycast_1 raycast else if (Physics.Raycast(gameObject.transform.position - (Vector3.right * raycastDecalement), gameObject.transform.TransformDirection(Vector3.back), out raycast_1, distanceRaycastCote)) { if (debugRaycast) { Debug.DrawRay(gameObject.transform.position - (Vector3.right * raycastDecalement), gameObject.transform.TransformDirection(Vector3.back) * raycast_1.distance, Color.green); } } //détection du raycast_2 raycast else if (Physics.Raycast(gameObject.transform.position + (Vector3.right * raycastDecalement), gameObject.transform.TransformDirection(Vector3.back), out raycast_2, distanceRaycastCote)) { if (debugRaycast) { Debug.DrawRay(gameObject.transform.position + (Vector3.right * raycastDecalement), gameObject.transform.TransformDirection(Vector3.back) * raycast_2.distance, Color.blue); } } //si aucun raycast ne touche de sols alors on applique une gravité else { _deplacement.y = -2; if (debugRaycast) { Debug.DrawRay(gameObject.transform.position - (Vector3.right * raycastDecalement), gameObject.transform.TransformDirection(Vector3.back) * distanceRaycastCote, Color.red); Debug.DrawRay(gameObject.transform.position, gameObject.transform.TransformDirection(Vector3.back) * distanceRaycast, Color.red); Debug.DrawRay(gameObject.transform.position + (Vector3.right * raycastDecalement), gameObject.transform.TransformDirection(Vector3.back) * distanceRaycastCote, Color.red); } ; } gameObject.GetComponent <Rigidbody>().velocity = _deplacement; ControlAnimation(); }