Unity引擎开发:VR粒子系统与特效_(2).VR中的粒子系统基础

VR中的粒子系统基础

在虚拟现实(VR)游戏开发中,粒子系统是一个非常重要的工具,它可以用来创建各种动态效果,如火焰、烟雾、雨雪、爆炸等。这些效果不仅能够增强游戏的视觉体验,还能提升玩家的沉浸感。本节将详细介绍Unity引擎中粒子系统的基本原理和使用方法,帮助开发者在VR项目中有效地使用粒子系统。

粒子系统的概念

粒子系统是一种模拟大量简单对象(粒子)的运动和行为的技术。每个粒子都是一个独立的实体,具有自己的属性,如位置、速度、颜色、透明度等。粒子系统通过控制这些粒子的生成、更新和销毁,来模拟复杂的效果。在Unity中,粒子系统是一个组件,可以附加到任何游戏对象上。

粒子的生命周期

粒子的生命周期通常包括以下几个阶段:

  1. 生成(Spawn):粒子系统根据设定的参数生成新的粒子。

  2. 更新(Update):每个粒子在其生命周期内,根据设定的属性和行为不断更新。

  3. 销毁(Destroy):当粒子的生命时间结束时,粒子系统会销毁该粒子。

粒子系统的主要组件

Unity的粒子系统由多个子模块组成,每个子模块负责控制粒子的不同方面。主要的子模块包括:

  • Emission(发射):控制粒子的生成速率和数量。

  • Shape(形状):定义粒子生成的区域和方向。

  • Velocity over Lifetime(生命周期内的速度):控制粒子在其生命周期内的速度变化。

  • Limit Velocity over Lifetime(生命周期内的速度限制):限制粒子的最大速度。

  • Inherit Velocity(继承速度):控制粒子继承父对象的速度。

  • Force over Lifetime(生命周期内的力):施加力来改变粒子的速度和方向。

  • Color over Lifetime(生命周期内的颜色):控制粒子在其生命周期内的颜色变化。

  • Color over Distance(距离内的颜色):根据粒子的距离来改变颜色。

  • Size over Lifetime(生命周期内的大小):控制粒子在其生命周期内的大小变化。

  • Size over Distance(距离内的大小):根据粒子的距离来改变大小。

  • Rotation over Lifetime(生命周期内的旋转):控制粒子在其生命周期内的旋转变化。

  • Rotation over Distance(距离内的旋转):根据粒子的距离来改变旋转。

  • Renderer(渲染器):定义粒子的渲染方式,如材质、贴图、网格等。

创建粒子系统

在Unity中创建粒子系统非常简单,可以通过以下步骤完成:

  1. 在Hierarchy窗口中右击,选择Effects -> Particle System

  2. 选择并拖动创建的粒子系统到场景中。

  3. 在Inspector窗口中调整粒子系统的各项参数。

基本参数设置

Emission(发射)
  • Rate over Time(时间速率):控制每秒生成的粒子数量。

  • Rate over Distance(距离速率):控制每单位距离生成的粒子数量。

  • Bursts(爆发):在特定时间生成大量的粒子。


// 示例代码:设置粒子系统的发射速率

using UnityEngine;



public class ParticleSystemEmission : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public float rateOverTime = 10.0f;

    public float rateOverDistance = 0.0f;



    void Start()

    {

        // 获取粒子系统的Emission模块

        var emission = particleSystem.emission;

        // 设置时间速率

        emission.rateOverTime = rateOverTime;

        // 设置距离速率

        emission.rateOverDistance = rateOverDistance;

    }

}

Shape(形状)
  • Shape Type(形状类型):定义粒子生成的区域,如球形、立方体、圆锥形等。

  • Radius(半径):控制生成区域的大小。

  • Angle(角度):控制粒子生成的方向角度。


// 示例代码:设置粒子系统的生成形状

using UnityEngine;



