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

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

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

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

列挙型

データ型の一種で、要素・メンバなど名前のある値や、型の列挙子によって構成されます。

Unity

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

2741閲覧

Unityにて、列挙型からランダムに値を取り出してオブジェクトの色を変えたい

SK6

総合スコア1

C#

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

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

列挙型

データ型の一種で、要素・メンバなど名前のある値や、型の列挙子によって構成されます。

Unity

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2021/05/17 08:05

前提・実現したいこと

Unity3Dにて一定時間ごとに落ちてくるボールを3つ以上選択したら消えるというようなゲームを作成しています。ツムツムのようなゲームです。

実現したいことは、列挙型を用いて生成されるボールの色をランダムで変えることです。
処理の流れとしては以下を想定しております。
①GameResources.cs内で色情報を列挙
②BallGenerator.csでボールオブジェクトを生成し、列挙体のcolorパラメータに値を乱数で設定
③BallObject.cs内のChangeColor()で実際に色が変わる

BallGenerator.cs内にて「列挙型を配列にした後、配列からランダムに1つ取得」という処理を1行で行っていて、そこでエラーが発生しており、原因がわからない状態です。

Unity 2020.1.14f1 (64-bit)使用

######ソースコード

GameResources.cs

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class GameResources 6{ 7 public enum BallColor 8 { 9 red, 10 blue, 11 green, 12 purple, 13 } 14}

BallGenerator.cs(エラーに該当するコード)

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.Linq; 5 6public class BallGenerator : MonoBehaviour 7{ 8 [SerializeField] 9 GameObject ball; 10 11 int cnt = 0; 12 const int MAXCNT = 360; 13 14 void Start() 15 { 16 } 17 18 void Update() 19 { 20 //一定フレーム数ごとに処理を行う。 21 //-60~60度でランダムにボールを落とす。 22 cnt++; 23 cnt %= MAXCNT; 24 if (cnt == 0) 25 { 26 GameObject gameObject = Instantiate(ball); 27 gameObject.transform.parent = this.transform; 28 gameObject.transform.localPosition = Vector3.zero; 29 gameObject.GetComponent<Rigidbody>().AddForce(Quaternion.Euler(0, 0, Random.Range(-60.0f, 60.0f)) * Vector3.down, ForceMode.Impulse); 30 31 //エラーの表示されるコード(色をランダムに取得) 32 gameObject.GetComponent<BallObject>().color = Enum.GetValues(typeof(GameResources.BallColor)).Cast<GameResources.BallColor>().ToList()[Random.Range(0, 4)]; 33 } 34 } 35}

BallObject.cs

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class BallObject : MonoBehaviour 6{ 7 [SerializeField] 8 public bool isTouch = false; 9 10 [SerializeField] 11 public GameResources.BallColor color; 12 13 void Start() 14 { 15 ChangeColor(); 16 } 17 18 void Update() 19 { 20     //選択されたときボールを発光させる 21 if (isTouch) 22 { 23 GetComponent<Renderer>().material.SetColor("_EmissionColor", new Color(0.5f, 0.5f, 0f)); 24 } 25 else 26 { 27 GetComponent<Renderer>().material.SetColor("_EmissionColor", new Color(0f, 0f, 0f)); 28 } 29 } 30 31 //生成時に色を変える 32 public void ChangeColor() 33 { 34 switch (color) 35 { 36 case GameResources.BallColor.red: 37 GetComponent<Renderer>().material.SetColor("_Color", Color.red); 38 break; 39 case GameResources.BallColor.blue: 40 GetComponent<Renderer>().material.SetColor("_Color", Color.blue); 41 break; 42 case GameResources.BallColor.green: 43 GetComponent<Renderer>().material.SetColor("_Color", Color.green); 44 break; 45 case GameResources.BallColor.purple: 46 GetComponent<Renderer>().material.SetColor("_Color", new Color(1, 0, 1)); 47 break; 48 } 49 } 50} 51

エラーメッセージ

現在のコンテキストに'Enum'という名前は存在しません

列挙型を用いて実装したいと思っております。
その他に何か必要な情報などありましたら、提示いたします。

ご教授いただければ幸いです。よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Enum.GetValuesusing System;でSystemの名前空間の利用が必要となります。
それに伴い、Random.RangeSystem.Random.RangeなのかUnityEngine.Random.Rangeなのかわからないって言われると思うので、UnityEngine.Random.Rangeを明示します。

BallGenerator.cs

cs

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using System.Linq; 5using System; 6 7public class BallGenerator : MonoBehaviour { 8 [SerializeField] 9 GameObject ball; 10 11 int cnt = 0; 12 const int MAXCNT = 360; 13 14 void Start() { 15 } 16 17 void Update() { 18 //一定フレーム数ごとに処理を行う。 19 //-60~60度でランダムにボールを落とす。 20 cnt++; 21 cnt %= MAXCNT; 22 if (cnt == 0) { 23 GameObject gameObject = Instantiate(ball); 24 gameObject.transform.parent = this.transform; 25 gameObject.transform.localPosition = Vector3.zero; 26 gameObject.GetComponent<Rigidbody>().AddForce(Quaternion.Euler(0, 0, UnityEngine.Random.Range(-60.0f, 60.0f)) * Vector3.down, ForceMode.Impulse); 27 28 //エラーの表示されるコード(色をランダムに取得) 29 gameObject.GetComponent<BallObject>().color = Enum.GetValues(typeof(GameResources.BallColor)).Cast<GameResources.BallColor>().ToList()[UnityEngine.Random.Range(0, 4)]; 30 } 31 } 32}

投稿2021/05/17 08:19

hogefugapiyo

総合スコア3302

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

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

SK6

2021/06/08 07:27

返信が遅くなってしまい申し訳ありません。 名前空間への理解がまだ浅いなと勉強になりました。 とても分かりやすく教えていただきありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問