草原を歩いた草を踏む音がして、砂漠なら砂の音、水上なら水音、フローリングには木の音が鳴っていてもいいじゃない!!
足音なんて今時のゲームならどんなゲームにもありそうな要素ですが、ツクールMVにはどうもそんな機能は付いていないようなので、自分で作っちゃいました。
1歩移動するごとに任意のSEが鳴るようにします。
まず歩数を一時的に保存する変数が必要になるので、決めておきます。
次に足音を設定するコモンイベントが必要になるので、使うコモンイベントIDを決めておきます。
並列処理のマップイベントを作り、イベントコマンドからスクリプトを選んで、このスクリプトをコピペしてください。
//足音用・並列処理イベント created by Had2Apps
var MemoVal = 1 /* 歩数を一時保存する変数ID */
var CEventID = 1 /* 1歩移動すると飛ぶコモンイベントID */
/* -------------------------------- */
if($gameParty.steps()!=$gameVariables.value(MemoVal)){
this.setupChild($dataCommonEvents[CEventID].list, 0)
$gameVariables.setValue(MemoVal,$gameParty.steps())
}
1で決めた足音を設定するコモンイベントの処理内容に、イベントコマンド→SEの演奏で、足音として演奏させたいSEを置けば完成です!
地形タグまたはリージョンIDで足音を変更し、音量、ピッチ、位相をランダムで変化させます。
コモンイベントの処理内容を一旦全消去し、新たな処理を書き加えて行きます。
変数の操作で、
変数→単独:地形タグ等を格納する任意の変数
操作→代入
オペランド→スクリプト
と設定します。
スクリプト入力欄には、地形タグで足音を変えたい場合は
リージョンIDで足音を変えたい場合は
と入力してください。
変数の操作の下にスクリプトのイベントコマンドを追加し、以下のスクリプトをコピペします。
//足音用・SEの演奏(ランダムエフェクト) created by Had2Apps
var ValueID = 15; var Param = 2
var SoundName = "Knock";
var VolumeMin = 100; var VolumeMax = 100; // 0 - 100
var PitchMin = 100; var PitchMax = 100; // 50 - 150
var PanMin = 0; var PanMax = 0; // -100 - 100
/* -------------------------------- */
if($gameVariables.value(ValueID)==Param){
PanMin*=1.5; PanMax*=1.5; AudioManager.playSe({"name":SoundName,
"volume":Math.floor(Math.random()*(VolumeMax-VolumeMin))+VolumeMin,
"pitch":Math.floor(Math.random()*(PitchMax-PitchMin))+PitchMin,
"pan":Math.floor(Math.random()*(PanMax-PanMin))+PanMin});}
まず ValueIDの値を5で設定した地形タグ等を格納する変数ID にします。
これでParamで指定した地形タグorリージョンIDに主人公が踏み込むと指定したSEが鳴るようになります。
7で編集したスクリプトをコピー&ペーストで複製し、ValueID以外のパラメータを変更すると、別の地形タグorリージョンIDで異なるSEを鳴らすことができます。
音量とピッチをランダムに変化させる上に、主人公が左にいれば左から、右にいれば右から聞こえるようにします。
6にあるスクリプトの代わりに、以下のスクリプトを使います。
//足音用・SEの演奏(画面X座標で位相変化) created by Had2Apps
var ValueID = 15; var Param = 2
var SoundName = "Blow1";
var VolumeMin = 100; var VolumeMax = 100; // 0 - 100
var PitchMin = 100; var PitchMax = 100; // 50 - 150
/* -------------------------------- */
if($gameVariables.value(ValueID)==Param){
AudioManager.playSe({"name":SoundName,
"volume":Math.floor(Math.random()*(VolumeMax-VolumeMin))+VolumeMin,
"pitch":Math.floor(Math.random()*(PitchMax-PitchMin))+PitchMin,
"pan":((this.character(-1).screenX()/SceneManager._screenWidth)-0.5)*300});}
また、7の状態のスクリプトの「var PanMin」の行(6行目)から最後までを、以下のスクリプトで上書きしても同じ効果が得られます。
/* -------------------------------- */
if($gameVariables.value(ValueID)==Param){
AudioManager.playSe({"name":SoundName,
"volume":Math.floor(Math.random()*(VolumeMax-VolumeMin))+VolumeMin,
"pitch":Math.floor(Math.random()*(PitchMax-PitchMin))+PitchMin,
"pan":((this.character(-1).screenX()/SceneManager._screenWidth)-0.5)*300});}
これを使うことで、効果を得ることができます。
複数の効果音からランダムに選出し、音量とピッチをランダムに変化させ、位相を画面Xと同期して変化させるようにします。
6にあるスクリプトの代わりに、以下のスクリプトを使います。
//足音用・SEの演奏(複数SE・画面X位相変化) created by Had2Apps
var ValueID = 15; var Param = 2
var SoundNames = ["Blow1","Crossbow","Knock"];
var VolumeMin = 100; var VolumeMax = 100; // 0 - 100
var PitchMin = 100; var PitchMax = 100; // 50 - 150
/* -------------------------------- */
if($gameVariables.value(ValueID)==Param){
AudioManager.playSe({"name":SoundNames[Math.floor(Math.random()*SoundNames.length)],
"volume":Math.floor(Math.random()*(VolumeMax-VolumeMin))+VolumeMin,
"pitch":Math.floor(Math.random()*(PitchMax-PitchMin))+PitchMin,
"pan":((this.character(-1).screenX()/SceneManager._screenWidth)-0.5)*300});}
また、9の状態のスクリプトの3行目を
var SoundNames = ["Blow1","Crossbow","Knock"];
8行目を
AudioManager.playSe({"name":SoundNames[Math.floor(Math.random()*SoundNames.length)],
で上書きしても同じ効果が得られます。
幅:SceneManager._screenWidth
高さ:SceneManager._screenHeight
Math.floor(Math.random()*(最大値-最小値))+最小値
$gameParty.steps()
this.setupChild($dataCommonEvents[コモンイベントID].list, 0)
以上です。
足音機能ぐらい、デフォでついてて欲しかったなあ
あと、意外と足音に最適な音がデフォ素材に入ってない・・・
砂漠に立っている時だけ足が遅くなるとか、特定の地形ではHPが5秒単位で回復するとか、そういう地形・タイル単位で何かイベントを起こしたい
見に行く