public class ParticleSystemShape : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public ParticleSystemShapeType shapeType = ParticleSystemShapeType.Sphere;

    public float radius = 1.0f;

    public float angle = 30.0f;



    void Start()

    {

        // 获取粒子系统的Shape模块

        var shape = particleSystem.shape;

        // 设置形状类型

        shape.shapeType = shapeType;

        // 设置半径

        shape.radius = radius;

        // 设置角度

        shape.angle = angle;

    }

}

Velocity over Lifetime(生命周期内的速度)
  • Speed(速度):控制粒子在其生命周期内的速度变化。

  • Space(空间):定义速度变化的空间,如局部空间、世界空间等。


// 示例代码:设置粒子系统在其生命周期内的速度变化

using UnityEngine;



public class ParticleSystemVelocity : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public float speed = 5.0f;

    public ParticleSystemSimulationSpace simulationSpace = ParticleSystemSimulationSpace.Local;



    void Start()

    {

        // 获取粒子系统的Velocity over Lifetime模块

        var velocity = particleSystem.velocityOverLifetime;

        // 设置速度

        velocity.speed = new ParticleSystem.MinMaxCurve(0, speed);

        // 设置空间

        velocity.space = simulationSpace;

    }

}

粒子系统的渲染

Renderer(渲染器)
  • Material(材质):设置粒子的材质。

  • Render Mode(渲染模式):定义粒子的渲染方式,如单个图片、网格等。

  • Sort Mode(排序模式):控制粒子的排序方式,如按距离、按大小等。


// 示例代码:设置粒子系统的渲染模式和材质

using UnityEngine;



public class ParticleSystemRenderer : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public Material material;

    public ParticleSystemRenderMode renderMode = ParticleSystemRenderMode.Billboard;



    void Start()

    {

        // 获取粒子系统的Renderer模块

        var renderer = particleSystem.GetComponent<ParticleSystemRenderer>();

        // 设置材质

        renderer.material = material;

        // 设置渲染模式

        renderer.renderMode = renderMode;

    }

}

粒子系统的优化

在VR项目中,性能优化是非常重要的。粒子系统可能会消耗大量的计算资源,因此需要对其进行优化,以确保游戏的流畅运行。

减少粒子数量

  • 降低发射速率:减少每秒生成的粒子数量。

  • 限制最大粒子数量:在粒子系统的Main模块中设置Max Particles参数。


// 示例代码:限制粒子系统中的最大粒子数量

using UnityEngine;



public class ParticleSystemOptimization : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public int maxParticles = 100;



    void Start()

    {

        // 获取粒子系统的Main模块

        var main = particleSystem.main;

        // 设置最大粒子数量

        main.maxParticles = maxParticles;

    }

}

使用LOD(Level of Detail)技术

  • LOD组:在不同距离下使用不同细节的粒子系统。

  • 粒子系统LOD:设置粒子系统的LOD属性。


// 示例代码:设置粒子系统的LOD

using UnityEngine;



public class ParticleSystemLOD : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public int lodLevel = 2;



    void Start()

    {

        // 获取粒子系统的Renderer模块

        var renderer = particleSystem.GetComponent<ParticleSystemRenderer>();

        // 设置LOD级别

        renderer.lodThreshold = lodLevel;

    }

}

使用Shader(着色器)优化

  • 自定义Shader:编写高效的自定义Shader来优化粒子的渲染。

  • 使用预计算纹理:预先计算粒子的纹理,减少运行时的计算量。


// 示例代码:使用自定义Shader

using UnityEngine;



public class CustomShaderParticleSystem : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public Material customMaterial;



    void Start()

    {

        // 获取粒子系统的Renderer模块

        var renderer = particleSystem.GetComponent<ParticleSystemRenderer>();

        // 设置自定义材质

        renderer.material = customMaterial;

    }

}

粒子系统的实例化

  • 实例化:通过实例化技术来复用粒子系统,减少内存占用。

  • Particle System Pool:创建一个粒子系统池来管理实例化的粒子系统。


// 示例代码:创建粒子系统池

using UnityEngine;

using System.Collections.Generic;



public class ParticleSystemPool : MonoBehaviour

{

    public ParticleSystem particleSystemPrefab;

    public int poolSize = 10;



    private List<ParticleSystem> pool = new List<ParticleSystem>();



