作業需求
遊戲素材下載
點我下載
建立遊戲
建立資料夾
首先開啟一個 2D 專案,之後新建立四個資料夾,分別名為
- Textures – 用以存放遊戲影像
- Scripts – 用以存放 C# 腳本
- Prefabs – 存放遊戲的所有物件
- Scenes – 存放遊戲的所有場景
進入 Textures 資料夾,將文章開頭下載的素材放入(共六張)
建立主要場景
按下「檔案」「另存為..」將目前場景存為主場景,名為「MainScene」
將圖片 background 以及太空船 spaceship 拉進去階層視窗
點擊 spaceship 物件修改屬性,按下「增加元件」「2D 物理」「Rigidbody」
並將「身體類型」變更為「Kinematic」
將 spaceship 物件位置設定為 -3.5
將 spaceship 的圖層順序設定為 1
建立太空船控制腳本
新建一個 C# 腳本,名為「SpaceshipScript」
點擊進入編輯腳本,輸入以下程式碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpaceshipScript : MonoBehaviour
{
// Start is called before the first frame update
private Rigidbody2D r2d;
void Start()
{
r2d = gameObject.GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.RightArrow))
r2d.velocity = new Vector2(10, 0);
else if (Input.GetKey(KeyCode.LeftArrow))
r2d.velocity = new Vector2(-10, 0);
else
r2d.velocity = new Vector2(0, 0);
}
}
將「SpaceshipScript」腳本拉到 spaceship 物件底下
加入可以射擊的子彈
將子彈圖片加入場景中
修改子彈物件的屬性,按下「增加元件」「2D 物理」「Rigidbody」
並且將「身體類型」變更為「Kinematic」
幫子彈加入程式,新增 C# 腳本名為「BulletScript」
編輯 BulletScript 腳本,並且加入以下程式碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class BulletScript : MonoBehaviour
{
// Start is called before the first frame update
public int speed = 6;
private Rigidbody2D r2d;
void Start()
{
r2d = gameObject.GetComponent<Rigidbody2D>();
r2d.velocity = new Vector2(0, speed);
}
// Update is called once per frame
void Update()
{
}
void OnBecameInvisible()
{
Destroy(gameObject);
}
}將 BulletScript 腳本拉到 bullet 物件底下
修改 bullet 物件的圖層順序為1
將 bullet 做成預置物件
之後刪除在階層視窗的 bullet 物件
將 spaceship 的腳本「SpaceshipScript」修改為以下
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpaceshipScript : MonoBehaviour
{
// Start is called before the first frame update
private Rigidbody2D r2d;
public GameObject bullet;
void Start()
{
r2d = gameObject.GetComponent<Rigidbody2D>();
}
// Update is called once per frame
void Update()
{
if (Input.GetKey(KeyCode.RightArrow))
r2d.velocity = new Vector2(10, 0);
else if (Input.GetKey(KeyCode.LeftArrow))
r2d.velocity = new Vector2(-10, 0);
else
r2d.velocity = new Vector2(0, 0);
if (Input.GetKeyDown(KeyCode.Space))
{
Instantiate(bullet, transform.position, Quaternion.identity);
}
}
}
將 spaceship 物件底下的腳本,將預置物件的 bullet 拉進去
再來要把敵機(石頭)放進來,將 emeny 加進階層視窗
修改 enemy 物件的屬性,按下「增加元件」「2D 物理」「Rigidbody」
並且將「身體類型」變更為「Kinematic」
將圖層順序設定為1
新建一個腳本,名為「EnemyScript」
編輯 EnemyScript 腳本,並且輸入以下程式碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyScript : MonoBehaviour
{
public int speed = -5;
private Rigidbody2D r2d;
// Start is called before the first frame update
void Start()
{
r2d = gameObject.GetComponent<Rigidbody2D>();
r2d.velocity = new Vector2(0, speed);
r2d.angularVelocity = Random.Range(-200, 200);
}
// Update is called once per frame
void Update()
{
}
void OnBecameInvisible()
{
Destroy(gameObject);
}
}將腳本 EnemyScript 拉近 enemy 物件底下
將 enemy 做成預置物件
刪除階層視窗的 enemy 物件
製作孵化器(產生器)
將圖片 spawn 拉到階層視窗,並設定Y位置為5
建立 C# 腳本名為「SpawnScript」
編輯腳本並加入以下程式碼
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SpawnScript : MonoBehaviour
{
public GameObject enemy;
public float spawnTime = 2;
// Start is called before the first frame update
void Start()
{
InvokeRepeating("addEnemy", 0, spawnTime);
}
void addEnemy()
{
Renderer rd = gameObject.GetComponent<Renderer>();
float x1 = transform.position.x - rd.bounds.size.x / 2;
float x2 = transform.position.x + rd.bounds.size.x / 2;
Vector2 spawnPoint = new Vector2(Random.Range(x1, x2), transform.position.y);
Instantiate(enemy, spawnPoint, Quaternion.identity);
}
// Update is called once per frame
void Update()
{
}
}將 SpawnScript 腳本拉到 spawn 物件底下
將 enemy 預置物件加入
碰撞偵測
將 spaceship 物件與 bullet、enemy 預置物件都使用「增加元件」「2D 盒狀碰撞器」將「是觸發器」打勾
更新 EnemyScript 腳本
註:腳本內的 bullet(Clone) 與 spaceship 請與預置物件同名
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EnemyScript : MonoBehaviour
{
public int speed = -5;
private Rigidbody2D r2d;
// Start is called before the first frame update
void Start()
{
r2d = gameObject.GetComponent<Rigidbody2D>();
r2d.velocity = new Vector2(0, speed);
r2d.angularVelocity = Random.Range(-200, 200);
}
// Update is called once per frame
void Update()
{
}
void OnBecameInvisible()
{
Destroy(gameObject);
}
void OnTriggerEnter2D(Collider2D obj)
{
if (obj.gameObject.name.Equals("bullet(Clone)"))
{
Destroy(gameObject);
Destroy(obj.gameObject);
}
if (obj.gameObject.name.Equals("spaceship"))
{
Destroy(gameObject);
}
}
}
遊戲完成,玩玩看吧!

- 受保護的內容: NAS 版 Mathbot 管理網站與 Linebot 啟動方法 - 2024 年 11 月 15 日
- Realtime 啥鬼的 - 2021 年 6 月 15 日
- nodejs 數學遊戲 - 2021 年 6 月 8 日


































為什麼我的background比較小?
哪裡的背景
紫色的