###前提・実現したいこと
現在、アクションゲームを作成中です。マリオで言うところのパックンフラワーの様な敵キャラクター(以下、パックン)を作成しようと思いっています。prefabにした弾をInstantiateで複製して出現させ、後は弾自身で飛んでいくというものを作りたいです。
パックンの子階層にCircle Collider(Triggerモード)で索敵範囲を作り、ここに触れるとパックンがランダムで弾を0~3個生成します。
###発生している問題・エラーメッセージ
Instantiateで複製した物が表示されない。 このときに、生成までは上手くいっているようなのですが、描画されません。 現在、弾にスクリプトは付けていませんが、Sprite Renderer,Rigitbody2D,Capsule Colider2Dを付けました。SpriteRendererに画像を入れたくらいで、他の設定はどれもいじっていません。
###該当のソースコード
C#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class houdai : MonoBehaviour { 6 public static bool In; //索敵範囲内かどうか(子階層で判断するので、staticにしてあります) 7 bool bp1 = false, bp2 = false, bp3 = false, utu = true; //弾が何個でたか、また初弾は撃ったか 8 int spd; //弾の移動速度 9 Vector3 position; //パックンの位置 10 public GameObject danmaku; //複製したい弾 11 static Vector2 p1; //移動位置その1 12 static Vector2 p2; //移動位置その2 13 static Vector2 p3; //移動位置その3 14 GameObject a, b, c; //f複製した弾のスペース 15 // Use this for initialization 16 void Start () { 17 spd = 1; 18 position = transform.position; 19 p1 = new Vector2(position.x, position.y + 1f); 20 p2 = new Vector2(position.x - 0.7f, position.y + 0.65f); 21 p3 = new Vector2(position.x + 0.7f, position.y + 0.65f); 22 } 23 24 // Update is called once per frame 25 void Update () { 26 //playerが索敵範囲内に入ってきてから、まだ1発も撃ってないときHassyaをよぶ 27 if(In&&utu) 28 { 29 StartCoroutine(Hassya()); 30 } 31 //弾が生成されたかどうか調べて、生成されていたら、それぞれ移動させる。 32 if (a !=null&&bp1) 33 { 34 a.transform.Translate(p1 * spd * Time.deltaTime); 35 StartCoroutine(Stop());//止めるための関数 36 } 37 if (a != null && b != null && bp2) 38 { 39 a.transform.Translate(p2 * spd * Time.deltaTime); 40 b.transform.Translate(p3 * spd * Time.deltaTime); 41 StartCoroutine(Stop()); 42 } 43 if (a != null && b != null && c != null && bp3) 44 { 45 a.transform.Translate(p1 * spd * Time.deltaTime); 46 c.transform.Translate(p2 * spd * Time.deltaTime); 47 b.transform.Translate(p3 * spd * Time.deltaTime); 48 StartCoroutine(Stop()); 49 } 50 } 51 IEnumerator Hassya() 52 { //これから初段を打つのでutuをfalseにする。 53 if (utu) 54 { 55 utu = false; 56 } 57 //移動に1秒かかるので1秒たったらGOサインを出す。(Go関数は弾に付けるスクリプトに記述:弾自体にスクリプトはまだ付けてない) 58 if (Random.Range(0, 10) >=5)//1発 59 { 60 61 spd = 1; 62 a=Instantiate(danmaku,position,Quaternion.Euler(0,0,0)); 63 a.transform.LookAt(p1); 64 bp1 = true; 65 yield return new WaitForSeconds(1f); 66 a.SendMessage("Go"); 67 yield return new WaitForSeconds(5f); 68 Hassya(); 69 } 70 else if(Random.Range(0, 10) >= 3)//2発 71 { 72 spd = 1; 73 a= Instantiate(danmaku, position, Quaternion.Euler(0, 0, 0)); 74 b= Instantiate(danmaku, position, Quaternion.Euler(0, 0, 0)); 75 a.transform.LookAt(p2); 76 b.transform.LookAt(p3); 77 bp2 = true; 78 yield return new WaitForSeconds(1f); 79 a.SendMessage("Go"); 80 b.SendMessage("Go"); 81 yield return new WaitForSeconds(5f); 82 Hassya(); 83 84 } 85 else if(Random.Range(0, 10) >= 2)//3発 86 { 87 88 spd = 1; 89 a = Instantiate(danmaku, position, Quaternion.Euler(0, 0, 0)); 90 b=Instantiate(danmaku,position, Quaternion.Euler(0, 0, 0)); 91 c=Instantiate(danmaku,position, Quaternion.Euler(0, 0, 0)); 92 a.transform.LookAt(p1); 93 c.transform.LookAt(p2); 94 b.transform.LookAt(p3); 95 bp3 = true; 96 yield return new WaitForSeconds(1f); 97 a.SendMessage("Go"); 98 b.SendMessage("Go"); 99 c.SendMessage("Go"); 100 yield return new WaitForSeconds(5f); 101 Hassya(); 102 } 103 else//0発 104 { 105 yield return new WaitForSeconds(3f); 106 Hassya(); 107 } 108 109 } 110 IEnumerator Stop() 111 { 112 yield return new WaitForSeconds(1f);//移動に1秒かかるので、1秒待つ 113 spd = 0;//止める 114 //撃ったかどうかをfalseにする。 115 bp1 = false; 116 bp2 = false; 117 bp3 = false; 118 } 119 120}
###試したこと
他のサイトなどで調べた結果、非アクティブにした物を、精製時にアクティブにすると上手くいくと書いてあったのですが、試した結果ダメでした。
###補足情報(言語/FW/ツール等のバージョンなど)
言語:C#
ツール:Unity5 (プロじゃない方)
Windows10
そのほかに、何か無駄な記述があったり、こういう記述の方が処理が軽くなるなどございましたら、教えていただけるとありがたいです。
どうかお願いします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。