iT邦幫忙

2021 iThome 鐵人賽

DAY 19
0
Mobile Development

從無到有! Unity AR手遊開發日誌-以山海異聞錄為例系列 第 19

Day 19 | FPS滅火AR遊戲開發Part4 - 噴水、滅火

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

目錄
為火焰添加碰撞器
建立滅火控制器
水柱隨相機移動
噴出水柱
滅火,當水柱碰撞到火焰

為火焰添加碰撞器

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

建立滅火控制器

之前創建的水粒子系統新增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();

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滅火系列就結束囉!下一篇文章會是另外的小遊戲,那就明天見囉~


上一篇
Day 18 | FPS滅火AR遊戲開發Part3 - 火焰生成
下一篇
Day 20 | 3D蛇走迷宮AR遊戲開發Part1 場景放置、平面偵測
系列文
從無到有! Unity AR手遊開發日誌-以山海異聞錄為例30

尚未有邦友留言

立即登入留言