【学习记录】Unity2D使用粒子系统实现拾取金币效果

添加重力并设置粒子与游戏地面的碰撞

设置好粒子系统基本参数后添加trigger组件

为玩家物体添加碰撞并移至粒子系统中,设置Enter的时候调用函数

之前试了使用粒子系统自带的kill来消除粒子,但是总会出现金币数与粒子数不统一的情况,所以应该把消除粒子的逻辑放在代码里实现

新建一个CoinTrigger脚本,挂载到粒子系统上

public class CoinTrigger : MonoBehaviour
{
    //获取玩家对象
    public GameObject player;
    ParticleSystem ps;
    
    //新建粒子数组,用于接收碰撞的粒子
    List<ParticleSystem.Particle> enter = new List<ParticleSystem.Particle>();

    void Start()
    {
        //调用粒子系统
        ps = GetComponent<ParticleSystem>();
    }

    public void OnParticleTrigger()
    {
        int numEnter = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Enter,enter);
        //遍历碰撞的所有粒子
        for (int i = 0; i < numEnter; i++)
        {
            GetCoin();
            ParticleSystem.Particle p = enter[i];
            //设置粒子剩余生命周期为0
            p.remainingLifetime = 0f;
            enter[i] = p;
        }
        ps.SetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
    }

    public void GetCoin()
    {
        AudioManager.CoinAudioClip();
        player.GetComponent<PlayerData>().Coin++;
    }
}

总体思路是用unity的GetTriggerParticles获取碰撞的粒子,遍历所有触发碰撞的粒子并修改粒子的剩余生命周期,最后用SetTriggerParticles将修改后的粒子还给粒子系统

获取金币的逻辑放在for循环中执行,保证每一次碰撞都能触发拾取金币的逻辑

运行游戏,成功拾取金币,数量一致

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
首先,在Unity中创建一个空场景,并创建一个2D人物模型。然后,我们需要使用全新的输入系统来实现移动功能。在Unity中打开“Package Manager”,找到“Input System”,并下载安装。 接下来,在“Project Settings”中启用新的输入系统。选择“Player”,然后在“Other Settings”中将“Active Input Handling”设置为“Input System”。 接下来,我们需要为人物创建一个“CharacterController”组件。选择人物模型,在“Inspector”面板中添加该组件。然后,我们需要编写一个简单的脚本来控制人物的移动。 ```csharp using UnityEngine; using UnityEngine.InputSystem; public class PlayerMovement : MonoBehaviour { [SerializeField] private float speed = 5f; private Vector2 moveDir; private CharacterController controller; private void Start() { controller = GetComponent<CharacterController>(); } private void Update() { Vector3 move = new Vector3(moveDir.x, 0, moveDir.y); controller.Move(move * speed * Time.deltaTime); } public void OnMove(InputValue value) { moveDir = value.Get<Vector2>(); } } ``` 这个脚本通过监听输入系统的移动事件来控制人物的移动。我们将移动方向存储在一个向量变量中,并在Update()方法中使用CharacterController组件来移动人物。 最后,我们需要将这个脚本挂载到人物模型上,并将其绑定到输入系统的移动事件。选择人物模型,在“Inspector”面板中将该脚本拖到“Add Component”上。然后,在“Inspector”面板中选择“Add Component”下的“New Script”并命名为“PlayerMovement”。 在“Inspector”面板中找到“PlayerMovement”脚本,并展开“Input Actions”。将“Move”事件拖到“OnMove”方法上。 现在,我们可以运行场景并使用键盘或手柄来控制人物的移动了。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值