Aéroglisseur dans Unity 3D

Matériel pédagogique pour l'école de programmation. Partie 14

Les tutoriels précédents peuvent être trouvés ici:
  1. Vaisseau spatial





  2. Dominos





  3. Oiseau Flappy





  4. Salle de gravité





  5. Plateforme





  6. Arbres (plugin SpeedTree)





  7. Modélisation d'une maison dans SketchUp





  8. Maison dans les bois





  9. Effet pluie. Particules





  10. Billard





  11. Caractère liquide





  12. Coller et travailler avec le système d'événements





  13. Synthétiseur 3D Unity





Aujourd'hui, nous sommes d'humeur à se détendre et à s'amuser! Par conséquent, ce tutoriel sera simple et "court". Nous ne travaillerons pas avec des graphiques (mais personne ne vous limitera dans le droit d'améliorer le projet), nous ferons attention à la gestion et travaillerons avec la physique, par exemple en créant un aéroglisseur.





̆ , ̆ . , .





, - ,





Rigidbody :





, ̆ Convex, Rigidbody . ̈ ConstantForce , .





Comme vous pouvez le voir, la capture d'écran a déjà été recouverte d'un script. Mais avant de procéder, il est nécessaire d'installer les aubes de direction.

En outre, des objets de jeu vides portant le nom de Gizmo sont installés sur le modèle aux points d'installation des lames de direction et les lames elles-mêmes y sont posées.





Le script est configuré selon la capture d'écran avant-dernier. La liste complète du script ressemble à ceci:





using UnityEngine;
using System.Collections;
 
public class Howercraft: MonoBehaviour {

    public Rigidbody HowercraftRigidbody; //  
    public Transform CenterOfMass; //  
    public float power = 25000; //  /
    public float torque = 25000; //  /
    float finAngle; //    
    float pitch; //   
    public Transform[] Fins; //   
    public AudioSource mainEngine; //    
  
    public AudioSource pushEngine; //  
 
    // Use this for initialization 
    void Start() {
        HowercraftRigidbody.centerOfMass = CenterOfMass.position - HowercraftRigidbody.position; //   
    }
 
    // Update is called once per frame
    void Update() {
        
        float inpFB = Input.GetAxis("Vertical"); //  /
        float inpLR = Input.GetAxis("Horizontal"); //  /
      
        Vector3 vely = new Vector3(HowercraftRigidbody.transform.forward.x, 0, HowercraftRigidbody.transform.for ward.z); //    
  
        float gain = Mathf.Clamp01(HowercraftRigidbody.transform.up.y); //  ,    
     
        HowercraftRigidbody.AddForce(vely * power * inpFB * gain, ForceMode.Force); //   
      
        HowercraftRigidbody.AddRelativeTorque(0, torque * inpLR * inpFB * gain, 0, ForceMode.Force); //  
      
        finAngle = Mathf.Lerp(finAngle, -45 * inpLR, Time.deltaTime / 0.2f); //  
    
        foreach(Transform Fin in Fins) {
            Fin.localEulerAngles = new Vector3(0, finAngle, 0); //   
        }
        mainEngine.pitch = 0.9f + HowercraftRigidbody.velocity.magnitude / 60f; //   
       
        pitch = Mathf.Lerp(pitch, Mathf.Abs(inpFB) * 1.3f, Time.deltaTime / 0.5f); //    
       
        pushEngine.pitch = 1f + 2f * pitch;
        pushEngine.volume = 0.3f + pitch / 3f;
    }
}

      
      



Dans ce cas, il vaut mieux donner le script séquentiellement, d'abord le moteur physique, puis le moteur sonore.





Fait!








All Articles