Unity 用粒子排列成图片

思路: 获取图片的像素位置,然后再将粒子一个个的移动到该位置上,参考自用Unity DOTS制作4万飞剑的太极剑阵

1.首先来一张PNG图片
请添加图片描述
2.将图片拖入Unity中,尺寸越大,像素点越高,粒子也就增多
在这里插入图片描述
3.添加GetPixel代码,作用是获取图片像素的坐标位置,来源这里

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Unity.Mathematics;
public class GetPixel : MonoBehaviour
{
    public Sprite sprite;
    //像素点相对位置
    public List<Vector3> posList;
    public List<Color> poxelColor;

    [Header("Drawing")]
    //剑阵密度
    public int drawDensity = 5;
    //剑阵离散程度
    public int disperseMin;
    public static GetPixel Instance;
    //图片宽高
    private int width;
    private int height;
    void Start()
    {
        Instance = this;
        width = sprite.texture.width;
        height = sprite.texture.height;
        Debug.Log("图片宽度" + width + "图片高度" + height);
        StartCoroutine(ie_GetPixelPos());
    }
    IEnumerator ie_GetPixelPos()
    {
        //yield return new WaitForSeconds(5);
        int halfHeight= height / 2;
        int halfWidth = width / 2;
        Vector3 tempPos = new Vector3();
        for (int i = 0; i < height; i += drawDensity)
        {
            for (int j = 0; j < width; j += drawDensity)
            {
                //获取每个位置像素点的颜色
                Color32 c = sprite.texture.GetPixel(j, i);
                tempPos.y = (j - halfHeight) * disperseMin;
                // Debug.Log("RGBA:" + c);
                //如果对应位置颜色不为透明,则记录坐标到List中
                if (c.a != 0)
                {
                    tempPos.x = (i - halfWidth) * disperseMin;
                    poxelColor.Add(c);
                    posList.Add(tempPos);
                }
            }
            yield return null;
        }
        //总像素长度
        Debug.Log("位置List长度: "+posList.Count);
    }
}

在这里插入图片描述
4.创建粒子系统并添加代码TestParticleMovement,获取像素点位置,并将粒子移动到改位置,粒子数量要与像素点位置的数量一致。
在这里插入图片描述

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class TestParticleMovement : MonoBehaviour
{
    private ParticleSystem particles;
    public int partCount;
    public int speed=2;
    ParticleSystem.Particle[] particleList;
    void Start()
    {
        particles = GetComponent<ParticleSystem>();
        Invoke("Init", 3);
    }

    void Init()
    {
        particleList = new ParticleSystem.Particle[particles.particleCount];
        StartCoroutine(ie_Move());
    }
    IEnumerator ie_Move()
    {
        while (true)
        {
            partCount = particles.GetParticles(particleList);
            int count = 0;
            for (int i = 0; i < partCount; i++)
            {
                float a = Vector3.Distance(GetPixel.Instance.posList[i], particleList[i].position);
                if (a == 0)
                {
                    count++;
                    continue;
                }
                else if (a < 0.5f)
                {
                    particleList[i].velocity = Vector3.zero;
                    particleList[i].position = GetPixel.Instance.posList[i];
                }
                else
                {
                    particleList[i].velocity += (GetPixel.Instance.posList[i] - particleList[i].position) * Time.deltaTime * speed;
                }
            }
            particles.SetParticles(particleList, partCount);
            if (count == partCount)
            {
               break;
            }
            yield return null;
        }

        Debug.Log("协程结束");
	}
}

效果图
请添加图片描述

