前提・実現したいこと
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'という名前は存在しません
列挙型を用いて実装したいと思っております。
その他に何か必要な情報などありましたら、提示いたします。
ご教授いただければ幸いです。よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/06/08 07:27