当前位置: 首页 > article >正文

Unity——QFramework工具 AciontKit时序动作执行系统

AciontKit 是一个时序动作执行系统。

游戏中,动画的播放、延时、资源的异步加载、网络请求等,这些全部都是时序任务,而 ActionKit,可以把这些任务全部整合在一起,使用统一的 API,来对他们的执行进行计划

延时回调

using UnityEngine;namespace QFramework.Example
{public class DelayExample : MonoBehaviour{void Start(){Debug.Log("Start Time:" + Time.time);ActionKit.Delay(1.0f, () =>{Debug.Log("End Time:" + Time.time);}).Start(this);}}
}// 输出结果
// Start Time: 0
// End Time: 1.00781

作用:在指定的时间后执行一个回调函数。

场景:在游戏中,你可能需要在一段时间后触发某个事件,比如在玩家完成某个任务后,1秒后显示奖励信息。 

序列和完成回调

using UnityEngine;namespace QFramework.Example
{public class SequenceAndCallback : MonoBehaviour{void Start(){Debug.Log("Sequence Start:" + Time.time);ActionKit.Sequence().Callback(() => Debug.Log("Delay Start:" + Time.time)).Delay(1.0f).Callback(() => Debug.Log("Delay Finish:" + Time.time)).Start(this, _ => { Debug.Log("Sequence Finish:" + Time.time); });}}
}
// 输出结果
// Sequence Start:0
// Delay Start:0
// Delay Finish:1.00537
// Sequence Finish:1.00537

作用:按顺序执行一系列动作,并在序列完成后执行一个回调。

场景:在游戏的开场动画中,你可能需要先播放一段动画,然后等待1秒,最后显示游戏标题。

 帧延时

