博客
关于我
image unity 原始尺寸_Unity基础教程-对象管理(十一)——生命周期(Growth and Death)...
阅读量:791 次
发布时间:2023-01-24

本文共 1937 字,大约阅读时间需要 6 分钟。

模仿技术人员写作的优化文本:

通过本教程,我们将深入探讨如何在Unity中实现形状的生与死管理。重点将包括形状的增长、消亡以及如何通过延迟到Game Update循环来优化这些行为。

形状增长

为了实现形状的平滑增长,我们需要确保新生成的形状不会立即以完整尺寸出现。我们可以采用两种主要方法:缩放或透明度渐进。其中,缩放方法更为常用。

  • 缩放增长行为

    首先,我们需要在ShapeBehaviorType枚举中添加一个Growing选项。接着,我们可以修改ShapeBehaviorControllerGetInstance方法,使其返回一个GrowingShapeBehavior

  • 实现增长逻辑

    为实现缩放功能,我们需要在GrowingShapeBehavior类中添加两个核心字段:

    • float growthFactor: 用于控制形状缩放比例的增长速度。
    • float growthDuration: 决定形状达到完整尺寸所需的时间。
  • 同步初始配置

    Initialise方法中,我们需要将原始比例保存起来,并将初始缩放比例设为0。这样可以确保形状以零刻度开始增长。

  • 更新增长逻辑

    在每一次GameUpdate中,我们只需要检查当前形状的年龄(Breath的时间戳)是否超过了growthDuration。如果是,则更新缩放比例:我们采用线性增长方式,使比例因子等于当前年龄除以持续时间。

  • 配置生长持续时间

    将生长持续时间参数添加到LifecycleConfiguration中。例如,在SpawnZone中为每个形状配置一个growingDuration,随机生成或通过用户设置来控制。

  • 形状消亡

    通过支持形状的自然生长,我们也可以实现形状的渐进式死亡。

  • 销毁行为

    类似地,我们需要在ShapeBehaviorType中添加一个Dying选项,并创建一个DyingShapeBehavior类。这种行为需要在初始配置中获取原始比例,以便在死亡过程中恢复正确的比例。

  • 实现消亡逻辑

    DyingShapeBehavior中,我们引入两个关键字段:

    • float dyingAge: 记录从何时开始进入死亡周期。
    • float deathDuration: 控制形状从死亡开始至完全消失所需的时间。
  • 延迟销毁

    GameUpdate中,我们需要判断当前正在处于更新循环还是非循环状态。通过维护一个布尔变量IsInGameUpdate,可以避免在更新循环中打乱形状列表。

  • 处理销毁逻辑

    当检测到需要销毁的形状时,我们将它们添加到一个单独的killList中。只有在非更新循环状态下,才会立即销毁这些形状,并从主列表中移除。

  • 防止重复销毁

    在销毁方法中,我们需要检查当前处理的形状是否已经进入死亡周期。通过维护一个濒死计数器或形状是否已被标记为死亡,可以确保每个形状只被销毁一次。

  • 完整生命周期

    为了实现完整的生命周期管理,我们可以创建一个新的LifecycleShapeBehavior,用于处理生长、成熟和死亡三个阶段。这种方法允许我们在需要时灵活地扩展行为逻辑。

  • 实现生命周期行为

    LifecycleShapeBehavior中,我们引入三个核心字段:

    • float matureAge: 决定形状达到成熟阶段所需的时间。
    • float deathAge: 决定形状进入死亡阶段所需的时间。
    • float deathDuration: 控制形状从死亡开始至完全消失所需的时间。
  • 更新生命周期逻辑

    在每一次GameUpdate中,检查形状是否已经到达死亡阶段。如果是,将其标记为濒死,并调用相应的销毁逻辑。

  • 配置生命周期

    将成熟持续时间添加到LifecycleConfiguration中。这样我们可以在SpawnShapes方法中轻松配置化学反应。

  • 代码优化总结

    为了实现上述功能,我们需要进行一定的代码和逻辑优化。以下是关键的代码改动建议:

  • 添加行为类型枚举

    定义一个ShapeBehaviorType枚举,包含GrowingDying等类型。

  • 创建行为类

    为每种行为(如GrowingShapeBehaviorDyingShapeBehaviorLifecycleShapeBehavior)创建相应的类,并在ShapeFactory中注册它们。

  • 优化Game逻辑

    修改Game类的Update方法,处理形状生命周期与killList的交互,确保形状列表的安全性。

  • 添加标记机制

    获取或自定义形状是否正在进入死亡阶段,从而避免重复销毁。

  • 通过这些优化,我们可以更灵活地控制形状的生与死,实现更加平滑的游戏体验。在下一篇教程中,我们将进一步探讨如何实现更复杂的场景管理。

    转载地址:http://soeyk.baihongyu.com/

    你可能感兴趣的文章
    03-docker系列-docker容器的基本操作
    查看>>
    04-docker-commit构建自定义镜像
    查看>>
    04-docker系列-commit构建自定义镜像
    查看>>
    05-docker系列-使用dockerfile构建镜像
    查看>>
    05-如何通过Dockerfile实现高效的应用容器化?
    查看>>
    06-docker系列-使用dockerfile构建nginx、redis镜像
    查看>>
    06-使用dockerfile构建nginx、redis镜像
    查看>>
    07-docker系列-使用dockerfile构建python、jenkins镜像
    查看>>
    07-使用dockerfile构建python、jenkins镜像
    查看>>
    08-docker系列-docker网络你了解多少(上)
    查看>>
    09-docker系列-docker网络你了解多少(下)
    查看>>
    1 解决XP重装后原文件夹拒绝访问
    查看>>
    10-docker系列-docker文件共享和特权模式
    查看>>
    #C2#S2.1# 一个简单的UVM验证平台
    查看>>
    #C2#S2.2~S2.3# 加入 factory/objection/virtual interface 机制
    查看>>
    #C8# UVM中的factory机制 #S8.1.1# OOP 语言三大特性 systemverilog的支持
    查看>>
    #C8# UVM中的factory机制 #S8.1.3# UVM实战代码再剖析
    查看>>
    #C8# UVM中的factory机制 #S8.1.4# 约束的重载
    查看>>
    #C8# UVM中的factory机制 #S8.2.2# 复杂重载方式
    查看>>
    #C8# UVM中的factory机制 #S8.2.3# 重载sequence哪些情形
    查看>>