質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

0回答

935閲覧

ランダム再生をすべて記録したい

miyuka

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2020/11/05 05:37

前提・実現したいこと

unityで3種類の音をランダムに再生するプログラムを作っています。再生されたものをすべて順番に記録したいのですがconsoleに再生された回数しか表示されずに困っています。どのように書き換えたらいいでしょうか?

該当のソースコード

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class RandomAudioPlayer : MonoBehaviour
{
private GameObject[] audioObjects;
void Start()
{
audioObjects = GameObject.FindGameObjectsWithTag("AudioObject");
}
void FixedUpdate()
{

var audioObject = audioObjects[Random.Range(0, audioObjects.Length)]; }

}

audioObject.GetComponent<AudioSource>().Play(); var audioSourceId = audioObject.GetComponent<AudioSourceID>().audioSourceID; Debug.Log(audioSourceId);

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sakura_hana

2020/11/06 00:24

「Random.Range(0, audioObjects.Length)」 この部分が配列の何番目かを示す数字なので、何らかの方法で保存すればいいです。 ただ現在のコードだと無駄が多い(FixedUpdateでやる必要性が見えない)、コードとして正しくない、「consoleに再生された回数しか表示されない」ということは無い(表示されているのは回数ではなくaudioSourceID)など混乱を来たすのでコードを全部見直してください。
Zuishin

2020/11/07 05:42

乱数は同じシードを与えると同じ値を発生させるので、シードだけ保存するという手もあります。
miyuka

2020/11/09 04:00

質問の仕方が未熟ですみません。 コンソール部分に再生されたaudiosorceIDとそのIDの再生回数が出力されますが、回数ではなく10回繰り返したらどのIDがどんな順番で出てきたのかすべて記録したいです。どうしたらいいですか?
Zuishin

2020/11/09 04:08

シードだけ記録すればすべて記録したのと同じです。
miyuka

2020/11/09 04:12

シードをコンソールに表示するにはどうしたらいいですか?
Zuishin

2020/11/09 04:21

何がどこまでできて、どの程度の言葉から通じるんでしょうか? 少なくともシードはわかるということでいいですか?
miyuka

2020/11/09 04:34

ほぼ初心者です。シードというのは乱数の元になる値のことですよね?
Zuishin

2020/11/09 04:37

そうです。int 型の数値です。コンソールに int 型の数値を表示するにはどうしますか?
miyuka

2020/11/09 04:53

Debug.Log(表示したい数値や変数); を使っています。
Zuishin

2020/11/09 05:03

DateTime.Now で現在の時刻を DateTime 型で取得できます。 取得した DateTime 型は Ticks プロパティで long 型の数値に変換できます。 long 型の数値は int 型にキャストできます。 それをシードにし、その値を記録すれば、次回はその値をシードにすることで同じ乱数を生成できます。
miyuka

2020/11/09 06:35

同じ乱数というのはどういうことですか?同じ関数ということですか?
Zuishin

2020/11/09 06:48

同じ関数ではなく同じ乱数です。 乱数は本当の乱数ではなく、計算によってランダムに見える数値を出力しているだけです。 なので同じシードからは同じ乱数が発生します。 仮にシード 1000 で 4 回乱数を発生させたとき、3 6 2 1 という値が得られたとすると、次に同じ 1000 を与えた時に発生するのも同じ 3 6 2 1 になります。
miyuka

2020/11/09 06:58

同じ乱数はほしくないです。3種類の音123を記録するときに、3321と4回再生されたら3321と出力したいです。無理なのでしょうか?
Zuishin

2020/11/09 07:15 編集

乱数によって 3 3 2 1 と再生されたなら、同じシードを使えば次も 3 3 2 1 と出力されます。
sakura_hana

2020/11/10 00:10

「記録する」とはどのレベルですか? 変数に入れておくだけか、いわゆるセーブをしたいのか、別ファイルに保存したいのか等。 「unity セーブ」でも検索してみてください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問