using UnityEngine;namespace QFramework.Example
{public class DelayFrameExample : MonoBehaviour{void Start(){Debug.Log("Delay Frame Start FrameCount:" + Time.frameCount);ActionKit.DelayFrame(1, () => { Debug.Log("Delay Frame Finish FrameCount:" + Time.frameCount); }).Start(this);ActionKit.Sequence().DelayFrame(10).Callback(() => Debug.Log("Sequence Delay FrameCount:" + Time.frameCount)).Start(this);// ActionKit.Sequence()//      .NextFrame()//      .Start(this);ActionKit.NextFrame(() => { }).Start(this);}}
}// 输出结果
// Delay Frame Start FrameCount:1
// Delay Frame Finish FrameCount:2
// Sequence Delay FrameCount:11

作用:在指定的帧数后执行一个回调。

场景:在需要与游戏帧率同步的任务中使用,比如在每一帧更新UI元素的位置,或者在特定帧数时触发动画。

条件执行

using UnityEngine;namespace QFramework.Example
{public class ConditionExample : MonoBehaviour{private void Start(){ActionKit.Sequence().Callback(() => Debug.Log("Before Condition")).Condition(() => Input.GetMouseButtonDown(0)).Callback(() => Debug.Log("Mouse Clicked")).Start(this);}}
}// 输出结果
// Before Condition
// 鼠标左键按下后
// Mouse Clicked

作用:在满足特定条件时执行一个动作。

场景:在玩家输入响应中使用,比如只有当玩家按下鼠标左键时,才执行攻击动作。

重复执行

using UnityEngine;namespace QFramework.Example
{public class RepeatExample : MonoBehaviour{private void Start(){ActionKit.Repeat().Condition(() => Input.GetMouseButtonDown(0)).Callback(() => Debug.Log("Mouse Clicked")).Start(this);ActionKit.Repeat(5).Condition(() => Input.GetMouseButtonDown(1)).Callback(() => Debug.Log("Mouse right clicked")).Start(this, () =>{Debug.Log("Right click finished");});}}
}// 输出结果
// 每次点击鼠标左键都会输出:Mouse Clicked 
// 点击鼠标右键,只会输出五次:Mouse right clicked,第五次输出  Right click finished
// 

作用:重复执行某个动作,直到满足某个条件或达到指定次数。

场景:在游戏中实现连续点击得分的机制,或者在玩家持续按住某个键时重复执行某个动作。

并行执行

using UnityEngine;namespace QFramework.Example
{public class ParallelExample : MonoBehaviour{void Start(){Debug.Log("Parallel Start:" + Time.time);ActionKit.Parallel().Delay(1.0f, () => { Debug.Log(Time.time); }).Delay(2.0f, () => { Debug.Log(Time.time); }).Delay(3.0f, () => { Debug.Log(Time.time); }).Start(this, () =>{Debug.Log("Parallel Finish:" + Time.time);});}}
}// 输出结果
// Parallel Start:0
// 1.030884
// 2.025135
// 3.018883
// Parallel Finish:3.018883

作用:同时执行多个动作,并在所有动作完成后执行一个回调。

场景:在游戏加载时,可能需要同时加载多个资源,比如音乐、纹理和模型,并在所有资源加载完成后开始游戏。

自定义动作

using UnityEngine;namespace QFramework.Example
{public class CustomExample : MonoBehaviour{class SomeData{public int ExecuteCount = 0;}private void Start(){ActionKit.Custom(a =>{a.OnStart(() => { Debug.Log("OnStart"); }).OnExecute(dt =>{Debug.Log("OnExecute");a.Finish();}).OnFinish(() => { Debug.Log("OnFinish"); });}).Start(this);// OnStart// OnExecute// OnFinishActionKit.Custom<SomeData>(a =>{a.OnStart(() =>{a.Data = new SomeData(){ExecuteCount = 0};}).OnExecute(dt =>{Debug.Log(a.Data.ExecuteCount);a.Data.ExecuteCount++;if (a.Data.ExecuteCount >= 5){a.Finish();}}).OnFinish(() => { Debug.Log("Finished"); });}).Start(this);// 0// 1// 2// 3// 4// Finished// 还支持 Sequence、Repeat、Spawn 等// Also support sequence repeat spawn// ActionKit.Sequence()//     .Custom(c =>//     {//         c.OnStart(() => c.Finish());//     }).Start(this);}}
}

作用:允许用户创建自定义的动作序列,可以包含开始、执行和完成的回调。

场景:在需要实现复杂逻辑的动作序列时使用,比如一个技能的施放过程,可能包含开始施法、持续施法和施法完成的动画和效果。

协程支持

using System.Collections;
using UnityEngine;namespace QFramework.Example
{public class CoroutineExample : MonoBehaviour{private void Start(){ActionKit.Coroutine(SomeCoroutine).Start(this);SomeCoroutine().ToAction().Start(this);ActionKit.Sequence().Coroutine(SomeCoroutine).Start(this);}IEnumerator SomeCoroutine(){yield return new WaitForSeconds(1.0f);Debug.Log("Hello:" + Time.time);}}
}// 输出结果
// Hello:1.002077
// Hello:1.002077
// Hello:1.002077

作用:支持将Unity协程转换为ActionKit动作,以便在ActionKit中使用协程。

场景:在需要使用协程来实现延时或等待某些条件满足时,比如在NPC巡逻路径中,使用协程来控制巡逻的间隔和路径点的停留时间。 

http://www.lryc.cn/news/2399124.html

相关文章:

  • 【Doris基础】Doris中的Replica详解:Replica原理、架构
  • 【中国·广州】第三届信号处理与智能计算国际学术会议 (SPIC2025) 即将开启
  • Android12 Launcher3显示所有应用列表
  • 24.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--单体转微服务--认证微服务
  • 基于React Native开发鸿蒙新闻类应用的实战开发笔记
  • [Java 基础]运算符,将盒子套起来
  • 智能快递地址解析接口如何用PHP调用?
  • 华为OD机试真题——模拟消息队列(2025B卷:100分)Java/python/JavaScript/C++/C语言/GO六种最佳实现
  • c# 显示正在运行的线程数
  • MySQL 日志数据同步的详细教程
  • 2025 Java面试大全技术文章(面试题1)
  • docker 中 什么是「卷」?(Volume)
  • 三维可视化和实时数据处理对前端性能要求以及优化渲染效率
  • 基于VU37P的高性能采集板卡
  • 2025-05-31 Python深度学习10——模型训练流程
  • 卷积神经网络(CNN)、YOLO和人脸识别之间的关系
  • K8S StatefulSet 快速开始
  • 重新测试deepseek Jakarta EE 10编程能力
  • nav2笔记-250603
  • 指纹识别+精准化POC攻击
  • LeetCode[404]左叶子之和
  • mac环境下的python、pycharm和pip安装使用
  • C语言多级指针深度解析:从一级到三级的奥秘
  • uni-app学习笔记十九--pages.json全局样式globalStyle设置
  • BUUCTF[极客大挑战 2019]Havefun 1题解
  • 【基础】Unity中Camera组件知识点
  • Tomcat优化篇
  • Temporal Fusion Transformer(TFT)扩散模型时间序列预测模型
  • 【LangServe部署流程】5 分钟部署你的 AI 服务
  • 攻防世界-unseping