Aerodeslizador en Unity 3D

Materiales didácticos para la escuela de programación. Parte 14

Los tutoriales anteriores se pueden encontrar aquí:
  1. Astronave





  2. Dominó





  3. Pájaro flappy





  4. Sala de gravedad





  5. Platformer





  6. Árboles (complemento SpeedTree)





  7. Modelando una casa en SketchUp





  8. Casa en el bosque





  9. Efecto lluvia. Partículas





  10. Billar





  11. Carácter líquido





  12. Cumplir y trabajar con el sistema de eventos





  13. Sintetizador Unity 3D





¡Hoy estamos de humor para relajarnos y divertirnos! Por tanto, este tutorial será sencillo y "breve". No trabajaremos con gráficos (pero nadie te limita en el derecho a mejorar el proyecto), prestaremos atención a la gestión y trabajaremos con la física, por ejemplo, creando un aerodeslizador.





̆ , ̆ . , .





, - ,





Rigidbody :





, ̆ Convex, Rigidbody . ̈ ConstantForce , .





Como puede ver, la captura de pantalla ya se superpuso con un script. Pero antes de continuar, es necesario instalar las paletas de dirección.

Además, los objetos de juego vacíos con el nombre Gizmo se instalan en el modelo en los puntos de instalación de las palas de dirección, y las palas se colocan en ellos.





El script se configura de acuerdo con la captura de pantalla anterior a la última. La lista completa del script se ve así:





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

      
      



En este caso, es mejor dar el guión secuencialmente, primero el motor de física, luego el motor de sonido.





¡Hecho!








All Articles