
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); } } |