takeyohのおぼえがき

気になったこと、試したことの記録です。

lua scriptを使って音を再生する

car modで、なにか音を再生するときは、hornを使うことしか思いつきませんでしたが、今回twitterであ~るさんにlua scriptを使った方法を教えていただいたので、さっそくKNIGHT2000に実装しました。その覚書です。

 

今回追加したのは、ターボブースト時の音と、SPM起動時の音です。

まず、それぞれの音源を用意します。(今回はmp3ファイルにしました。)

そして、mp3ファイルをextensionフォルダにコピーします。

つづいて、extentionフォルダ内に新しくテキストファイル(今回はsound.luaという名前)を作成します。

KNIGHT2000用のsund.luaの中身はこうなってます。

local soundTurboBoost = ui.MediaPlayer()
local soundSPM = ui.MediaPlayer()
local soundSPMFlag = 0
soundTurboBoost:setSource('./turboboost.mp3'):setAutoPlay(false)
soundSPM:setSource('./spm.mp3'):setAutoPlay(false)

function script.update(dt)

-- ターボブースト用設定
  if car.extraA and car.speedKmh > 40 then
    soundTurboBoost:play()
  end

 

-- SPM用設定
  if car.extraD and soundSPMFlag == 0 then
    soundSPMFlag = 1
  end
  if not car.extraD then
    soundSPMFlag = 0
  end

  if soundSPMFlag == 1 and car.gas > 0.8 then
    soundSPM:play()
    soundSPMFlag = 2
  end
end

最初の5行は初期設定。変数の定義と、音源ファイルの割り当てです。

ターボブースト音源用の変数がsoundTurboBoost、SPM音源用の変数がsoundSPMです。

soundSPMFlagはSPMの音源を1回だけ再生させるための制御用フラグです。

(extraDがずっとオンになっていると、play()で音源を再生するとループ再生になってしまうのを防ぐための処理です。)

function内はゲーム中ずっとループ処理しているところになります。

それぞれターボブースト発動時とSPM発動時の条件を書いて、その中でplay()を実行しています。

 

最後に、extensionフォルダ内のext_config.iniに以下の2行を追記します。

[SCRIPT_...]
SCRIPT = "sound.lua"

これで完了です。

それぞれ音源が再生されている様子はこちら。

youtu.be

 

これだけじゃ、応用できないじゃん!という方もいらっしゃると思うので、汎用的に使えそうな、ウィンカー音の設定も参考に載せておきます。

やりかたは一緒です。

1)まずウィンカーの音源を用意します。(例:blinker.mp3)

2)音源ファイルをextensionフォルダ内にコピーします。

3)下記のlua scriptを記載したテキストファイルをextensionフォルダ内に置く。(例:sound.lua

local carSounds = ui.MediaPlayer()
carSounds:setSource('./blinkder.mp3'):setAutoPlay(false)
function update(dt)
  if car.hazardLights or car.turningLeftLights or car.turningRightLights then
    carSounds:play()
  else
    carSounds:pause()
  end
end

4)ext_config.iniに2行追記。

[SCRIPT_...]
SCRIPT = "sound.lua"

です。3の部分ですが、音を出す条件として、ハザードか、左ウィンカーか、右ウィンカーのどれかがオン(true)になった時play()を実行して音を鳴らし続け、3つとも止まっているときは、pause()を実行して音を止めるという仕組みですね。

動画にするとこんなかんじです。

youtu.be

 

/* -----codeの行番号----- */