1. 程式人生 > >【Unity】實現類似皇室戰爭使用“火球”將敵人“炸開”效果

【Unity】實現類似皇室戰爭使用“火球”將敵人“炸開”效果

今天做了一個皇室戰爭使用“火球”攻擊敵人的效果,當然是簡易版的。也是跟上一篇博文有聯絡。

玩過皇室戰爭的人都知道這張卡片,當火球爆炸的時候會將敵人“炸開”,也就是將敵人推開,把對方的陣型打亂
這裡寫圖片描述

步驟一:製作一個會“變大變小”的小球
為什麼要讓小球變大變小呢,因為Demo是2D的所以做一個變大變小的動畫讓人感覺這個小球在空中做了一個弧線運動(雖然很假)。。。這個肯定是要用Unity的Animation編輯器來編輯動畫了
這裡寫圖片描述

很簡單隻設定它的Scale就好了,我設定的是第一幀和最後一陣Scale為1,1,1 中間的時候為2,2,2;

步驟二:讓“火球”飛一會
我們的“火球”可以變大變小了,現在就要讓他飛到我們點選到的點,上程式碼:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Manager : MonoBehaviour
{
    /// <summary>
    /// 帶碰撞的小球
    /// </summary>
    public GameObject player;

    /// <summary>
    /// 臨時小球prefab
    /// </summary>
    public GameObject temp;

    /// <summary>
/// 炮臺 /// </summary> public GameObject rect; /// <summary> /// 記錄生成的小球 /// </summary> GameObject go = null; /// <summary> /// 記錄點選的點 /// </summary> Vector2 clickPoint = Vector2.zero; /// <summary> /// 記錄臨時小球移動的方向 /// </summary> Vector2 dir = Vector2.zero; ///
<summary>
/// 是否完成移動 /// </summary> bool isDone = false; void Update() { if (Input.GetMouseButtonDown(0)) { //記錄滑鼠點選的座標 clickPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition); //從炮臺處生成臨時小球 go = Instantiate(temp, rect.transform.position, Quaternion.identity) as GameObject; //計算臨時小球移動的方向 dir = clickPoint - (Vector2)go.transform.position; } if (go != null) { //移動臨時小球 go.transform.Translate(dir * Time.deltaTime, Space.World); //判斷臨時小球是否到滑鼠點選的點 if (Vector2.Distance(go.transform.position, clickPoint) < 0.2f) { isDone = true; //到達後銷燬臨時小球 Destroy(go.gameObject); } } if (isDone) { //生成帶碰撞的小球 GameObject playerGo = Instantiate(player, clickPoint, Quaternion.identity) as GameObject; //1.5秒後銷燬碰撞小球 //Destroy(playerGo.gameObject, 1.5f); isDone = false; } } }

這裡寫圖片描述
將這個指令碼掛在攝像機上即可。

步驟三:“炸開”敵人

這裡寫圖片描述

生成的Player上掛載我上一篇的程式碼,只需在Start方法之前新增:

 private void Awake()
    {
        targets = GameObject.FindGameObjectsWithTag("Enemy");
    }

然後把上一篇有關小球移動的程式碼註釋掉。

由步驟二可知當Temp的小球到達目的地之後銷燬自身(自身並不帶碰撞效果)然後再生成一個Player帶“擠開”效果的小球。為什麼不直接生成帶碰撞效果的小球呢?因為是2D的如果直接生成帶碰撞效果的小球,在進入“敵人”的時候就會將“敵人”擠開,效果很假,so我這種寫法並不會在進入敵人群的時候發生碰撞效果!至此將敵人“炸開”的效果就做完了。 表達不是很清晰,見諒!:)

效果:

這裡寫圖片描述

沒有特效,沒有Boom~~233