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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Unity

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

Q&A

0回答

684閲覧

敵が消えたり上に行ったりする

退会済みユーザー

退会済みユーザー

総合スコア0

Unity

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

0グッド

0クリップ

投稿2019/11/28 07:58

エネミーが下に行くはずが上に行ってしまいます
エネミー単体だと少し下に行った後消えてしまって
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}

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

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

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

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

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

sakura_hana

2019/11/29 01:06

各所に「Debug.Log」を入れて各種の値を逐一確認してみてください。 移動方向は「Move(transform.up * -1);」か衝突による跳ね返りが怪しそう、 消去は「Destroy(〜);」が不用意に呼ばれていないかチェックしてください。 参考:http://tsubakit1.hateblo.jp/entry/2015/12/02/212958
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問