粒子效果

weixin_43268393發表於2020-11-23

粒子效果

1. 簡單粒子製作
  • 按參考資源要求,製作一個粒子系統,參考資源
  • 使用 3.3 節介紹,用程式碼控制使之在不同場景下效果不一樣
2. 實現過程
  1. 本次作業要求較為簡單,還有相關的參考教程,需要實現一個帶有光暈的魔法球。整個粒子可以分為兩部分,即光暈(多個)和星光。

  2. 首先製作例子主體部分–光暈,光暈的中間部分的粒子不會移動,所以設定其speed為0,shape設定為Box或Sphere,讓光暈填充整個粒子,顯得飽滿。

  3. 設定光暈粒子(Light)的Color over Lifetime元件,光暈由於受四周的光照影響,在實際中,在光暈從出生到消失的時候,肯定是無中生有,那麼一切光從黑暗中來最後消失與黑暗,所以最外部的顏色肯定是黑色。
    在這裡插入圖片描述

  4. 設定光暈粒子(Light)的其它引數。
    在這裡插入圖片描述

  5. 設定星光粒子(Particle)的 Color over Lifetime元件引數,星光的特徵,也是無中生有,還有就是出生的時候顏色應該和閃光球的顏色一致,然後越來越淡(白色),最後消失於黑暗中(黑色)。
    在這裡插入圖片描述

  6. 設定星光粒子的其他引數。
    在這裡插入圖片描述

  7. 最後將這兩種粒子組合到一個空的物件上。
    在這裡插入圖片描述

  8. 星光粒子和光暈粒子的Renderer元件設定相同
    在這裡插入圖片描述

  9. 將成品進行預製,最後通過一個程式碼載入到場景中:

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

public class ClickHandle : MonoBehaviour
{
    public GameObject paricle;
    private int speed = 0;
    // Start is called before the first frame update
    void Start()
    {
        speed = 0;
        //載入預製資源
        paricle = ParticleSystem.Instantiate<GameObject>(Resources.Load<GameObject>("Prefabs/simple"));
    }
    // Update is called once per frame
    void Update()
    {
        if (paricle != null && paricle.transform.position.y > -3)
        {
            paricle.transform.Translate(new Vector3(0, -2, 0) * speed * Time.deltaTime);
        }
        else if (paricle != null && paricle.GetComponent<ParticleSea>() == null)
        {
            Destroy(paricle);
            this.gameObject.AddComponent<ParticleSea>();
        }
            

        if (Input.GetButtonDown("Fire1"))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit[] hits;
            hits = Physics.RaycastAll(ray);

            for (int i = 0; i < hits.Length; i++)
            {
                RaycastHit hit = hits[i];


                if (hit.collider.gameObject != null)
                {
                    speed = 2;
                }
            }
        }   
    }
}

3. 效果展示

相關文章