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

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.xdnf.cn/news/10771.html

相关文章:

  • React 第五十一节 Router中useOutletContext的使用详解及注意事项
  • Lua和JS的垃圾回收机制
  • Fuse.js:打造极致模糊搜索体验
  • 网络安全-等级保护(等保) 3-3 GB/T 36627-2018 《信息安全技术 网络安全等级保护测试评估技术指南》-2018-09-17发布【现行】
  • 湖北理元理律师事务所:系统性债务化解中的法律技术革新
  • 0518蚂蚁暑期实习上机考试题1:数组操作
  • 实现仿中国婚博会微信小程序
  • Redis缓存-数据淘汰策略
  • 工作服/反光衣检测算法AI智能分析网关V4安全作业风险预警方案:筑牢矿山/工地/工厂等多场景安全防线
  • Java基础之数组(附带Comparator)
  • Deepseek/cherry studio中的Latex公式复制到word中
  • 云原生时代 Kafka 深度实践:06原理剖析与源码解读
  • OSCP备战-BSides-Vancouver-2018-Workshop靶机详细步骤
  • 本科毕业论文总结
  • docker B站学习
  • 【Spring底层分析】Spring AOP基本使用+万字底层源码阅读分析
  • C++.凸包算法
  • windows11安装scoop 20250602
  • YOLOv11改进 | 注意力机制篇 | SEAM与C2PSA机制优化遮挡检测
  • useMemo useCallback 自定义hook
  • VMware安装Ubuntu全攻略
  • gcc编译构建流程-函数未定义问题
  • BayesFlow:基于神经网络的摊销贝叶斯推断框架
  • 数据库技术
  • 蓝云APP:云端存储,便捷管理
  • leetcode刷题日记——二叉树的层次遍历
  • 【数学 逆序对 构造】P12386 [蓝桥杯 2023 省 Python B] 混乱的数组|普及+
  • deepseek原理和项目实战笔记2 -- deepseek核心架构
  • 量子物理:深入学习量子物理的基本概念与应用
  • 量子计算在大模型微调中的技术突破