多人連線遊戲的一個常見特徵是玩家可以發射子彈,並且讓這些子彈在遊戲中的每一個用戶端上執行。
本次的教學將會增加射擊功能,但是會先製作單機版本,非連線模式,下一篇的教學才會包含網路環境下的射擊。
- 新增一個Sphere物件
- 將它重新命名為Bullet
- 選擇Bullet物件,修改scale數值為(0.2, 0.2, 0.2)
- 在Bullet下新增元件Physics->Rigidbody
- 將Rigidbody下的Use Gravity設為false
- 拖曳Bullet至Project視窗下的prefab資料夾,將Bullet設為prefab物件
- 刪除場經中的Bullet
PlayerController腳本先在需要新增射擊功能,此腳本需要參考Bullet prefab,並由一段程式碼完成射擊功能。
添加Bullet prefab的GameObject變數:
public GameObject bulletPrefab;添加Bullet生成位置變數:
public Transform bulletSpawn;在Update中添加以下的判斷式:
if (Input.GetKeyDown(KeyCode.Space)) { Fire(); }新增一個Fire函式來發射子彈:
void Fire() { // Create the Bullet from the Bullet Prefab GameObject bullet = (GameObject)Instantiate ( bulletPrefab, bulletSpawn.position, bulletSpawn.rotation); // Add velocity to the bullet bullet.GetComponent<Rigidbody>().velocity = bullet.transform.forward * 6; // Destroy the bullet after 2 seconds Destroy(bullet, 2.0f); }
完成後PlayerController腳本如下:
using UnityEngine; using UnityEngine.Networking; public class PlayerController : NetworkBehaviour { public GameObject bulletPrefab; public Transform bulletSpawn; void Update() { if (!isLocalPlayer) { return; } float x = Input.GetAxis("Horizontal") * Time.deltaTime * 150.0f; float z = Input.GetAxis("Vertical") * Time.deltaTime * 3.0f; transform.Rotate(0, x, 0); transform.Translate(0, 0, z); if (Input.GetKeyDown(KeyCode.Space)) { Fire(); } } void Fire() { // Create the Bullet from the Bullet Prefab GameObject bullet = (GameObject)Instantiate( bulletPrefab, bulletSpawn.position, bulletSpawn.rotation); // Add velocity to the bullet bullet.GetComponent<Rigidbody>().velocity = bullet.transform.forward * 6; // Destroy the bullet after 2 seconds Destroy(bullet, 2.0f); } public override void OnStartLocalPlayer () { GetComponent<MeshRenderer>().material.color = Color.blue; } }到這裡,既然我們在腳本中增加了射擊功能,就要讓玩家物件看起來能做到這件事。
- 拖曳Player物件至Hierarchy視窗中
- 選擇Player物件,在它底下新增Cylinder子物件
- 將Cylinder物件重新命名為Gun
- 選擇Gun物件,移除它的Capsule Collider元件
- 設定Position數值為(0.5, 0.0, 0.5)
- 設定Rotation數值為(90.0, 0.0, 0.0)
- 設定Scale數值為(0.25, 0.25, 0.25)
- 將Gun物件的Material設為Black Material
現在我們的Player物件看起來會是這樣:
- 接著在Player物件底下生成一個空物件
- 重新命名為BulletSpawn
- 設定BulletSpawn物件的Position為(0.5, 0.0, 1.0)
BulletSpawn的位置應該會和下圖一樣,位在Gun物件的末端:
- 選擇Player物件
- 按下Inspector介面下的apply按鈕
- 刪除Player物件
再來我們要將PlayerController腳本的新變數設定好,將Bullet prefab和BulletSpawn拖曳至PlayerController上對應的變數:
現在我們可以開始測試結果,老樣子Build and Run執行遊戲,以Host身分開始遊戲;執行Unity,點擊LAN Client以用戶端身分開始遊戲。
現在我們在遊戲中,按下空白鍵會在BulletSpawn位置上生成一個Bullet物件並發射出去,但只限本機,因為目前Bullet物件並沒有被網路系統所認識。
上一篇:識別本地玩家物件
沒有留言:
張貼留言