13.

ジェットエンジンのエフェクトとオーディオ

ページの作成
テンプレートを更新

ページの作成

親となるページを選択してください。

ページは必ず何かしらの親ページに紐づきます。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球

子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール

親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!

本稿はジェットエンジンのエフェクトとオーディオに関して説明します。

 

前提

飛行機の加速・原則スクリプトはこちらを参照。

Standard Assetのものをいくつか流用するのでインポートしておく。

 

コンポーネントの設定

1からオブジェクトを追加してParticle Systemの設定をするのは非常にめんどくさいのでStandart Assets → Vegucles → Aircraft → Prefabs → AircraftJet をヒエラルキーウィンドウに追加する。

AircraftJet → Particles → AfterburnerLeft を自分の飛行機オブジェクトの配下に以下のようにコピーする。

コンポーネント内のJet Particle Effect (Script)は不要なので削除する。

 

スクリプト

Jet Particle Effectより簡略化したスクリプトにする。

適当なスクリプトを作成して自分のAfterburnerオブジェクトに追加する。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class AfterburnerController : MonoBehaviour {

    ParticleSystem afterburner;
    public Color minColour;
    private float originalStartSize;
    private float originalLifetime;
    private Color originalStartColor;

    private AudioSource engineSoundSource;
    [SerializeField] private AudioClip engineSound;
    public float engineMinDistance = 50f;
    public float engineMaxDistance = 1000f;
    public float engineDopplerLevel = 1f;
    [Range(0f, 1f)] public float engineMasterVolume;
    [SerializeField] private float engineMinThrottlePitch = 0.4f;
    [SerializeField] private float engineMaxThrottlePitch = 2f;
    [SerializeField] private float engineFwdSpeedMultiplier = 0.002f;

    // Use this for initialization
    void Start () {
        afterburner = GetComponent<ParticleSystem>();
        originalLifetime = afterburner.main.startLifetime.constant;
        originalStartSize = afterburner.main.startSize.constant;
        originalStartColor = afterburner.main.startColor.color;

        engineSoundSource = gameObject.AddComponent<AudioSource>();
        engineSoundSource.playOnAwake = false;
        engineSoundSource.clip = engineSound;
        engineSoundSource.minDistance = engineMinDistance;
        engineSoundSource.maxDistance = engineMaxDistance;
        engineSoundSource.loop = true;
        engineSoundSource.dopplerLevel = engineDopplerLevel;
        engineSoundSource.volume = engineMasterVolume;
        engineSoundSource.Play();

    }

    // Update is called once per frame
    void Update () {

        if (Input.GetKeyDown(KeyCode.Space))
        {
            afterburner.Stop();
        }
        else if (Input.GetKeyUp(KeyCode.Space))
        {
            afterburner.Play();
        }

        var enginePowerProportion = Mathf.InverseLerp(0, MyAircraftController.staticMaxSpead, MyAircraftController.speed);

        engineSoundSource.pitch = Mathf.Lerp(engineMinThrottlePitch, engineMaxThrottlePitch, enginePowerProportion);

        engineSoundSource.pitch += MyAircraftController.speed * engineFwdSpeedMultiplier;


    }
}

 

ごちゃごちゃ書いてはいるが、飛行機オブジェクトの最大速度現在の速度を関数に当てはめればあとはよろしくやってくれる。

 

前提で紹介した飛行機の加速・原則スクリプトでは最大速度が取得できないので以下の黄色くマーキングした部分を追記すればOK。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class MyAircraftController : MonoBehaviour {

    public float maxSpead; //最大速度
 
  public static float staticMaxSpead; //最大速度
    public float verticalSpead; //縦の旋回速度
    public float horizontalSpead; //横の旋回加速
    public float accel; //加速
    public static float speed = 0; //現在のスピード
    private float minSpeed = 0; //最低速度 マイナスになりすぎないように

    // Use this for initialization
    void Start () {

        staticMaxSpead = maxSpead;
        //最低速度の割り出し
        minSpeed = maxSpead * (float)0.2 * -1;
    }
    
    // Update is called once per frame
    void Update () {

        //方向転換
        float v = Input.GetAxis("Vertical") * verticalSpead;
        float h = Input.GetAxis("Horizontal") * horizontalSpead;
        this.transform.Rotate(new Vector3(v, 0, -h));

        //加速処理
        if(maxSpead >= speed)
        {
            if (!Input.GetKey(KeyCode.Space))
            {
                //加速
                speed = speed + accel;
            }
        }


        //減速処理
        if (minSpeed <= speed)
        {
            if (Input.GetKey(KeyCode.Space))
            {
                speed = speed - accel;
            }

        }

        this.transform.position += transform.forward * speed * Time.deltaTime;
    }
}

 

 

子ページ
子ページはありません
同階層のページ
  1. スクリプトの作成と実行
  2. C#のクラス一覧
  3. シーンの移動方法
  4. オブジェクトの移動・回転
  5. キーボードの入力値を受け取る
  6. オブジェクトの取得とコンポーネントの取得
  7. 衝突時の処理
  8. Webページを開く
  9. コンポーネントの取得
  10. 処理を一定時間待つ
  11. コンソールへのログ出力方法
  12. 飛行機の加速と減速
  13. ジェットエンジンのエフェクトとオーディオ

最近の質問

コメント一覧

コメントがありません

ログインしなければコメント投稿はできません。