    void Start()

    {

        // 初始化粒子系统池

        for (int i = 0; i < poolSize; i++)

        {

            ParticleSystem particleSystem = Instantiate(particleSystemPrefab, transform);

            particleSystem.gameObject.SetActive(false);

            pool.Add(particleSystem);

        }

    }



    public ParticleSystem GetParticle()

    {

        // 从池中获取一个粒子系统

        foreach (ParticleSystem particle in pool)

        {

            if (!particle.gameObject.activeInHierarchy)

            {

                particle.gameObject.SetActive(true);

                return particle;

            }

        }



        // 如果池中没有空闲的粒子系统,创建一个新的

        ParticleSystem newParticle = Instantiate(particleSystemPrefab, transform);

        newParticle.gameObject.SetActive(true);

        pool.Add(newParticle);

        return newParticle;

    }



    public void ReturnParticle(ParticleSystem particle)

    {

        // 将粒子系统返回到池中

        particle.gameObject.SetActive(false);

    }

}

粒子系统在VR中的应用

在VR项目中,粒子系统可以用来创建各种视觉效果,提升玩家的沉浸感。以下是一些常见的应用场景:

火焰效果

火焰效果可以通过设置粒子的生命周期、颜色和大小变化来实现。可以使用Color over LifetimeSize over Lifetime模块来模拟火焰的燃烧过程。


// 示例代码:创建火焰效果

using UnityEngine;



public class FlameEffect : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public Color startColor = Color.red;

    public Color endColor = Color.yellow;

    public float startSize = 1.0f;

    public float endSize = 0.5f;



    void Start()

    {

        // 获取粒子系统的Color over Lifetime模块

        var colorOverLifetime = particleSystem.colorOverLifetime;

        colorOverLifetime.color = new ParticleSystem.MinMaxGradient(startColor, endColor);



        // 获取粒子系统的Size over Lifetime模块

        var sizeOverLifetime = particleSystem.sizeOverLifetime;

        sizeOverLifetime.size = new ParticleSystem.MinMaxCurve(0, new AnimationCurve(new Keyframe(0, startSize), new Keyframe(1, endSize)));

    }

}

烟雾效果

烟雾效果可以通过设置粒子的生命周期、透明度和速度变化来实现。可以使用Color over LifetimeAlpha over Lifetime模块来模拟烟雾的扩散过程。


// 示例代码:创建烟雾效果

using UnityEngine;



public class SmokeEffect : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public Color startColor = Color.white;

    public Color endColor = new Color(0.5f, 0.5f, 0.5f, 0.0f);

    public float startAlpha = 1.0f;

    public float endAlpha = 0.0f;



    void Start()

    {

        // 获取粒子系统的Color over Lifetime模块

        var colorOverLifetime = particleSystem.colorOverLifetime;

        colorOverLifetime.color = new ParticleSystem.MinMaxGradient(startColor, endColor);



        // 获取粒子系统的Alpha over Lifetime模块

        var alphaOverLifetime = particleSystem.colorOverLifetime;

        alphaOverLifetime.color = new ParticleSystem.MinMaxGradient(startAlpha, endAlpha);

    }

}

雨雪效果

雨雪效果可以通过设置粒子的生命周期、速度和形状来实现。可以使用Shape模块来定义粒子生成的区域,使用Velocity over Lifetime模块来模拟粒子的下落过程。


// 示例代码:创建雨雪效果

using UnityEngine;



public class PrecipitationEffect : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public Vector3 gravityModifier = new Vector3(0, -9.81f, 0);

    public ParticleSystemShapeType shapeType = ParticleSystemShapeType.Box;

    public float boxThickness = 0.1f;



    void Start()

    {

        // 获取粒子系统的Main模块

        var main = particleSystem.main;

        // 设置重力修正

        main.gravityModifier = gravityModifier;



        // 获取粒子系统的Shape模块

        var shape = particleSystem.shape;

        // 设置形状类型

        shape.shapeType = shapeType;

        // 设置盒子的厚度

        shape.boxThickness = boxThickness;



        // 获取粒子系统的Velocity over Lifetime模块

        var velocity = particleSystem.velocityOverLifetime;

        // 设置速度

        velocity.speed = new ParticleSystem.MinMaxCurve(0, 5.0f);

        // 设置空间

        velocity.space = ParticleSystemSimulationSpace.World;

    }

}

