Unity3d 实现落叶飘效果

一、 演示效果:

1.gif图演示

在这里插入图片描述

2.视频演示

https://tempsharefiles.oss-cn-shanghai.aliyuncs.com/demo.mp4

二、快速开始

1.下载插件

    本插件主要内容为自主编写,部分功能利用到DOTween插件,仅供习使用, 下载地址如下:

https://tempsharefiles.oss-cn-shanghai.aliyuncs.com/Leaves.unitypackage

    插件结构如下:

在这里插入图片描述

2.使用教程

   1. 新建一个Canvas, 并在Canvas下新建一个Panel ,铺满Canvas,然后去掉Image组件
   2. 将 LeavesSpawn 脚本挂到Panel上,并将Leaves List 的 Size 设为3
   3. 将 Prefabs 文件夹下的 leaf1 、leaf2 、leaf3 赋值给 Leaves List ,然后运行,即可看到效果 
   4. 其中 Leaves List  的长度可改,leaf 预设体的图片可改,以达到增加落叶多样性的目的

在这里插入图片描述

三、代码概述:

1.LeavesLife.cs

   LeavesLife.cs 脚本挂在预设体上,即 leaf 上  主要控制叶子飘落的方向、力度和生命周期
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;

public class LeavesLife : MonoBehaviour
{
    public float lifeTime;
    float fade;

    bool isTimeToFade;
    // Start is called before the first frame update
    void Start()
    {
        lifeTime = 8;
        int x = Random.Range(4000, 6000);
        int y = Random.Range(-6000, -4000);
        int a = Random.Range(50, 200);
        fade = (float)a / 255f;
        transform.GetComponent<Image>().color = new Color(1, 1, 1, fade);
        transform.GetComponent<Image>().DOFade(1, 6).OnComplete(()=> 
        {
            transform.GetComponent<Image>().DOFade(0, 2);
        });
        transform.localScale = new Vector3(fade , fade , fade );
        transform.GetComponent<Rigidbody2D>().AddRelativeForce(new Vector2(x, y));
    }

    // Update is called once per frame
    void Update()
    {
        lifeTime -= Time.deltaTime;

      
        if (lifeTime <= 0)
        {
            Destroy(gameObject);
        }
        
         
        transform.Rotate(Vector3.forward,Time.deltaTime*60);
    }
}

2.LeavesSpwan.cs

   LeavesSpwan.cs 脚本主要用做生成 leaf 使用 控制生成的叶子的数量、位置和样式
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class LeavesSpwan : MonoBehaviour
{
    public List<GameObject> leavesList = new List<GameObject>();

    public List<Vector2> startPosList = new List<Vector2>();
    // Start is called before the first frame update
    void Start()
    {
        int posx = -1600;
        for (int i = 0; i < 16; i++)
        {
            posx = -1600 + i * 200;
            startPosList.Add(new Vector2(posx, 700));
        }
        StartCoroutine(SpawnLeaves());
    }

    IEnumerator SpawnLeaves()
    {
        while (true)
        {
            yield return new WaitForSeconds(1f);
            for (int i = 0; i < leavesList.Count; i++)
            {
                int index = Random.Range(0, startPosList.Count);
                GameObject leaf = Instantiate(leavesList[i],transform);
                leaf.GetComponent<RectTransform>().anchoredPosition = startPosList[index];
                leaf.GetComponent<Image>().SetNativeSize();
            }
        }
    }


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值