###前提・実現したいこと
大学生です。
Unityで遺伝的アルゴリズムを利用して2Dタワーディフェンスゲームを作ろうとしているのですが、C#に触れるのが初めてなもので、理論は理解していてもどうスクリプトを組めばいいのかわからず、スクリプト例を見ててわからなかった用語(IEnumerable、yield、paramなど)をネットなどで調べても専門用語ばかりで理解ができず、難航しています。
実装したい機能の流れとしては、
・プレハブでオブジェクトを10個作成し、一定間隔で右折もしくは左折させて移動させるために0なら右折、1なら左折というように0と1の配列を作成して読み込ませる
・世代終了時に最もx座標値が大きかった2個体を選択
・一点交叉をして次世代の10個体の配列を作成する
・作成した配列をもう一度新しくプレハブで作成したオブジェクトに適用する
・x座標値が一定の値を超えたら終了
というものを想定しています。
現時点で実現したいもののできていないことは大体以下の通りです。
・プレハブで作成したオブジェクト"Runba"に番号を振りたい
・各Runbaが保持する配列を別のスクリプトに渡したい。
・配列のメソッドの呼び出し方がわからない。
他にもまだまだ課題はありますが、まず解決しなければならないのはこのあたりだと思います。
ソースコードは書きかけゆえ不完全で煩雑なものですし、上記の文章もわかりづらい表現になってしまっていることは承知の上ですが、私一人の力ではもうどうすることもできません。どうかよろしくお願いします。
追記
RunbaGenerator.csの「obj.name = Runba.name」を「obj.name = "Runba" + i」と書き換えてみたら一つ目の問題は解決しました。
###発生している問題・エラーメッセージ
エラーメッセージ Assets/Runbamove.cs(25,13):error CS0103:The name 'Gene' dose not exist in the current context これを解消するために何を追加で記入するべきかがわかりません
###該当のソースコード
C#
1 2//RunbaGenerator.csの内容 3using System.Collections; 4using System.Collections.Generic; 5using UnityEngine; 6 7public class RunbaGenerator : MonoBehaviour { 8 9 public GameObject Runba; 10 float span = 10.0f; 11 float timer = 0; 12 13 // Use this for initialization 14 void Start () { 15 } 16 17 //初期遺伝子の作成 18 public int[] OriginGene () { 19 int[] Gene = new int [10]; 20 for(int i = 0; i < 10 ; i++){ 21 Gene [i] = Random.Range(0,2); 22 } 23 return Gene; 24 } 25 26 // Update is called once per frame 27 void Update () { 28 timer -= Time.deltaTime;//時間の取得 29 if (timer < 0) { 30 for (int i = 1; i < 11; i++) { 31 GameObject obj = Instantiate (Runba, new Vector3 (50, 1, i * 90), Quaternion.identity) as GameObject;//生成 32 obj.name = Runba.name;//生成されたオブジェクトの名前をRunbaに変更 33 } 34 timer = span;//タイマーをリセット 35 } 36 } 37} 38 39//Runbamove.csの内容 40using System.Collections; 41using System.Collections.Generic; 42using UnityEngine; 43 44public class Runbamove : MonoBehaviour { 45 46 // Use this for initialization 47 48 float interval = 1.0f; 49 float timer = 0; 50 51 void Start () { 52 Invoke ("DestroyObject", 10f); 53 GetComponent<RunbaGenerator>().OriginGene(); 54 //Gene[] = 55 } 56 57 // Update is called once per frame 58 void Update () { 59 timer -= Time.deltaTime;//時間の取得 60 for(int i = 0; i < 10 ; i++){ 61 if (timer < 0) { 62 int a = Gene [i];//曲がる方向を配列で決定 63 if (a == 1) { 64 a = -30; 65 } else { 66 a = 30; 67 } 68 Vector3 w = new Vector3 (0f, a, 0f);//回転 69 transform.Rotate (w); 70 timer = interval; 71 } 72 } 73 Vector3 v = new Vector3 (0.5f, 0f, 0f);//移動 74 transform.Translate (v); 75 76 /*bool f0 = Input.GetMouseButton (0);//クリック時の反応 77 if (f0) { 78 Vector3 V0 = Input.mousePosition; 79 V0.z += 3f; 80 Ray ray = Camera.main.ScreenPointToRay (V0); 81 RaycastHit hit; 82 bool f = Physics.Raycast (ray, out hit, 1000); 83 if (f) { 84 if (hit.collider.gameObject.name == "Runba") { 85 gameObject.SetActive(false);//クリックされた場合ルンバを非表示 86 } 87 }//現行での問題点:クリックするとクリックしたものより左側のルンバも全部消える 88 }*/ 89 } 90 91 //今世代のGene[]を10個取得してGeneAlgorithm.csに渡すためのメソッド 92 public int[] Genetic(){ 93 94 } 95 96 void DestroyObject(){ 97 Destroy (gameObject); 98 99 } 100}
###試したこと
課題に対してアプローチしたことを記載してください
###補足情報(言語/FW/ツール等のバージョンなど)
Unityのバージョンは最新です
回答1件
あなたの回答
tips
プレビュー