うえすと開発メモ

uGUIでボタンの押しっぱなしを判定します。
以下のスクリプトをButtonオブジェクトに貼っつけて、
押下状態としてpressedを見るか、onLongPressにイベントを登録すると定期的に呼ばれます。


NGUI版はこちら→NGUIのボタン押しっぱなし判定

このエントリーをはてなブックマークに追加

GIFファイルをランタイムでデコードして
連続したテクスチャを出力するスクリプトアセットを作りました。
a10
アニメーション、透過、インターレース等のGIF87a、GIF89aフォーマットに対応しています。

WWWやStreamingAssetsから取ってきたGIFファイルを、  
以下のようにテクスチャリストとして取得できます。
 
int loopCount, width, height;
List<UniGif.GifTexture> gifTexList = UniGif.GetTextureList (www.bytes, out loopCount, out width, out height);
UniGif.GifTextureは1コマ分のTexture2dと次のテクスチャまでのディレイ時間を持っています。

詳しくはサンプルシーン(Assets/UniGif/Example/UniGifExample.unity)と  
サンプルコンポーネント(Assets/UniGif/Example/Script/UniGifTexture.cs)を参照。  

Unity4.3.4でPC(Mac, Win)、Android、iOSで確認していますが
多分他のバージョンやプラットフォームでも動きます。

Texture2D.SetPixelsでテクスチャを作成しているため、サイズの大きい画像だと展開にはそれなりの時間がかかります。


参考 
Unity Forum - animated gif is not working
https://forum.unity3d.com/threads/animated-gif-is-not-working.27873/

とほほのWWW入門 GIFフォーマットの詳細
https://www.tohoho-web.com/wwwgif.htm

時雨エノキオプト GIFデコーダサンプルプログラム解説 ver1.11
https://www.geocities.jp/warotarock/asen2ndgif001.html

このエントリーをはてなブックマークに追加

UnityでオーディオをAudioClipから事前に解析する場合についてのメモ。
ss_audio_01
オーディオのサンプルデータはAudioClip.GetData
引数に入れた配列にサイズ分だけ取ってこれる。
※オーディオファイルのインポート設定がDecompress on Loadになっていないと取得できず、値が0の配列になる。

全データが必要な場合はサンプル数*チャンネル数分の配列を用意する。
//
// クリップの全サンプルデータ取得
float[] allSamples = new float[clip.samples * clip.channels];
clip.GetData(allSamples, 0);
第2引数はとってくるデータ開始位置までのオフセット。
秒数でオフセットを指定したい場合は秒数*サンプルレート*チャンネル数になる。
解析する際に数秒分のデータをスキップしたい時にもこの式が使える。
//
// オフセット2秒
float offset = 2f * clip.frequency * clip.channels;
AudioClip.GetDataで取得したデータは2chの場合、
LRLRLR…の順で-1~0と0~1の範囲に収まっていて、無音だと0になる。

このデータをゴニョゴニョした後、再生中にデータとの同期を取りたい場合、
再生中のオーディオソースからAudioSource.timeSamplesで現在の再生サンプル時間を取得できるので、これを使う。

このtimeSamplesでクリップからAudioClip.GetDataで取得した配列を参照する場合は、
timeSamples*チャンネル数が当該インデックスになる。
//
// 今ここ
float sample = samples[audioSource.timeSamples * clip.channels];

このエントリーをはてなブックマークに追加

このページのトップヘ