unityで、簡単なシューティング3Dを作ってみたいと思います。 前回2Dで簡単なシューティングゲームを作りました。 作業の手順はほとんど同じで、Z軸、奥行きの概念を入れると 3Dのシューティングゲームも作れますので 是非、練習してみてください。

▼今回の各オブジェクトの設定

コード

▼PlayerScript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class PlayerScript : MonoBehaviour
{
    //3)弾のプレハブを定義
    public GameObject bulletPrefab;
 
    // Update is called once per frame
    void Update()
    {
        // 1)入力を取得(←→キー、↑↓キー)
        float moveX = Input.GetAxis("Horizontal");// 左右
        float moveY = Input.GetAxis("Vertical");// 上下
 
        //2)移動実行
        //transform.Translate(Vector3 移動量)  ⇒自分の視点からの相対移動
        //transform.position += new Vector3(x,y,z)  ⇒座標を指定する絶対移動
        transform.position += new Vector3(moveX, moveY, 0f) *10f * Time.deltaTime;
 
        //4)スペースキーで弾生成
        if (Input.GetKeyDown(KeyCode.Space))
        {
            //Instantiate(何を, 位置, 回転);
            Instantiate(bulletPrefab, transform.position, transform.rotation);
        }
 
    }
 
    //5)敵と当たったら
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("EnemyTag"))
        {
            GetComponent<Renderer>().material.color = Color.red;
            other.GetComponent<Renderer>().material.color = Color.red;
            Time.timeScale = 0f;//ゲームを止める
        }
 
    }
}

▼BulletScript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class BulletScript : MonoBehaviour
{
    
    // Update is called once per frame
    void Update()
    {
        //1)前方に発射
        transform.position += Vector3.forward *20f *Time.deltaTime;
 
        // 2)画面外で削除
        if(transform.position.z >= 15f)
        {
            Destroy(gameObject);
        }
    }
 
    //3)当たったら
    private void OnTriggerEnter(Collider other)
    {
        if (other.CompareTag("EnemyTag"))
        {
            Destroy(other.gameObject); // 敵を消す
            Destroy(gameObject); // 自身を消す
        }
         
    }
}

▼EnemyScript

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class EnemyScript : MonoBehaviour
{
  
    // Update is called once per frame
    void Update()
    {
        //1)手前方向へ移動
        transform.position += Vector3.back * 5f * Time.deltaTime;
 
        //2)枠から出たら削除
        if (transform.position.z <= -15f)
        {
            Destroy(gameObject);
        }
 
    }
}

▼GameManager

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
 
public class GameManager : MonoBehaviour
{
    //1)敵のプレハブを定義
    public GameObject enemyPrefab;
 
    // Start is called before the first frame update
    void Start()
    {
        //3)InvokeRepeating("実行する関数名", 開始時間, 間隔);
        InvokeRepeating("CreateEnemy", 1f, 3f);
 
    }
 
    //2)敵出現の関数
    void CreateEnemy()
    {
        float enemyX = Random.Range(-10f, 10f);
        float enemyY = Random.Range(3f, 6f);
        //敵を生成する座標
        Vector3 enemyPos = new Vector3(enemyX, enemyY, 15f);
 
        //Instantiate(何を, 位置, 回転);
        Instantiate(enemyPrefab, enemyPos, transform.rotation);
    }
}

コメントを残す