爆炸效果

爆炸效果可以通过设置粒子的生命周期、颜色、大小和速度变化来实现。可以使用Color over LifetimeSize over LifetimeVelocity over Lifetime模块来模拟爆炸的扩散过程。


// 示例代码:创建爆炸效果

using UnityEngine;



public class ExplosionEffect : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public Color startColor = Color.red;

    public Color endColor = Color.orange;

    public float startSize = 0.1f;

    public float endSize = 2.0f;

    public float speed = 10.0f;



    void Start()

    {

        // 获取粒子系统的Color over Lifetime模块

        var colorOverLifetime = particleSystem.colorOverLifetime;

        colorOverLifetime.color = new ParticleSystem.MinMaxGradient(startColor, endColor);



        // 获取粒子系统的Size over Lifetime模块

        var sizeOverLifetime = particleSystem.sizeOverLifetime;

        sizeOverLifetime.size = new ParticleSystem.MinMaxCurve(0, new AnimationCurve(new Keyframe(0, startSize), new Keyframe(1, endSize)));



        // 获取粒子系统的Velocity over Lifetime模块

        var velocity = particleSystem.velocityOverLifetime;

        // 设置速度

        velocity.speed = new ParticleSystem.MinMaxCurve(0, speed);

        // 设置空间

        velocity.space = ParticleSystemSimulationSpace.World;

    }

}

光线效果

光线效果可以通过设置粒子的生命周期、颜色和透明度变化来实现。可以使用Color over LifetimeAlpha over Lifetime模块来模拟光线的闪烁和消失过程。


// 示例代码:创建光线效果

using UnityEngine;



public class LightEffect : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public Color startColor = Color.white;

    public Color endColor = new Color(1.0f, 1.0f, 1.0f, 0.0f);

    public float startAlpha = 1.0f;

    public float endAlpha = 0.0f;



    void Start()

    {

        // 获取粒子系统的Color over Lifetime模块

        var colorOverLifetime = particleSystem.colorOverLifetime;

        colorOverLifetime.color = new ParticleSystem.MinMaxGradient(startColor, endColor);



        // 获取粒子系统的Alpha over Lifetime模块

        var alphaOverLifetime = particleSystem.colorOverLifetime;

        alphaOverLifetime.color = new ParticleSystem.MinMaxGradient(startAlpha, endAlpha);

    }

}

粒子系统的交互

在VR项目中,粒子系统可以与玩家进行交互,增强游戏的互动性。以下是一些常见的交互方式:

触发粒子系统

可以使用脚本来触发粒子系统的播放和停止。例如,当玩家触摸某个对象时,播放粒子系统效果。


// 示例代码:触发粒子系统的播放和停止

using UnityEngine;



public class ParticleSystemTrigger : MonoBehaviour

{

    public ParticleSystem particleSystem;



    void OnMouseDown()

    {

        // 播放粒子系统

        particleSystem.Play();

    }



    void OnMouseUp()

    {

        // 停止粒子系统

        particleSystem.Stop();

    }

}

控制粒子系统的参数

可以在运行时动态调整粒子系统的参数,例如,根据玩家的互动调整粒子的生成速率。


// 示例代码:动态调整粒子系统的参数

using UnityEngine;



public class ParticleSystemControl : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public float baseRate = 10.0f;

    public float maxRate = 50.0f;



    void Update()

    {

        // 获取粒子系统的Emission模块

        var emission = particleSystem.emission;



        // 根据玩家的输入调整生成速率

        if (Input.GetKeyDown(KeyCode.Space))

        {

            emission.rateOverTime = maxRate;

        }

        else if (Input.GetKeyUp(KeyCode.Space))

        {

            emission.rateOverTime = baseRate;

        }

    }

}

粒子系统的碰撞检测

