各所に「Debug.Log」を入れて各種の値を逐一確認してみてください。
移動方向は「Move(transform.up * -1);」か衝突による跳ね返りが怪しそう、
消去は「Destroy(〜);」が不用意に呼ばれていないかチェックしてください。
参考:http://tsubakit1.hateblo.jp/entry/2015/12/02/212958
エネミーが下に行くはずが上に行ってしまいます
エネミー単体だと少し下に行った後消えてしまって
Waveを作ってEmitterに入れると上に飛んでいきます
unity
1public class Enemy : MonoBehaviour 2{ 3 // ヒットポイント 4 public int hp = 1; 5 6 // Spaceshipコンポーネント 7 Spaceship spaceship; 8 9 IEnumerator Start() 10 { 11 12 // Spaceshipコンポーネントを取得 13 spaceship = GetComponent<Spaceship>(); 14 15 // ローカル座標のY軸のマイナス方向に移動する 16 Move(transform.up * -1); 17 18 // canShotがfalseの場合、ここでコルーチンを終了させる 19 if (spaceship.canShot == false) 20 { 21 yield break; 22 } 23 24 while (true) 25 { 26 27 // 子要素を全て取得する 28 for (int i = 0; i < transform.childCount; i++) 29 { 30 31 Transform shotPosition = transform.GetChild(i); 32 33 // ShotPositionの位置/角度で弾を撃つ 34 spaceship.Shot(shotPosition); 35 } 36 37 // shotDelay秒待つ 38 yield return new WaitForSeconds(spaceship.shotDelay); 39 } 40 } 41 // 機体の移動 42 public void Move(Vector2 direction) 43 { 44 GetComponent<Rigidbody2D>().velocity = direction * spaceship.speed; 45 } 46 47 void OnTriggerEnter2D(Collider2D c) 48 { 49 // レイヤー名を取得 50 string layerName = LayerMask.LayerToName(c.gameObject.layer); 51 52 // レイヤー名がBullet (Player)以外の時は何も行わない 53 if (layerName != "Bullet (Player)") return; 54 55 // PlayerBulletのTransformを取得 56 Transform playerBulletTransform = c.transform.parent; 57 58 // Bulletコンポーネントを取得 59 Bullet bullet = playerBulletTransform.GetComponent<Bullet>(); 60 61 // ヒットポイントを減らす 62 hp = hp - bullet.power; 63 64 // 弾の削除 65 Destroy(c.gameObject); 66 67 // ヒットポイントが0以下であれば 68 if (hp <= 0) 69 { 70 // 爆発 71 spaceship.Explosion(); 72 73 // エネミーの削除 74 Destroy(gameObject); 75 } 76 } 77 78} 79 80 81 82public class Emitter : MonoBehaviour 83{ 84 // Waveプレハブを格納する 85 public GameObject[] waves; 86 87 // 現在のWave 88 private int currentWave; 89 90 // Managerコンポーネント 91 private Manager manager; 92 93 IEnumerator Start() 94 { 95 96 // Waveが存在しなければコルーチンを終了する 97 if (waves.Length == 0) 98 { 99 yield break; 100 } 101 102 // Managerコンポーネントをシーン内から探して取得する 103 manager = FindObjectOfType<Manager>(); 104 105 while (true) 106 { 107 108 // タイトル表示中は待機 109 while (manager.IsPlaying() == false) 110 { 111 yield return new WaitForEndOfFrame(); 112 } 113 114 // Waveを作成する 115 GameObject g = (GameObject)Instantiate(waves[currentWave], transform.position, Quaternion.identity); 116 117 // WaveをEmitterの子要素にする 118 g.transform.parent = transform; 119 120 // Waveの子要素のEnemyが全て削除されるまで待機する 121 while (g.transform.childCount != 0) 122 { 123 yield return new WaitForEndOfFrame(); 124 } 125 126 // Waveの削除 127 Destroy(g); 128 129 // 格納されているWaveを全て実行したらcurrentWaveを0にする(最初から -> ループ) 130 if (waves.Length <= ++currentWave) 131 { 132 currentWave = 0; 133 } 134 135 } 136 } 137}
あなたの回答
tips
プレビュー