unity实现 动作游戏的连招/连击
工程下载:https://files.cnblogs.com/files/sanyejun/ComboAttack.7z
全网也没查到比较好的资料,自己弄了个
一共是3个脚本
先上图
黑色为触发条件
绿色和红色为2个动画Behaviour脚本
注意:attack01 attack02 attack03 ——> idle 的has exit time 需要勾选上,其他的都不用
然后attack01 可以连到 attack02 , attack02 可以连到 attack03
那么attack01 和 attack02 需要在动画转折的地方添加动画事件
一个动作
【1.起手】--------------【2.攻击】--------------【3.准备收招转idle】---------------【4.转idle】
那么在 3 这个时间点,添加动画事件,如果可以连击,进入下一个攻击动作,没有的话则进入idle
添加事件:ComboCheck 参数:Int 如果需要2下进下个动作则填 2, 3下则填3
我们这里的attack01 填参数2 attack03填参数3
脚本:
挂人物身上的
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ComboAttack : MonoBehaviour { public Animator anim; public int clickNum = 0; private float lastClickedTime = 0; //2下连击之间按键的最长延迟 public float maxComboDelay = 0.9f; private static readonly int AttackCombo = Animator.StringToHash("attackCombo"); // Start is called before the first frame update void Start() { anim = GetComponent<Animator>(); } // Update is called once per frame void Update() { if (Time.time - lastClickedTime > maxComboDelay) { clickNum = 0; } if (Input.GetMouseButtonDown(0)) { lastClickedTime = Time.time; clickNum++; if (clickNum == 1) { anim.SetBool(AttackCombo, true); } clickNum = Mathf.Clamp(clickNum, 0, 3); } } public void ComboCheck(int num) { if (clickNum >= num) { anim.SetBool(AttackCombo, true); } } public void ClearComboClickNum() { clickNum = 0; } }
动画的Behaviour
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AttackComboNumClear : StateMachineBehaviour { // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { animator.GetComponent<ComboAttack>().ClearComboClickNum(); } }
using System.Collections; using System.Collections.Generic; using UnityEngine; public class AttackComboBehaviour : StateMachineBehaviour { private static readonly int Attack = Animator.StringToHash("attackCombo"); // OnStateEnter is called when a transition starts and the state machine starts to evaluate this state override public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex) { animator.SetBool(Attack, false); } }
分类:
Unity
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
2018-04-12 Unity c#反射查找类中符合条件的方法并执行