Matériel pédagogique pour l'école de programmation. Partie 14
Les tutoriels précédents peuvent être trouvés ici:
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!