Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
「Unityサウンド入門編」と「サウンドワークショップ事例」  【TechBuzz】2012-09-27 田中孝
【駆け上がれ馬ども】iOS版  リリースしました 是非、ダウンロードしてみてください。      【KakeagareUmadomo】で検索           AppStoreへのリンクは http://itunes.apple.com/jp...
レジュメ• Unity サウンド入門 「ゲームジャムで作成したプログラムの説明」を通して 「サウンドプログラムって奥が深い」と言う事を伝えたい• サウンドワークショップ事例 「ワークショップで紹介したUnityとツールの連携」 のデモを通して ...
【Unityサウンド入門編】 サウンド製作(DTMとか波形編集とか) に関してはググるといろいろありますが   【ゲームの音を鳴らす方法】って    なかなか見当たらない。今回は「サウンドプログラマの入門編」です。
Unityで作成した 「駆け上がれ馬ども」の【サウンド関連のプログラム】   を紹介します。
合計16個のサウンドを用意 【BGM】2個                 【効果音】8個 •BGM(メインBGM)            •eat(ばくっ) •ending(エンディングBGM)      •flagget(ゲット音)【台詞】6...
合計16個のサウンドを用意とりあえず、音を聞いてみます。UNITY WEBPLAYER版↓http://chahix.ddo.jp/~chahi/unity/20120806FGJ12/soundTest.html
これらの「16個の音」を どうやって用意したか   というと事で 制作ツールをさらっと紹介
合計16個のサウンドを用意これらのツールを駆使してwavファイルを作ります。
DAWの【Logic Pro】 で効果音、BGMを作った。     ライブラリから   馬の鳴き声を検索したり ソフトシンセで効果音を作ったり   声にエフェクトをかけたり
声は( VOICEROID+民安ともえ)      を使いました。   なお、無料アプリの使用は問題ないですが、   商用アプリで使う場合は問い合わせが必要
波形のモノラル化、レート 変更、トリミングはAudacityを使いました。
できたwavファイルをUnityへ追加します。
波形ファイル(.wav)をResources/Sound以下に配置          Unity側の波形の設定          3D Sound、Format等            はここで行う
これらの16個の音を    【ただ鳴らす】だけではなく   ゲーム中不自然にならないようにまた【効果的になるような演出】をしています。
サウンド関連処理すべてを【SoundManager.cs】スクリプトで      行っています。
【SoundManager】  プレファブを作りResourcesに置きました  【SoundManager】は  すべてのシーンに存在しゲーム中で音を鳴らしたい場合は これを経由して鳴らします。
【SoundManager】を検索して              関数を呼び出しています。   public class GameMain : MonoBehaviour {�SoundManager sm;void Start () {���...
複数人でシーンを作っ   ていて、【SoundManager】配置忘れが起るのを  避けるため、プログラムで自動的にクローンを作るように  していた。
クローンはこんな感じで作られた    using UnityEngine;using System.Collections;public class GameMain : MonoBehaviour {�� SoundManager sm;� ...
ちなみにTag検索してます    using UnityEngine;using System.Collections;public class GameMain : MonoBehaviour {�� SoundManager sm;� vo...
さて、ここからは  【SoundManager.cs】がサウンド関連で何をしているかをソースを見ながら説明します。
AudioClip    using UnityEngine;using System.Collections;public class SoundManager : MonoBehaviour {�  AudioClip bgm0;     ...
【Awake】で【Resources】からロードし        ソースだけで登録を済ませる。(ミス防止)        ファイル名と変数名も同じに。(ミス防止)    �   �    bgm0 = Resources.Load("Sound...
�  AudioSource audioSourceBgm;�                                                              【AudioSource】は�   AudioSource...
Awakeで【AudioSource】生成。        【AudioSource】一つで一つ音が鳴る。         同時に10音+11音鳴る可能性がある。    �   void Awake () {�   �   audioSourc...
GameObject.DontDestroyOnLoad(this.gameObject);        【SoundManager】は一度生成したら破棄されないように【DontDestroyOnLoad】を呼ぶこれで、シーンが切り替わっても...
例えば【BGM】は明らかに一つしか鳴らないから、 【EndingのBGM】と兼用したり節約できるところは節約しています。
再生関数はすべてカプセル化。【サウンドイベント】や【キュー】という考え方。  サウンド処理ごとに関数を用意した。   こうすると、後で拡張しやすい。
ほとんどただ    �   public void PlayEnding()�   {�   �   audioSourceBgm.clip = ending;         再生するだけの�   �   audioSourceBgm.loo...
余談リトライは「やりなおし∼」とやる気無い声で馬が昇天する時は、「ヤラレチャッタ」という    感じなど意識して作った。
左側のボタンが関数呼び出しテストサウンドテストがあると大まかなな音量バランス調整がしやすいUNITY WEBPLAYER版↓http://chahix.ddo.jp/~chahi/unity/20120806FGJ12/soundTest.html
public void PlayRetry()�   {�   �  audioSourceStaff.clip = retry;�   �  audioSourceStaff.Play();�   }                     ...
にんじんを投げる時に 「にんじーん」とかけ声が入る。連続して投げ入れても一音しか鳴らない。   音割れとかしなくて良い。
�   public void TitleCall()�   {�   �   audioSourceStaff.clip = titleCall;�   �   audioSourceStaff.Play();�   }��   public...
余談  タケノコが伸びる音はシンセ音だけだったけど、途中で声も追加した。
�   public void PlayTakenoko()                         「タケノコ!」�   {��    �    �        audioSourceTakenoko.clip = takenoko...
ゴール時、馬がゴールに入ると  3秒間だけ「チクタク」時計が鳴る。その間にゴールした馬だけスコアに加算される。   加算されるので音程が上がる。  連続して入ると音がどんどん上がる。  【連続コンボヒット】の気持ちよさ。
public void PlayTickStart()�   {�   �  if(audioSourceTick.isPlaying == false){�   �  �    audioSourceTick.clip = tick;�   ...
チクタク音停止と停止時に                                ジェット音も鳴らした                                                              「チッ」のル...
「ピコン」音は【連続コンボヒット】音    �   public void PlayPicon(Vector3 pos)�   {�   �   if(audioSourcePicon[piconCount%maxPicon].isPlayin...
�   public void PlayPicon(Vector3 pos)�   {�   �   if(audioSourcePicon[piconCount%maxPicon].isPlaying == true)�   �   {�  ...
BGMは常に鳴り続けている。もし鳴っていなかったら鳴るようにしていた。台詞が鳴る時はBGMが自動的にレベルを下げる   ようにしていた。【ダッキング】
BGM<台詞 (ダッキング)    �   void Update () {��   �   if(audioSourceBgm.isPlaying == false){         【台詞を聞かせたい】の�   �   �   audio...
BGMはもし停止していたら自動リトリガ    �   void Update () {��   �   if(audioSourceBgm.isPlaying == false){�   �   �   audioSourceBgm.clip ...
【SoundManager】まとめ【サウンド登録】、【SoundSource作成】【再生イベント関数用意(カプセル化)】        【多重再生】【ピッチ半音あげ】、【ランダムピッチ】     【ダッキング効果】、【停止時再生音(再生時ループ...
【ADX2】でやると・・・  Unity単体でやるよりも多くの【サウンド演出】が楽に実装できます。  【より高音質高圧縮な音声】  【制限のないループ再生】  【より多くのサウンド管理】
【サウンド演出(イベント)をキュー】として【ゲームによくある基本演出はツール上で設定】   (プライオリティ、発音数管理)     【プログラム側は最小限】  (初期化、PACKロード、再生、停止)   【作業分担】【暗号化】が可能に   【イ...
と、いうことで、【サウンドワークショップ】の紹介です。
【サウンドワークショップ事例】       2012-8-21     CEDEC2012で   Unityで作ったアプリ  「ピンボールに音を付ける」というワークショップを行いました。
『CRI ADX2』サウンドオーサリングツール           体験会       (初∼中級編)∼ゲーム開発の流れに沿ったサウンド制作の     新しいワークフロー∼       2012-08-22 田中孝               ...
はじめに       52
はじめに• ゲーム開発の流れに沿った サウンド制作の新しいワークフロー ?                      52
はじめに• ゲーム開発の流れに沿った サウンド制作の新しいワークフロー ?• ちょっと変わったゲームの音作りの提案になるかも?                        52
はじめに• ゲーム開発の流れに沿った サウンド制作の新しいワークフロー ?• ちょっと変わったゲームの音作りの提案になるかも?• ゲームジャムっぽい?                        52
はじめに• ゲーム開発の流れに沿った サウンド制作の新しいワークフロー ?• ちょっと変わったゲームの音作りの提案になるかも?• ゲームジャムっぽい?• 音をつけるの楽しいよね?                        52
環境について         53
環境について• 少ない手順でゲーム中の音を加工できる環境として 【CRI ADX2】の【CRI Atom Craft】を使います。 ※イベント版ADX2として特別なツールとランタイムを使用しています。 正式リリース版と混在しないよう注意してくだ...
環境について• 少ない手順でゲーム中の音を加工できる環境として 【CRI ADX2】の【CRI Atom Craft】を使います。 ※イベント版ADX2として特別なツールとランタイムを使用しています。 正式リリース版と混在しないよう注意してくだ...
環境について• 少ない手順でゲーム中の音を加工できる環境として 【CRI ADX2】の【CRI Atom Craft】を使います。 ※イベント版ADX2として特別なツールとランタイムを使用しています。 正式リリース版と混在しないよう注意してくだ...
音の演出    【初∼中級編】    第1章 バンパーのリアクション音 •                                       第5章 ボールロスト時の声•                                ...
ゲームについて                        マウスクリックする                        と                        ボールの位置を                        クリ...
ゲームのポーズについて       【Stopper】を       チェックすると       ゲームオーバーにな       なくなります。       【Pause/Resume】       ボタンでポーズでき       ます。   ...
と、時間ないので• ワークショップの情報は• 詳しくはSlideShare で「ADX2 CEDEC」 で検索
デモ• 簡単に• ツール起動、Unityアプリ起動• インゲーム接続、ツール紹介
最後に•   CRI・ミドルウェアではお客様のニーズに合わせた解決策を    一緒に考えます。難しい案件でも    無料で相談にのります。お手伝いします。    お気軽にお問い合わせ下さい。•   Facebook「サウンド助け合い所」「ADX...
Nächste SlideShare
Wird geladen in …5
×

第8回Unity勉強会 Unityサウンド入門編 と サウンドワークショップ事例 Tech buzz8 Unity Study 20120927 tanaka

第8回Unity勉強会 Unityサウンド入門編 と サウンドワークショップ事例

  • Als Erste(r) kommentieren

第8回Unity勉強会 Unityサウンド入門編 と サウンドワークショップ事例 Tech buzz8 Unity Study 20120927 tanaka

  1. 1. 「Unityサウンド入門編」と「サウンドワークショップ事例」 【TechBuzz】2012-09-27 田中孝
  2. 2. 【駆け上がれ馬ども】iOS版 リリースしました 是非、ダウンロードしてみてください。 【KakeagareUmadomo】で検索 AppStoreへのリンクは http://itunes.apple.com/jp/app/i-lian-genlite/ id552793968?mt=8&ign-mpt=uo%3D4
  3. 3. レジュメ• Unity サウンド入門 「ゲームジャムで作成したプログラムの説明」を通して 「サウンドプログラムって奥が深い」と言う事を伝えたい• サウンドワークショップ事例 「ワークショップで紹介したUnityとツールの連携」 のデモを通して 「もっとサウンドを調整できる事」を伝えたい
  4. 4. 【Unityサウンド入門編】 サウンド製作(DTMとか波形編集とか) に関してはググるといろいろありますが 【ゲームの音を鳴らす方法】って なかなか見当たらない。今回は「サウンドプログラマの入門編」です。
  5. 5. Unityで作成した 「駆け上がれ馬ども」の【サウンド関連のプログラム】 を紹介します。
  6. 6. 合計16個のサウンドを用意 【BGM】2個 【効果音】8個 •BGM(メインBGM) •eat(ばくっ) •ending(エンディングBGM) •flagget(ゲット音)【台詞】6個 •jet(ステージクリア音)•CountDown(3、2、1) •picon(馬カウント音)•staff(スタッフロール読み上げ) •shoten(短いアーメン)•retry(やりなおし!)•takenokoserif(たけのこ!) •Start(ステージ開始ファンファーレ)•titlecall(かけあがれ、うまども) •tick(時計音)•ninjin(にんじーん!)
  7. 7. 合計16個のサウンドを用意とりあえず、音を聞いてみます。UNITY WEBPLAYER版↓http://chahix.ddo.jp/~chahi/unity/20120806FGJ12/soundTest.html
  8. 8. これらの「16個の音」を どうやって用意したか というと事で 制作ツールをさらっと紹介
  9. 9. 合計16個のサウンドを用意これらのツールを駆使してwavファイルを作ります。
  10. 10. DAWの【Logic Pro】 で効果音、BGMを作った。 ライブラリから 馬の鳴き声を検索したり ソフトシンセで効果音を作ったり 声にエフェクトをかけたり
  11. 11. 声は( VOICEROID+民安ともえ) を使いました。 なお、無料アプリの使用は問題ないですが、 商用アプリで使う場合は問い合わせが必要
  12. 12. 波形のモノラル化、レート 変更、トリミングはAudacityを使いました。
  13. 13. できたwavファイルをUnityへ追加します。
  14. 14. 波形ファイル(.wav)をResources/Sound以下に配置 Unity側の波形の設定 3D Sound、Format等 はここで行う
  15. 15. これらの16個の音を 【ただ鳴らす】だけではなく ゲーム中不自然にならないようにまた【効果的になるような演出】をしています。
  16. 16. サウンド関連処理すべてを【SoundManager.cs】スクリプトで 行っています。
  17. 17. 【SoundManager】 プレファブを作りResourcesに置きました 【SoundManager】は すべてのシーンに存在しゲーム中で音を鳴らしたい場合は これを経由して鳴らします。
  18. 18. 【SoundManager】を検索して 関数を呼び出しています。 public class GameMain : MonoBehaviour {�SoundManager sm;void Start () {��� GameObject go = GameObject.FindGameObjectWithTag("SoundManager");� if(go == null){� � go = GameObject.Instantiate(Resources.Load("SoundManager",typeof(GameObject))) as GameObject;� }� sm = go.GetComponent<SoundManager>();}public void Hoge(){�������sm.PlayHoge();� //�「Hoge」を再生}
  19. 19. 複数人でシーンを作っ ていて、【SoundManager】配置忘れが起るのを 避けるため、プログラムで自動的にクローンを作るように していた。
  20. 20. クローンはこんな感じで作られた using UnityEngine;using System.Collections;public class GameMain : MonoBehaviour {�� SoundManager sm;� void Start () {� � � � � � �� � GameObject go = GameObject.FindGameObjectWithTag("SoundManager");� � if(go == null){� � � go = GameObject.Instantiate(Resources.Load("SoundManager",typeof(GameObject))) as GameObject;� � }� � sm = go.GetComponent<SoundManager>();� �
  21. 21. ちなみにTag検索してます using UnityEngine;using System.Collections;public class GameMain : MonoBehaviour {�� SoundManager sm;� void Start () {� � � � � � �� � GameObject go = GameObject.FindGameObjectWithTag("SoundManager");� � if(go == null){� � � go = GameObject.Instantiate(Resources.Load("SoundManager",typeof(GameObject))) as GameObject;� � }� � sm = go.GetComponent<SoundManager>();� �
  22. 22. さて、ここからは 【SoundManager.cs】がサウンド関連で何をしているかをソースを見ながら説明します。
  23. 23. AudioClip using UnityEngine;using System.Collections;public class SoundManager : MonoBehaviour {� AudioClip bgm0; 16個の波形の登録の為� AudioClip start;� AudioClip jet;� AudioClip picon; AudioClipを� AudioClip tick;�� AudioClip takenoko; AudioClip countDown; ファイル名� AudioClip takenokoserif;� AudioClip ninjin; そのまま変数名にして� AudioClip staff;� AudioClip titleCall;� AudioClip eat; 宣言� AudioClip shoten;� AudioClip retry;� AudioClip flagget;� AudioClip ending;�
  24. 24. 【Awake】で【Resources】からロードし ソースだけで登録を済ませる。(ミス防止) ファイル名と変数名も同じに。(ミス防止) � � bgm0 = Resources.Load("Sound/BGM0", typeof(AudioClip)) as AudioClip;� � start = Resources.Load("Sound/Start", typeof(AudioClip)) as AudioClip;� � jet = Resources.Load("Sound/jet", typeof(AudioClip)) as AudioClip;� � picon = Resources.Load("Sound/picon", typeof(AudioClip)) as AudioClip;� � tick = Resources.Load("Sound/tick", typeof(AudioClip)) as AudioClip;� � takenoko = Resources.Load("Sound/takenoko", typeof(AudioClip)) as AudioClip;� � countDown = Resources.Load("Sound/CountDown", typeof(AudioClip)) as AudioClip;� � takenokoserif = Resources.Load("Sound/takenokoserif", typeof(AudioClip)) as AudioClip;� � ninjin = Resources.Load("Sound/ninjin", typeof(AudioClip)) as AudioClip;� � staff = Resources.Load("Sound/staff", typeof(AudioClip)) as AudioClip;� � titleCall = Resources.Load("Sound/titlecall", typeof(AudioClip)) as AudioClip;� � eat = Resources.Load("Sound/eat", typeof(AudioClip)) as AudioClip;� � shoten = Resources.Load("Sound/shoten", typeof(AudioClip)) as AudioClip;� � retry = Resources.Load("Sound/retry", typeof(AudioClip)) as AudioClip;� � flagget = Resources.Load("Sound/flagget", typeof(AudioClip)) as AudioClip;� � ending= Resources.Load("Sound/ending", typeof(AudioClip)) as AudioClip;�
  25. 25. � AudioSource audioSourceBgm;� 【AudioSource】は� AudioSource audioSourceJet; 発音単位で必要。�� int maxPicon = 10;� AudioSource[] audioSourcePicon = new AudioSource[10]; 【Picon音】は� AudioSource audioSourceTick; 連続コンボ音で使うので10個用� AudioSource audioSourceTakenoko;� AudioSource audioSourceTakenokoSerif; 意。� AudioSource audioSourceCountDown;� AudioSource audioSourceNinjin;� AudioSource audioSourceStaff; あとの音は一音色� AudioSource audioSourceEat;� AudioSource audioSourceShoten; 一ボイス。� AudioSource audioSourceFlagget;� 間違って� int piconCount = 0;� � 沢山リクエストしても 【後着優先】 【モノフォニック】 になる。
  26. 26. Awakeで【AudioSource】生成。 【AudioSource】一つで一つ音が鳴る。 同時に10音+11音鳴る可能性がある。 � void Awake () {� � audioSourceBgm = gameObject.AddComponent<AudioSource>();� � audioSourceJet = gameObject.AddComponent<AudioSource>();� � for(int i =0;i<maxPicon;i++){� � � audioSourcePicon[i] = gameObject.AddComponent<AudioSource>();� � }� � audioSourceTick = gameObject.AddComponent<AudioSource>();� � audioSourceTakenoko = gameObject.AddComponent<AudioSource>();� � audioSourceTakenokoSerif = gameObject.AddComponent<AudioSource>();� � audioSourceCountDown = gameObject.AddComponent<AudioSource>();� � audioSourceNinjin = gameObject.AddComponent<AudioSource>();� � audioSourceStaff = gameObject.AddComponent<AudioSource>();� � audioSourceEat = gameObject.AddComponent<AudioSource>();� � audioSourceShoten = gameObject.AddComponent<AudioSource>();� � audioSourceFlagget = gameObject.AddComponent<AudioSource>();� �
  27. 27. GameObject.DontDestroyOnLoad(this.gameObject); 【SoundManager】は一度生成したら破棄されないように【DontDestroyOnLoad】を呼ぶこれで、シーンが切り替わっても BGMが途切れなくなります。
  28. 28. 例えば【BGM】は明らかに一つしか鳴らないから、 【EndingのBGM】と兼用したり節約できるところは節約しています。
  29. 29. 再生関数はすべてカプセル化。【サウンドイベント】や【キュー】という考え方。 サウンド処理ごとに関数を用意した。 こうすると、後で拡張しやすい。
  30. 30. ほとんどただ � public void PlayEnding()� {� � audioSourceBgm.clip = ending; 再生するだけの� � audioSourceBgm.loop = true;� � audioSourceBgm.Play();� � 関数。� }�� public void PlayBGM()�� { � audioSourceBgm.clip = bgm0; 後で拡張しても呼び出し� � audioSourceBgm.loop = true;� � audioSourceBgm.Play();� � 側のソースは弄らないで� }�� public void PlayFlagget() 済む。� {� � audioSourceFlagget.clip = flagget;� � audioSourceFlagget.Play();� } 【BGM】は共有なので 【clip】指定している。
  31. 31. 余談リトライは「やりなおし∼」とやる気無い声で馬が昇天する時は、「ヤラレチャッタ」という 感じなど意識して作った。
  32. 32. 左側のボタンが関数呼び出しテストサウンドテストがあると大まかなな音量バランス調整がしやすいUNITY WEBPLAYER版↓http://chahix.ddo.jp/~chahi/unity/20120806FGJ12/soundTest.html
  33. 33. public void PlayRetry()� {� � audioSourceStaff.clip = retry;� � audioSourceStaff.Play();� } 音が鳴りそうな部分は先�� public void PlayShoten() に空の関数でも良いので� {� � audioSourceShoten.clip = shoten;� � audioSourceShoten.Play(); 用意しておくと、� }� 後で音を付けるといった� public void PlayEat()� {� � audioSourceEat.clip = eat; ことも可能。� � audioSourceEat.Play();� }�
  34. 34. にんじんを投げる時に 「にんじーん」とかけ声が入る。連続して投げ入れても一音しか鳴らない。 音割れとかしなくて良い。
  35. 35. � public void TitleCall()� {� � audioSourceStaff.clip = titleCall;� � audioSourceStaff.Play();� }�� public void PlayStaff()� {� � audioSourceStaff.clip = staff; 途中からPlay〇〇に関数� � audioSourceStaff.Play();� ��� } 名を統一した。� public void PlayNinjin()� {� �� � audioSourceNinjin.clip = ninjin; ので、� � audioSourceNinjin.Play(); 最初に作った� } TitleCallだけ関数名が命名規則違う・・・
  36. 36. 余談 タケノコが伸びる音はシンセ音だけだったけど、途中で声も追加した。
  37. 37. � public void PlayTakenoko() 「タケノコ!」� {�� � � audioSourceTakenoko.clip = takenoko; audioSourceTakenoko.Play(); と言ってほしいと要望が� �� � audioSourceTakenokoSerif.clip = takenokoserif; あった為、� � audioSourceTakenokoSerif.Play();� } 波形追加。 一つの波形におさめてもよかったけど、 音量調整の為同時再生にしています。
  38. 38. ゴール時、馬がゴールに入ると 3秒間だけ「チクタク」時計が鳴る。その間にゴールした馬だけスコアに加算される。 加算されるので音程が上がる。 連続して入ると音がどんどん上がる。 【連続コンボヒット】の気持ちよさ。
  39. 39. public void PlayTickStart()� {� � if(audioSourceTick.isPlaying == false){� � � audioSourceTick.clip = tick;� � � audioSourceTick.loop = true;� � � audioSourceTick.Play();� 「チッ」というループと� � ��� � � � � audioSourceCountDown.clip = countDown; audioSourceCountDown.Play(); カウントダウン台詞� � }� } 「3,2,1」
  40. 40. チクタク音停止と停止時に ジェット音も鳴らした 「チッ」のループ音を � public void PlayTickStop()� {� � audioSourceTick.Stop();� 停止と同時に� �� � if(audioSourceJet.isPlaying == true){ 別の� � � audioSourceJet.Stop();�� � }� � 「ビューッ」と言う音� � if(audioSourceJet.isPlaying == false){� �� � � audioSourceJet.clip = jet; を鳴らす。� � � audioSourceJet.pitch = Random.Range(0.8f,1.2f);� � � audioSourceJet.Play();� � }�� } 少しランダムピッチを 加えた。
  41. 41. 「ピコン」音は【連続コンボヒット】音 � public void PlayPicon(Vector3 pos)� {� � if(audioSourcePicon[piconCount%maxPicon].isPlaying == true)� � {� � � piconCount++;� � } else {� � � piconCount = 0;� � }�� � audioSourcePicon[piconCount%maxPicon].pitch = Mathf.Pow(2,(piconCount/12.0F));� � audioSourcePicon[piconCount%maxPicon].clip = picon;� � audioSourcePicon[piconCount%maxPicon].Play();� � �� } 再生中に再生が来たら、音程を上げて行く。 再生中かはisPlayingで判定
  42. 42. � public void PlayPicon(Vector3 pos)� {� � if(audioSourcePicon[piconCount%maxPicon].isPlaying == true)� � {� � � piconCount++;� � } else {� � � piconCount = 0;� � }�� � audioSourcePicon[piconCount%maxPicon].pitch = Mathf.Pow(2,(piconCount/12.0F));� � audioSourcePicon[piconCount%maxPicon].clip = picon;� � audioSourcePicon[piconCount%maxPicon].Play();� � �� } 最初posも貰って3Dで鳴らしたらカメラから遠く て聞こえにくいのでやめた。 3Dサウンドはバランス調整が面倒になりがち。
  43. 43. BGMは常に鳴り続けている。もし鳴っていなかったら鳴るようにしていた。台詞が鳴る時はBGMが自動的にレベルを下げる ようにしていた。【ダッキング】
  44. 44. BGM<台詞 (ダッキング) � void Update () {�� � if(audioSourceBgm.isPlaying == false){ 【台詞を聞かせたい】の� � � audioSourceBgm.clip = bgm0;� � � audioSourceBgm.loop = true; で、� � � audioSourceBgm.Play();� � } 【台詞が再生中かどうか】� � �� � //� dacking を監視して� � if(audioSourceCountDown.isPlaying == true ||� � � audioSourceTakenoko.isPlaying == true || 再生中なら� � � audioSourceNinjin.isPlaying == true ||� � � audioSourceStaff.isPlaying == true 【BGM音量を下げ】� � � ){� � � audioSourceBgm.volume = 0.2f; ている。� � } else {� � � audioSourceBgm.volume = 1.0f;�� � }� �� }
  45. 45. BGMはもし停止していたら自動リトリガ � void Update () {�� � if(audioSourceBgm.isPlaying == false){� � � audioSourceBgm.clip = bgm0;� � � audioSourceBgm.loop = true;� � � audioSourceBgm.Play();� � }� � �� � //� dacking� � if(audioSourceCountDown.isPlaying == true ||� � � audioSourceTakenoko.isPlaying == true || デバッグ時などにBGM� � � audioSourceNinjin.isPlaying == true ||� � � audioSourceStaff.isPlaying == true が鳴らない時があった� � � ){� � � audioSourceBgm.volume = 0.2f; ので、ここでリトリガ� � } else {� � � audioSourceBgm.volume = 1.0f;�� � }� � している。� }
  46. 46. 【SoundManager】まとめ【サウンド登録】、【SoundSource作成】【再生イベント関数用意(カプセル化)】 【多重再生】【ピッチ半音あげ】、【ランダムピッチ】 【ダッキング効果】、【停止時再生音(再生時ループ音停止)】
  47. 47. 【ADX2】でやると・・・ Unity単体でやるよりも多くの【サウンド演出】が楽に実装できます。 【より高音質高圧縮な音声】 【制限のないループ再生】 【より多くのサウンド管理】
  48. 48. 【サウンド演出(イベント)をキュー】として【ゲームによくある基本演出はツール上で設定】 (プライオリティ、発音数管理) 【プログラム側は最小限】 (初期化、PACKロード、再生、停止) 【作業分担】【暗号化】が可能に 【インタラクティブミュージック】
  49. 49. と、いうことで、【サウンドワークショップ】の紹介です。
  50. 50. 【サウンドワークショップ事例】 2012-8-21 CEDEC2012で Unityで作ったアプリ 「ピンボールに音を付ける」というワークショップを行いました。
  51. 51. 『CRI ADX2』サウンドオーサリングツール 体験会 (初∼中級編)∼ゲーム開発の流れに沿ったサウンド制作の 新しいワークフロー∼ 2012-08-22 田中孝 51
  52. 52. はじめに 52
  53. 53. はじめに• ゲーム開発の流れに沿った サウンド制作の新しいワークフロー ? 52
  54. 54. はじめに• ゲーム開発の流れに沿った サウンド制作の新しいワークフロー ?• ちょっと変わったゲームの音作りの提案になるかも? 52
  55. 55. はじめに• ゲーム開発の流れに沿った サウンド制作の新しいワークフロー ?• ちょっと変わったゲームの音作りの提案になるかも?• ゲームジャムっぽい? 52
  56. 56. はじめに• ゲーム開発の流れに沿った サウンド制作の新しいワークフロー ?• ちょっと変わったゲームの音作りの提案になるかも?• ゲームジャムっぽい?• 音をつけるの楽しいよね? 52
  57. 57. 環境について 53
  58. 58. 環境について• 少ない手順でゲーム中の音を加工できる環境として 【CRI ADX2】の【CRI Atom Craft】を使います。 ※イベント版ADX2として特別なツールとランタイムを使用しています。 正式リリース版と混在しないよう注意してください。 53
  59. 59. 環境について• 少ない手順でゲーム中の音を加工できる環境として 【CRI ADX2】の【CRI Atom Craft】を使います。 ※イベント版ADX2として特別なツールとランタイムを使用しています。 正式リリース版と混在しないよう注意してください。 53
  60. 60. 環境について• 少ない手順でゲーム中の音を加工できる環境として 【CRI ADX2】の【CRI Atom Craft】を使います。 ※イベント版ADX2として特別なツールとランタイムを使用しています。 正式リリース版と混在しないよう注意してください。• ゲームは【Unity3D】で作成しています。 ※本ワークショップでは直接弄りませんが、UnityEditorのプロジェクトファ イルも添付していますので、 【C://CEDEC2012】フォルダごと持ち帰りソースを確認できます。 ※なお、Editor実行にはUnity Proライセンスが必要です。 こちらで呼び出し側のソースを確認できます。 53
  61. 61. 音の演出 【初∼中級編】 第1章 バンパーのリアクション音 • 第5章 ボールロスト時の声• 【実況?声の魅力】 ロスト状況音にリアクションセリフのランダム再生を追加 【音の登録と設定】 1Shot音の追加、発音数制限、 インゲームプレビュー • 第6章 BGMをつける 【情動を与える、無音を埋める】 ループ波形の登録• 第2章 ボールのリアクション音 【リアル?アンリアル?インタラクティブ音】 AISACによる衝撃度による変化を追加 • 第7章 声を目立たせる 【自動バランス調整の設定】 カテゴリによるバランス調整と、 REACTによるダッキング• 第3章 ターゲットの音 【上級編】 【印象的な音を目指して】 ランダムピッチ、ランダムフィルタ、デチューン音 • 第8章 BGMをインタラクティブ化 【気分はDJ】• 第4章 エフェクトをつける ボールロスト毎に変化するブロック再生 【全体をなじませる、塩こしょう少々】 リバーブ、エコーをかける 【おまけ】 完成イメージの確認、リリースアプリに反映 ※このワークショップでは『初∼中級編』までやります。 『上級編』は別の機会で・・・ 54
  62. 62. ゲームについて マウスクリックする と ボールの位置を クリックした位置に 移動ます。【Click to Start】ボタンでゲーム開始。 デバッグ時に有効で15秒くらい放置していても す。自動で開始します。 55
  63. 63. ゲームのポーズについて 【Stopper】を チェックすると ゲームオーバーにな なくなります。 【Pause/Resume】 ボタンでポーズでき ます。 【Multi Ball】おまけ です。 56
  64. 64. と、時間ないので• ワークショップの情報は• 詳しくはSlideShare で「ADX2 CEDEC」 で検索
  65. 65. デモ• 簡単に• ツール起動、Unityアプリ起動• インゲーム接続、ツール紹介
  66. 66. 最後に• CRI・ミドルウェアではお客様のニーズに合わせた解決策を 一緒に考えます。難しい案件でも 無料で相談にのります。お手伝いします。 お気軽にお問い合わせ下さい。• Facebook「サウンド助け合い所」「ADX2ユーザー助け合い所」 もよろしく• 「サウンドゲームジャム」企画中、興味ある方は twitter @tatmos へメッセージ下さい

×