ユニティーを使用した2Dシューティングの作り方のメモです。ゲーム制作の参考にしていただければ嬉しいです。トグルボタンをクリックすると記事が表示されます。小さくて見ずらい画像はクリックで拡大できます。
使用するUnityAssetStoreのアセット
こちらのアセットを使用して作成しました。
プレイヤーを配置する
インストールしたアセットからプレイヤーの画像を配置しました。
名前はPlayerにしました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-05_165517-1024x486.png)
PlayerにCapsulecolider2Dを追加して、サイズを調整しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-05_174030.png)
Playerの子オブジェクトに空のオブジェクトを作成しました。
名前はBulletPositionにしました。
ここから弾を発射させるのでplayerの先端に配置しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-05_174632.png)
プレイヤーを移動させる
新しくC#スクリプトを作成します。名前はPlayerManagerにしました。
作成したスクリプトをPlayerにアタッチしました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-05_172218.png)
using UnityEngine;
public class PlayerManager : MonoBehaviour
{
//プレイヤーの移動速度
private int moveSpeed = 10;
void Update()
{
Move();
}
//プレイヤーを移動させる
private void Move()
{
//キーの入力値を取得
float x = Input.GetAxis("Horizontal") * moveSpeed;
float y = Input.GetAxis("Vertical") * moveSpeed;
//取得した入力値を反映させる
transform.position += new Vector3(x, y, 0) * Time.deltaTime;
}
}
これでキーボードの上下左右でプレイヤーを移動させるようにできました。
弾の作成
Player Bullet 1をヒエラルキーウィンドウにドラッグ&ドロップしました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-05_173202-1024x533.png)
Player BulletにCircleColider2Dを追加して、コライダーの大きさを調整しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-05_173309.png)
Player Bulletにrigidbody2Dを追加しました。GravityScaleを0に変更しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-05_173435.png)
弾を動かす
新しく弾のC#スクリプトを作成します。名前はBulletにしました。
弾を前方向に動かす処理をします。
using UnityEngine;
public class Bullet : MonoBehaviour
{
private int bulletSpeed = 10;
// Update is called once per frame
void Update()
{
Move();
Delete();
}
private void Move()
{
transform.position += new Vector3(0, bulletSpeed, 0) * Time.deltaTime;
}
//画面外に出たら消す
private void Delete()
{
if (this.transform.position.y > 6)
{
Destroy(this.gameObject);
}
}
}
作成したスクリプトをPlayer Bulletにアタッチします。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-05_180137.png)
弾が前方向に飛んでいくようになりました。
弾を発射させる
PlayerManagerを開いてコードを追加しました。
public GameObject bulletPrefab;
public GameObject bulletPosition;
void Update()
{
Shot();
}
private void Shot()
{
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(bulletPrefab, bulletPosition.transform.position, transform.rotation);
}
}
Player Bulletをprefabにしました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-05_180318.png)
playerのinspector画面からBulletPositionとbulletprefabを設定しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-06_173143.png)
スペースキーで弾が発射できるようになりました。
敵の作成
アセットのSpriteからEnemy Bを選択して配置しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-06_175104-1024x596.png)
Enemy Bにboxcorider2Dを追加しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-06_175216.png)
敵のスクリプト
新しくC#スクリプトを作成しました。
名前はEnemyManagerにしました。
作成したスクリプトをEnemyにアタッチしました。
using UnityEngine;
public class EnemyManager : MonoBehaviour
{
private int moveSpeed = 5;
void Update()
{
Move();
Delete();
}
//下に移動させる
private void Move()
{
transform.position += new Vector3(0, -moveSpeed, 0) * Time.deltaTime;
}
//画面外に出たら消す
private void Delete()
{
if (this.transform.position.y < -6)
{
Destroy(this.gameObject);
}
}
}
Enemyが下に移動するようになりました。
Enemyの弾の作成
Enemyの子オブジェクトに空のオブジェクトを作成しました。
名前はEnemyBulletPositionにしました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-06_181159.png)
EnemyBulletPositionの位置をEnemyの先端に配置しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-06_181032.png)
弾のspriteからEnemy Bullet 3を選んで配置しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-06_181326.png)
敵の弾のスクリプト
新しくC#スクリプトを作成しました。
名前はEnemyBulletにしました。
作成したスクリプトをEnemyにアタッチしました。
using UnityEngine;
public class EnemyBullet : MonoBehaviour
{
private int bulletSpeed = 8;
void Update()
{
Move();
Delete();
}
private void Move()
{
transform.position += new Vector3(0, -bulletSpeed, 0) * Time.deltaTime;
}
//画面外に出たら消す
private void Delete()
{
if (this.transform.position.y < -6)
{
Destroy(this.gameObject);
}
}
}
敵に弾を発射させる
EnemyBulletをprefabにしました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-06_182806.png)
EnemyManagerにコードを追加して、Enemy生成時に弾を発射させるようにしました。
public GameObject EnemybulletPrefab;
public GameObject EnemybulletPosition;
//Enemyが生成された時に弾を発射させる
private void Start()
{
Shot();
}
private void Shot()
{
Instantiate(EnemybulletPrefab, EnemybulletPosition.transform.position, transform.rotation);
}
Enemyのinspector画面からEnemybulletPrefabとEnemybulletPositionを設定しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-06_183821.png)
敵が弾を発射するようになりました。
弾が当たったら破壊する
BulletとEnemyBulletにコードを追加します。
//bulletがPlayer以外にぶつかったら消滅
private void OnCollisionEnter2D(Collision2D collision)
{
if (!collision.gameObject.CompareTag("Player"))
{
Destroy(this.gameObject);
Destroy(collision.gameObject);
}
}
//bulletがEnemy以外にぶつかったら消滅
private void OnCollisionEnter2D(Collision2D collision)
{
if (!collision.gameObject.CompareTag("Enemy"))
{
Destroy(this.gameObject);
Destroy(collision.gameObject);
}
}
弾が当たると消滅するようになりました。
プレイヤーが敵に当たったら消滅させる
EnemyManagerを開いてコードを追加しました。
//EnemyがPlayerにぶつかったら消滅
private void OnCollisionEnter2D(Collision2D collision)
{
if (collision.gameObject.CompareTag("Player"))
{
Destroy(this.gameObject);
Destroy(collision.gameObject);
}
}
敵を生成する
Enemyをprefabにしました。
新しくC#スクリプトを作成しました。名前はEnemySpawnにしました。
空のオブジェクトを作成してEnemySpawnをアタッチしました。
using UnityEngine;
public class EnemySpawn : MonoBehaviour
{
public GameObject EnemyPrefab;
void Start()
{
//一秒間隔で実行する
InvokeRepeating("Spawn", 1f, 1f);
}
//Enemyを生成する。
private void Spawn()
{
//X軸をランダムにして生成する。
Vector2 randomPos = new Vector2(Random.Range(-8f, 8f), transform.position.y + 6f);
Instantiate(EnemyPrefab, randomPos, transform.rotation);
}
}
inspector画面からEnemyprefabを設定しました。
![](https://cbagames.jp/wp-content/uploads/2023/12/2023-12-07_173000.png)
敵が出現するようになりました。