株式会社ビーム

株式会社ビームのHPでは、主にゲームソフトウェアの開発業務をしております。サウンド制作 (音楽・効果音制作、Wwise実装)、ゲームエンジンへの実装業務 (Unity / Unreal Engine など)、グラフィックデザイン制作、 映像制作についてご相談ください。

【Unity】地面の素材によって足音を切り替えるScript

草や土、砂地など、地面の素材のことを「マテリアル」とか「アトリビュート」と呼んだりしますが、これらに応じて足音を変えたい場合、サウンド用のミドルウェア(Wwise、CRIなど)があればお手の物ですが、ミドルウェアを導入できない場合は自前のスクリプトで制御する必要があります。

やり方は色々ありますが、Terrainのテクスチャを参照して切り替える方法を紹介します。

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

[RequireComponent(typeof(AudioSource))]

public class FootStep : MonoBehaviour
{
    [System.Serializable]
    public class AudioClips
    {
        public string groundTypeTag;
        public AudioClip[] audioClips;
    }
    // 足音の種類毎にタグ名とオーディオクリップを登録する
    [SerializeField] List<AudioClips> listAudioClips = new List<AudioClips>();
    // Terrain Layersと足音判定用タグの対応関係を記入する
    [SerializeField] string[] terrainLayerToTag;
    [SerializeField] float pitchRange = 0.1f;
    // Terrain Layersのテクスチャを参照する
    [SerializeField] TerrainTextureDetector terrainDetector;


    private Dictionary<string, int> tagToIndex = new Dictionary<string, int>();
    private int groundIndex = 0;
    protected AudioSource source;

    private void Awake()
    {
        // アタッチしたオーディオソースのうち1番目を使用する
        source = GetComponents<AudioSource>()[0];

        for (int i = 0; i < listAudioClips.Count(); ++i)
            tagToIndex.Add(listAudioClips[i].groundTypeTag, i);
    }

    void Update()
    {
        var index = terrainDetector.GetTextureIndexAt(transform.position);
        groundIndex = index;
    }


    public void SE_Steps()
    {
        // groundIndexで呼び出すオーディオクリップを変える
        AudioClip[] clips = listAudioClips[groundIndex].audioClips;

        source.pitch = 1.0f + Random.Range(-pitchRange, pitchRange);
        source.PlayOneShot(clips[Random.Range(0, clips.Length)]);
    }

}

次へ 投稿

前へ 投稿

© 2024 beam-works.co.jp