完毕。

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: Unity是一款强大的游戏引擎,可以通过其内置的粒子系统轻松地实现各种特效,包括模拟风的效果。 通过Unity粒子系统,我们可以制作出非常逼真的风效果。首先,我们需要创建一个空的GameObject来作为风的发射器。然后,在该对象上创建一个粒子系统组件。 在粒子系统组件的Inspector面板中,我们可以设置粒子的外观、速度、发射方向和颜色等属性。为了制作出模拟风的效果,我们可以将发射速度和数量调整为较大值,以便让粒子能够产生一个向外扩散的效果。 接下来,我们可以通过设置粒子的大小、形状和颜色等属性来使其更加逼真。可以尝试调整粒子的大小为较小的值,使其看起来更像细小的气流。 为了让风看起来更加逼真,我们可以添加额外的效果。例如,可以在粒子系统上添加一个风向的Force Field,以模拟风的流动。可以设置Force Field的大小、位置和强度,使其在特定区域内产生一个风向的力场。 最后,我们可以将制作好的风效果应用到游戏场景中。可以将风的发射器放置在需要出现风的位置上,并根据需要调整其大小和方向。 通过以上步骤,我们可以在Unity中使用粒子系统轻松地制作出逼真的风效果。在游戏开发中,我们可以根据需要调整粒子的属性和效果,以实现各种各样的风效果,为游戏增添更多的视觉效果和交互性。 ### 回答2: 使用Unity制作风的粒子效果是非常简单的。下面是一个简单的步骤: 1. 在Unity中创建一个新的粒子系统。在层次结构中单击右键,选择“Effects” -> “Particle System”来创建一个新的粒子系统。 2. 调整粒子系统的属性。在粒子系统的检查器窗口中,你可以调整各种属性来创建不同的风的效果。例如,你可以调整粒子的速度,大小,颜色等等。 3. 添加风强度。在粒子系统的检查器窗口中,你可以找到一个名为“Force over Lifetime”的属性。通过调整该属性的曲线,你可以模拟风的效果。例如,你可以创建一个向某个方向推动粒子的曲线,以模拟风向。 4. 添加风特效。如果你想要让风的效果更加真实,你可以添加一些风的特效。例如,你可以添加一个旋转的特效来模拟风的旋转。你可以在粒子系统的检查器窗口中找到各种特效选项。 5. 调整其他参数。根据你想要的效果,你还可以调整粒子系统的其他参数。例如,你可以调整发射速率,粒子的生命周期等等。 通过以上步骤,你可以在Unity中制作出逼真的风的粒子效果。你可以根据你的需求和创意进行更多的调整和改进。希望这个回答对你有帮助! ### 回答3: 使用Unity制作风效果可以使用粒子系统来实现。以下是一个简单的步骤: 1. 创建粒子系统:在Unity编辑器中,打开场景或者创建一个新的场景。然后在“Hierarchy”面板中,右键单击并选择“Effects”>“ParticleSystem”来创建一个新的粒子系统。 2. 配置粒子系统属性:在Inspector面板中,可以调整粒子系统的各种属性以实现所需的风效果。例如,可以通过调整“Start Speed”,“Start Size”和“Lifetime”等属性来控制风的强度和持续时间。 3. 设置粒子贴图:可以为粒子系统使用风相关的贴图,例如云朵或者烟的贴图。在Inspector面板中,可以将所需的贴图拖放到“Renderer”组件中的“Material”字段上。 4. 调整粒子系统形状:可以通过调整粒子系统的形状来使其更加符合风的效果。在Inspector面板中,可以选择不同的形状类型,并调整其大小、旋转和位置等属性。 5. 添加其他特效:如果想要进一步增强风效果,可以添加其他特效。例如,在粒子系统上添加一个“WindZone”组件,以模拟风的力度和方向。可以在Inspector面板中调整该组件的属性,如“Wind Main”和“Wind Turbulence”。 6. 调整摄像机和光照效果:为了使风效果更加真实,可能需要调整场景中的摄像机和光照效果。可以调整摄像机的视角和位置,以及灯光的类型、强度和颜色等属性,以适应风的环境。 通过使用Unity粒子系统,并按照上述步骤进行配置,就可以制作出逼真的风效果。可以根据需求进一步调整各种参数和添加其他特效,以创造出更加独特和个性化的风效果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值