序文
Unityチュートリアル「2Dシューティング」5日目。
昨日は親戚の子が東京に来ていたので付き合っていました。
その後、その子の忘れ物を豊洲ららぽーとまでとりにいかされていました。ちかれた…。
GitHub
進捗
- ゲーム制作編
- エネミーのHP、弾の攻撃力、アニメーションの追加
(学習時間:2時間)
コード実装部分
\2d-shooting-game\assets\scripts\enemy.cs
using System.Collections; using UnityEngine; public class Enemy : MonoBehaviour { // ヒットポイント public int hp = 1; // Spaceshipコンポーネント Spaceship spaceship; IEnumerator Start() { // Spaceshipコンポーネントを取得 spaceship = GetComponent<Spaceship>(); // ローカル座標のY軸のマイナス方向に移動する Move(transform.up * -1); // canShotがfalseの場合、コルーチンを終了させる if(spaceship.canShot == false) { yield break; } while (true) { // 子要素を全て取得する for(int i = 0; i < transform.childCount; i++) { Transform shotPosition = transform.GetChild(i); // ShotPositionの位置/角度で弾を撃つ spaceship.Shot(shotPosition); } // shotDelay秒待つ yield return new WaitForSeconds(spaceship.shotDelay); } } // 機体の移動 public void Move(Vector2 direction) { GetComponent<Rigidbody2D>().velocity = direction * spaceship.speed; } private void OnTriggerEnter2D(Collider2D c) { // レイヤー名を取得 string layerName = LayerMask.LayerToName(c.gameObject.layer); // レイヤー名がBullet(Player)以外の時は何も行わない if (layerName != "Bullet (Player)") return; // PlayerBulletのTransformを取得 Transform playerBulletTransform = c.transform.parent; // Bulletコンポーネントを取得 Bullet bullet = playerBulletTransform.GetComponent<Bullet>(); // ヒットポイントを減らす hp = hp - bullet.power; // 弾の削除 Destroy(c.gameObject); // ヒットポイントが0以下であれば if (hp <= 0) { // 爆発 spaceship.Explosion(); // エネミーの削除 Destroy(gameObject); } else { spaceship.GetAnimator().SetTrigger("Damage"); } } }
- その他実装部分
実行結果
感想
今日は敵のHP設定と、プレイヤーに無敵時間の設定、エネミーのダメージ時のアニメーション設定など。
enemy.csのソースコードに一部誤植があった気がする。
ここらへん
// Bulletコンポーネントを取得
Bullet bullet = playerBulletTransform.GetComponent<Bullet>();
だんだん内容が高度になってきて、正直ついていくだけで精一杯。
特にアニメーション関連の部分は正しく動かすことだけで精一杯で、まったく理解できている気がしない。
AnimationウィンドウやらAnimatorウィンドウの操作方法はさっぱりわからない。
ここらへんは初心者向けの参考書でも割とスルーされてる気がするので、がっつり勉強しなきゃなと思っている。
なんかいい参考書ないですかね。
カロリーメイトください。
BGM
TOKYO!!! / Bakyun the everyday