---
# System prepended metadata

title: Day 19 | FPS滅火AR遊戲開發Part4 - 噴水、滅火
tags: [Unity, AR手遊]

---

# Day 19 | FPS滅火AR遊戲開發Part4 - 噴水、滅火
###### tags: `Unity` `AR手遊`
> **目錄**
> 為火焰添加碰撞器
> 建立滅火控制器
> 水柱隨相機移動
> 噴出水柱
> 滅火，當水柱碰撞到火焰

今天要來實作滅火的行為，包含了水柱的噴射以及火焰的熄滅，那就繼續看下去吧!


## 為火焰添加碰撞器

火焰添加Box Collider，讓火焰可以與水粒子碰撞。

![](https://i.imgur.com/84s3gg5.png)


## 建立滅火控制器

之前創建的水粒子系統新增script：
* 宣告ParticleSystem，將ps元件拖曳進去
* 宣告物件變數將AR Camera拖曳進去。

```
public ParticleSystem ps;
public GameObject ARCamera;
```

## 水柱隨相機移動
隨相機位置移動的程式，放在Update當中，確保隨時噴射水柱時都在鏡頭前方。
```
void Update()
{
    transform.position = new Vector3(ARCamera.transform.position.x, transform.position.y-0.14f, ARCamera.transform.position.z);
    transform.rotation = Quaternion.Euler(new Vector3(transform.eulerAngles.x-34.5f, ARCamera.transform.eulerAngles.y, ARCamera.transform.eulerAngles.z));
}
```


## 噴出水柱
在場景添加控制噴水的Button(UI物件)，添加Event Trigger元件，新增:
* Pointer Down(被按下時):呼叫噴水函式Spout()。
* Pointer Up(被釋放時):呼叫停止噴水函式Stopspout();

![](https://i.imgur.com/EhIp3rd.png)

```
public void Spout() {    ps.Play(true);    }

public void Stopspout() {    ps.Stop(true);    }
```

## 當水柱碰撞到火焰
之前在水的PS勾選collision，為水粒子掛上碰撞體後，使用OnParticleCollision，檢測是否有碰撞的行為發生。如果這個函式被呼叫了，就代表粒子有碰撞到物件，那就一定是產生出來的火焰，直接將火熄滅關閉。

```
private void OnParticleCollision(GameObject fire)
{
    fire.SetActive(false);
}
```
（這邊因為確定可能碰撞到的物體只有火焰，所以就比較偷懶沒有使用Layer檢查是否為火焰，但如果是比較複雜的專案，不可以直接預設撞擊到的一定是目標物喔!）

再來只要依照自己遊戲企劃的設定，增加在多少時間內熄滅多少火焰的機制，這個小遊戲就完成囉。


---

以上就是今天的滅火行為的程式撰寫，那FPS滅火系列就結束囉!下一篇文章會是另外的小遊戲，那就明天見囉~

 

