[過去ログ] 【ゲームエンジン】Unity初心者質問スレBuild4 (1002レス)
前次1-
抽出解除 必死チェッカー(本家) (べ) 自ID レス栞 あぼーん

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
267
(3): 2020/04/25(土)13:09 ID:c8LTCDvQ(1/3) AAS
動画リンク[YouTube]

アニメーションクリップに効果音を付けて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]);
}

}

このスクリプトを音を鳴らすアニメクリップが付いたオブジェクトにアタッチしています。
二回続けて同じ音が出ないようにする方法があったら教えてください。
外部リンク:thuploader.orz.hm プロジェクトファイル
270
(1): 267 2020/04/25(土)14:39 ID:c8LTCDvQ(2/3) AAS
>>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を鳴らすときに元に戻すやり方が分かりませんでした。
どうすれば消したリストを元に戻すことができるでしょうか。
278: 267 2020/04/25(土)17:19 ID:c8LTCDvQ(3/3) AAS
皆さんから助言を頂いて有難うございました。
>>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をリストの最後に追加
}
}
もしかしたら変な部分があるかもしれませんが、ちゃんと動いているようです。
本当に有難うございました。助かりました。
前次1-
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ

ぬこの手 ぬこTOP 0.039s