可以设置粒子系统与场景中的其他对象进行碰撞检测,例如,当粒子与地面碰撞时,播放一个额外的效果。


// 示例代码:设置粒子系统的碰撞检测

using UnityEngine;



public class ParticleSystemCollision : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public ParticleSystem collisionEffect;



    void Start()

    {

        // 获取粒子系统的Collision模块

        var collision = particleSystem.collision;

        // 启用碰撞检测

        collision.enabled = true;

        // 设置碰撞对象

        collision.collidesWith = LayerMask.GetMask("Ground");

        // 设置碰撞事件

        collision.collisionEventCallback = OnParticleCollision;

    }



    void OnParticleCollision(ParticleCollisionEvent[] collisionEvents)

    {

        foreach (var collisionEvent in collisionEvents)

        {

            // 在碰撞点播放额外的效果

            collisionEffect.transform.position = collisionEvent.intersection;

            collisionEffect.Play();

        }

    }

}

粒子系统的高级技巧

使用自定义数据

Unity的粒子系统支持自定义数据,可以用来存储额外的粒子属性,如粒子的年龄、速度等。自定义数据可以通过Custom Data模块进行设置和使用。以下是一个简单的示例,展示如何在粒子系统中使用自定义数据。


// 示例代码:使用自定义数据

using UnityEngine;



public class ParticleSystemCustomData : MonoBehaviour

{

    public ParticleSystem particleSystem;



    void Start()

    {

        // 获取粒子系统的Custom Data模块

        var customData = particleSystem.customData;

        // 启用自定义数据

        customData.enabled = true;

        // 设置自定义数据的类型

        customData.mode = ParticleSystemCustomData.Mode.Vector4;

    }



    void Update()

    {

        // 获取粒子系统的粒子

        ParticleSystem.Particle[] particles = new ParticleSystem.Particle[particleSystem.main.maxParticles];

        int particleCount = particleSystem.GetParticles(particles);



        for (int i = 0; i < particleCount; i++)

        {

            // 获取当前粒子的自定义数据

            Vector4 customData = particles[i].customData;



            // 更新自定义数据

            customData.x += Time.deltaTime;

            customData.y = Mathf.Sin(customData.x);

            particles[i].customData = customData;

        }



        // 将更新后的粒子数据写回粒子系统

        particleSystem.SetParticles(particles, particleCount);

    }

}

在这个示例中,我们启用了自定义数据模块,并设置其类型为Vector4。然后在Update方法中,我们获取了粒子系统中的所有粒子,并更新了每个粒子的自定义数据。customData.x用于存储粒子的年龄,customData.y用于存储一个基于年龄的周期性变化值。

使用脚本控制粒子系统

除了通过粒子系统的内置模块进行设置外,还可以使用脚本来控制粒子系统的各种行为。例如,通过脚本动态调整粒子的颜色、大小和速度。


// 示例代码:使用脚本动态调整粒子属性

using UnityEngine;



public class ParticleSystemScriptControl : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public Color newColor = Color.blue;

    public float newSize = 2.0f;

    public float newSpeed = 10.0f;



    void Update()

    {

        // 获取粒子系统的粒子

        ParticleSystem.Particle[] particles = new ParticleSystem.Particle[particleSystem.main.maxParticles];

        int particleCount = particleSystem.GetParticles(particles);



        for (int i = 0; i < particleCount; i++)

        {

            // 更新粒子的颜色

            particles[i].startColor = newColor;



            // 更新粒子的大小

            particles[i].startSize = newSize;



            // 更新粒子的速度

            particles[i].velocity = particleSystem.transform.forward * newSpeed;

        }



        // 将更新后的粒子数据写回粒子系统

        particleSystem.SetParticles(particles, particleCount);

    }

}

在这个示例中,我们通过脚本动态调整了粒子系统的粒子颜色、大小和速度。每次调用Update方法时,都会更新所有粒子的属性。

使用碰撞模块

粒子系统可以与场景中的其他对象进行碰撞检测,这在创建复杂效果时非常有用。例如,当粒子与地面碰撞时,可以播放一个额外的效果或改变粒子的行为。


