[過去ログ]
【ゲームエンジン】Unity初心者質問スレBuild4 (1002レス)
【ゲームエンジン】Unity初心者質問スレBuild4 http://mevius.5ch.net/test/read.cgi/gamedev/1585478112/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
267: 名前は開発中のものです。 [sage] 2020/04/25(土) 13:09:23 ID:c8LTCDvQ https://youtu.be/clB_Q-4N2mM アニメーションクリップに効果音を付けて4種類のSEの中からランダムで音が出るようにしているのですが、 二回続けて同じ音が出ないようにする方法はないでしょうか。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ken_furu : MonoBehaviour { public AudioClip[] _SE; //SEが4個入っています。 private AudioSource audioSourse; Animator animator; void Start() { animator = GetComponent<Animator>(); audioSourse = GetComponent<AudioSource>(); } public void SE() { int a = Random.Range(0, 4); audioSourse.PlayOneShot(_SE[a]); } } このスクリプトを音を鳴らすアニメクリップが付いたオブジェクトにアタッチしています。 二回続けて同じ音が出ないようにする方法があったら教えてください。 https://thuploader.orz.hm/miniup/?mode=dl&id=7354 プロジェクトファイル http://mevius.5ch.net/test/read.cgi/gamedev/1585478112/267
269: 名前は開発中のものです。 [sage] 2020/04/25(土) 13:40:39 ID:2pXFtKle >>267 色んな方法があると思いますが、 再生する度に再生したSEを除外し、除外されていたSEが存在すれば戻すという処理を入れるのはどうですか? ランダムのレンジにはLengthやCountが使えますので実装自体は数行済むと思います。 配列をリストにした方が簡単だと思います。 http://mevius.5ch.net/test/read.cgi/gamedev/1585478112/269
270: 267 [sage] 2020/04/25(土) 14:39:00 ID:c8LTCDvQ >>268の方法は難しそうだったので >>269の方法で試してみました。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ken_furu : MonoBehaviour { //public AudioClip[] _SE;//配列 public List<AudioClip> _SE;//リスト型に変更 private AudioSource audioSourse; Animator animator; void Start() { animator = GetComponent<Animator>(); audioSourse = GetComponent<AudioSource>(); } public void SE() { int a = Random.Range(0, _SE.Count);//_SE.Count リストの中の要素の個数 audioSourse.PlayOneShot(_SE[a]); _SE.RemoveAt(a); //一度鳴ったSEを削除 } } SEの配列を、リスト型に変更して、一度なったSEを削除するところまでは出来たのですが 消したリストを次のSEを鳴らすときに元に戻すやり方が分かりませんでした。 どうすれば消したリストを元に戻すことができるでしょうか。 http://mevius.5ch.net/test/read.cgi/gamedev/1585478112/270
278: 267 [sage] 2020/04/25(土) 17:19:22 ID:c8LTCDvQ 皆さんから助言を頂いて有難うございました。 >>273の方のやり方で、ずっと試していました。先ほどエラーが全部消えてやっと動くようになりました。 using System.Collections; using System.Collections.Generic; using UnityEngine; public class ken_furu : MonoBehaviour { public List<AudioClip> _SE;//リスト型 4つのSE AudioClip DeleteClip; //選ばれて消えたSEを変数に入れる private AudioSource audioSourse; Animator animator; void Start() { animator = GetComponent<Animator>(); audioSourse = GetComponent<AudioSource>(); } public void SE() { int a = Random.Range(0, _SE.Count-1);//リストの最後の要素はランダムレンジから外す audioSourse.PlayOneShot(_SE[a]);//選ばれたSEを鳴らす AudioClip DeleteClip= _SE[a];//選ばれたSEをDeleteClipの変数に入れる _SE.RemoveAt(a); //選ばれて鳴ったSEを削除 _SE.Add(DeleteClip); //選ばれて消えたSEをリストの最後に追加 } } もしかしたら変な部分があるかもしれませんが、ちゃんと動いているようです。 本当に有難うございました。助かりました。 http://mevius.5ch.net/test/read.cgi/gamedev/1585478112/278
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.028s