Unity3Dのホバークラフト

プログラミング学校の教材。パート14

以前のチュートリアルはここにあります:
  1. 宇宙船





  2. ドミノ





  3. ゆるい鳥





  4. 重力室





  5. プラットフォーマー





  6. ツリー(プラグインSpeedTree)





  7. SketchUpで家をモデリングする





  8. 森の中の家





  9. 雨の影響。粒子





  10. ビリヤード





  11. リキッドキャラクター





  12. イベントシステムに固執して作業する





  13. Unity3Dシンセサイザー





今日、私たちはリラックスして楽しい気分になっています!したがって、このチュートリアルは単純で「短い」ものになります。グラフィックは使用しません(ただし、プロジェクトを改善する権利を制限する人は誰もいません)。管理に注意を払い、ホバークラフトの作成などの物理を使用します。





̆ , ̆ . , .





, - ,





Rigidbody :





, ̆ Convex, Rigidbody . ̈ ConstantForce , .





ご覧のとおり、スクリーンショットはすでにスクリプトでオーバーレイされています。ただし、先に進む前に、ステアリングベーンを取り付ける必要があります。

また、Gizmoという名前の空のゲームオブジェクトがモデルのステアリングブレードの取り付けポイントに取り付けられ、ブレード自体がその中に配置されます。





スクリプトは、最後の前のスクリーンショットに従って構成されています。スクリプトの完全なリストは次のようになります。





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

      
      



この場合、最初に物理エンジン、次にサウンドエンジンの順に、スクリプトを指定することをお勧めします。





完了しました。








All Articles