使用ObjectPool在Unity实现冲刺(Dash)的残影效果

2D平台游戏中,冲刺一直是一个重要的游玩元素。作为提高移动效率、延长滞空时间、增加跳跃距离的动作系统,冲刺已经成为了丰富游戏重要的一环。本文将介绍如何实现冲刺中残影的视觉效果。

目标效果

许多平台跳跃游戏都有独特的冲刺特效,比如闪烁、形变、残影、流光等等,这里我们讨论其中使用比较广泛的残影效果实现。
最终实现的效果

ObjectPool(对象池)介绍

对象池是一种动态调用物体的结构。在对象池中物体被保存在一个容器中,并且实现物体的自动显示、运行和回收。

需要使用物体时将物体移出对象池,令其使能;物体功能完成后自动将物体回收至对象池,以用于下次调用。

当需要创建的物体数量不确定,且分别处在不同的时间段有相似的作用,可以使用对象池来调控物体的创建,减少物体的渲染数量。

冲刺效果实现的思路

冲刺中,人物会在移动的路径上留下一串残影,并且这些残影的透明度随时间变淡。这里可以使用对象池的方式,每隔固定时间记录人物的移动状态,同时创建状态相同,透明度自动下降的的“残影”对象;并使残影在维持一定时间后消失,回到对象池被再次利用。

在这里对象池ObjectPoolForDash应该实现:

  • 创建时自动产生一定数量的预制体;
  • 每隔一段时间使其中一个预制体使能,并移出对象池;
  • 移出的预制体完成功能后可以调用ObjectPool的方法返回对象池。

残影的预制体ShadowPrefab应该实现:

  • 使能时复制人物状态(位置、图像),并改变色调;
  • 透明度随时间下降;
  • 维持一定时间以后消失使能并调用ObjectPool中方法返回对象池。

具体过程图示:
在这里插入图片描述

示例

对象池控制代码:

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

public class ObjectPoolForDash : MonoBehaviour
{
   
    public static ObjectPoolForDash instance;
    void Awake()
    {
   
        instance = this;
    }

    private Queue<GameObject> objectPool;
    //创建对应数量的预制体
    private GameObject[] shadows;
    public GameObject shadowPrefab;
    public int poolCount = 10;
    void Init()
    {
   
        for (int i = 0; i < poolCount; i++)
        {
   
            shadows[i] = Instantiate(shadowPrefab);
         
  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值