// 示例代码:设置粒子系统的碰撞检测

using UnityEngine;



public class ParticleSystemCollision : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public ParticleSystem collisionEffect;



    void Start()

    {

        // 获取粒子系统的Collision模块

        var collision = particleSystem.collision;

        // 启用碰撞检测

        collision.enabled = true;

        // 设置碰撞对象

        collision.collidesWith = LayerMask.GetMask("Ground");

        // 设置碰撞事件

        collision.collisionEventCallback = OnParticleCollision;

    }



    void OnParticleCollision(ParticleCollisionEvent[] collisionEvents)

    {

        foreach (var collisionEvent in collisionEvents)

        {

            // 在碰撞点播放额外的效果

            collisionEffect.transform.position = collisionEvent.intersection;

            collisionEffect.Play();

        }

    }

}

在这个示例中,我们启用了粒子系统的碰撞模块,并设置了碰撞对象为“Ground”层。当粒子与地面碰撞时,会在碰撞点播放一个额外的粒子系统效果。

使用Sub Emitters

Sub Emitters模块可以用来在粒子生命周期的特定阶段生成新的粒子系统。例如,当粒子爆炸时,可以生成火花和烟雾效果。


// 示例代码:使用Sub Emitters

using UnityEngine;



public class ParticleSystemSubEmitters : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public ParticleSystem sparkEffect;

    public ParticleSystem smokeEffect;



    void Start()

    {

        // 获取粒子系统的Sub Emitters模块

        var subEmitters = particleSystem.subEmitters;

        // 启用Sub Emitters模块

        subEmitters.enabled = true;



        // 添加火花效果

        ParticleSystem.SubEmitterModule sparkSubEmitter = subEmitters.CreateSubEmitter();

        sparkSubEmitter.system = sparkEffect;

        sparkSubEmitter.burst = true;

        sparkSubEmitter.ratio = 1.0f;



        // 添加烟雾效果

        ParticleSystem.SubEmitterModule smokeSubEmitter = subEmitters.CreateSubEmitter();

        smokeSubEmitter.system = smokeEffect;

        smokeSubEmitter.burst = true;

        smokeSubEmitter.ratio = 1.0f;

    }

}

在这个示例中,我们启用了粒子系统的Sub Emitters模块,并添加了两个子发射器:一个生成火花效果,另一个生成烟雾效果。当主粒子系统中的粒子达到特定阶段时,会触发子发射器生成新的粒子系统。

使用Trails和Lights

Trails模块可以用来创建粒子的尾迹效果,而Lights模块可以用来为粒子添加光源效果。这些模块可以显著提升粒子系统的视觉效果。


// 示例代码:使用Trails和Lights

using UnityEngine;



public class ParticleSystemTrailsAndLights : MonoBehaviour

{

    public ParticleSystem particleSystem;

    public Light particleLight;



    void Start()

    {

        // 获取粒子系统的Trails模块

        var trails = particleSystem.trails;

        // 启用Trails模块

        trails.enabled = true;

        // 设置尾迹的生命周期

        trails.minVertexDistance = 0.1f;

        trails.lifetime = 2.0f;



        // 获取粒子系统的Lights模块

        var lights = particleSystem.lights;

        // 启用Lights模块

        lights.enabled = true;

        // 设置光源

        lights.light = particleLight;

        lights.ratio = 0.5f;

    }

}

在这个示例中,我们启用了粒子系统的Trails模块,并设置了尾迹的生命周期。同时,我们启用了Lights模块,并为粒子添加了光源效果。

总结

粒子系统是Unity中非常强大的工具,可以用来创建各种动态效果,提升游戏的视觉体验和沉浸感。通过理解粒子系统的生命周期、主要组件和优化技巧,开发者可以在VR项目中有效地使用粒子系统。此外,通过脚本控制和高级技巧,可以进一步增强粒子系统的功能和效果。

希望本节内容能帮助你在VR项目中更好地利用粒子系统,创造出令人惊叹的视觉效果。如果你有任何问题或需要进一步的帮助,欢迎在评论区留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值