Unity x ADX2LE Webプレーヤ時はUnity標準で再生する

「Unity x ADX2LE Webプレーヤ時はUnity標準で再生する」の編集履歴(バックアップ)一覧に戻る

Unity x ADX2LE Webプレーヤ時はUnity標準で再生する - (2013/10/19 (土) 13:40:53) の編集履歴(バックアップ)


Unity x ADX2LE Webプレーヤ時はUnity標準で再生する構想 2013-08-03更新

Unity x ADX2LE Webプレーヤ時はUnity標準で再生する構想

思いつきのきっかけ


  • ADX2LE使うとWEBプレーヤで公開しても音でないのは寂しい
  • ADX2LE導入前にとりあえず自動変換パッチみたいのあると便利じゃね?
  • 完全互換とまではいかないまでも、単純再生くらいはできて良いのでは?
  • Unity標準との動作の違いが感じられるんじゃね?(リソースの管理方法による発音の変化など)

いくつか制限する


  • キュー名と波形名は同じ(拡張子除く)
  • AudioClipは特定のAssetsフォルダに入れておく。AtomCraftRoot/とか
  • Assetsのフォルダ階層→キューシートフォルダ名やキューシート名に
  • AudioClipの3D,2Dはインスペクタ上で指定しておく。

互換保証できそうなレベルについて


  • 単純1Shot音ならいける?
  • Loop音は怪しい
  • ブロック、AISACも無理

ほとんど単純再生だよね?


  • WEBプレーヤ時は、単純キュー再生と同じように再生する。
  • AtomSource→AudioSourceに置き換わる。
  • Volume,Pitchくらいは反映する。

ToDO

  • Editor拡張で(ADX2LE,Unity標準)相互ラッパー for WEBプレーヤ用
  • Editor拡張でADX2LEへマテリアル追加(ある程度Unity側でデータ構築し、ビルドのみADX2LEに頼る形)
  • package化して、ADX2LE Pluginインポート後に、入れるような形で公開

サンプル1 MyAudioSource

using UnityEngine;
using System.Collections;
#if UNITY_WEBPLAYER
public class MyAudioSource : MonoBehaviour
{	
	AudioSource _source = null;
	public AudioSource source {
		get
		{
			if(_source == null){
				_source = gameObject.AddComponent<AudioSource>();
			}
			return _source;
		}
	}	
#else	
public class MyAudioSource : CriAtomSource
{	
	public CriAtomSource source { 
		get
		{
			return this;
		}
	}
#endif		

	public MyAudioSource()
	{
		this.name = "MyAudioSource";
		#if UNITY_WEBPLAYER
		source.rolloffMode = AudioRolloffMode.Linear;	
		#else	
		#endif	
	}
}
MyAudioSource.cs
使い方
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class SoundManager : MonoBehaviour {
	MyAudioSource bgm;
	void AudioSetup()
	{
		if(bgm == null)bgm = gameObject.AddComponent<MyAudioSource>();
	}
	void PlayOpening()
	{
	if(bgm == null)AudioSetup();
#if UNITY_WEBPLAYER
		bgm.source.clip = GetAudioClipOrLoad("AudioForWeb/Materials/BGM/opening");
		bgm.source.loop = false;
#else
		bgm.source.cueName = "opening";
#endif
		bgm.source.Play();
	}
Dictionary<string,AudioClip> audioClipList = new Dictionary<string, AudioClip>();	
AudioClip GetAudioClipOrLoad(string path)
{
	if(audioClipList.ContainsKey(path)){
		return 	audioClipList[path];
	} else
	{
		audioClipList.Add(path,Resources.Load(path, typeof(AudioClip)) as AudioClip);	
	}
	return 	audioClipList[path];
}
}

ご意見はこちら

名前:
コメント: