Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

【Unity】調整しやすい音量設定スライダーを作る

More than 1 year has passed since last update.

はじめに

Unityで音量設定機能を用意する場合、
基本はAudioMixerとuGUIのSliderを使うことになると思います。
やり方はこちらの記事が分かりやすくオススメです。
http://tsubakit1.hateblo.jp/entry/2015/05/23/234053

しかし、いざその通りに実装してみると、
(機能としては問題ないものの)どこか使いにくく感じます。
具体的にはすぐに音量が下がってしまって細かい調整がしにくいです。

今回はその点を解消する方法をご紹介したいと思います。

デシベルと音圧

なぜそのように感じるかの推測ですが、
AudioMixerから抜き出せる「Volume」がデシベルだからということになるでしょうか。1
デシベルは利便性のために音圧を常用対数で変換したものです。
すなわち、上がり幅が線形ではありません。(20デシベル上がるごとに音圧は10倍になる)
そのため、値が大きい領域では急激に変化し、小さい領域ではほとんど変わらないということになります。
pa-db.png
ただデシベル自体が人間の感覚に近いらしいので、音量調整をデシベルでやるのは何もおかしくない気もするのですが…。
スライダーなどで調整するとなると、スライダーを動かす量と音圧の変化量が大きく異なるため何となく扱いづらいと感じるということなんでしょうか。

結論

ともかく、Unityのスライダー(0~1)で音量を調整するにはデシベルではなく音圧で行う(下記の変換を行う)ことを推奨します。

  • スライダー値(s [0.0001, 1]) → AudioMixerのVolume(v [-80, 0])
v = 20 \times \log_{10} {s}
  • AudioMixerのVolume(v [-80, 0]) → スライダー値(s [0.0001, 1])
s = 10^{\frac v {20}}

ソースコード

ということで、最初から音量調整用を想定したスライダーのコンポーネントを作りました。
人間の感覚に合わなくなった…のかもしれませんが、調整するにはいい感じでできます。
よろしければ使ってみてください。
unity-volume-slider

参考


  1. 正確にはUnityのVolumeの単位は一般的なデシベルとは違うようです。一般的には0デシベルを最小可聴値とするのに対し、Unityでは0デシベルがデフォルト値的な何かになっているようです。なので範囲は-80~20。まあ基準値からの比という意味では同じです、多分…。 

unity-game-dev-guild
趣味・仕事問わずUnityでゲームを作っている開発者のみで構成されるオンラインコミュニティです。Unityでゲームを開発・運用するにあたって必要なあらゆる知見を共有することを目的とします。
https://unity-game-dev-guild.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away