ax总目录

1.帧动画sprite animation的创建

2.动画状态机animator

教学链接https://blog.csdn.net/linxinfa/article/details/94392971?spm=1001.2014.3001.5506

为角色增加一个animator组件,并创建加一个动画控制器,拖入。

打开动画控制器,将动画拖入到动画控制器里面(只有一个控制器会自动添加)。然后右键动画。创建连接,根据逻辑关系将动画连接起来。然后在左上方点击“参数”。点击连接的线。在右边condition下增加一些动画转变的参数条件。通过脚本来控制参数,动画转变条件。

3. 连击动作(四连)

教学链接https://blog.csdn.net/weixin_30877755/article/details/95343666?spm=1001.2014.3001.5506

图层及其参数 。将每个链接的退出时间改成0,且固定时间改成0

参数条件举例

为什么设置了attack之后还要设置normalizedTime参数?因为如果设置一个参数的话,你点击攻击按钮会直接跳转到下一个动作。并不能完整的将攻击动作放完,那么就多添加一个。他们参数用来判断行为达到哪个阶段,并通过脚本来控制他们参数在进入因为和退出行为时都设置normalizedTime成零。这样就可以使得你点击攻击按钮动作放完了之后才到下一个动作。

角色脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class playerControl : MonoBehaviour
{public bool Iscanjump = false;//是否能跳跃,默认不能private Rigidbody2D rig;//2D刚体float ScalX;//获取初始Scale.x,用于转向 public float dropConst;//下坠常数public float speed;//地面移动速度public float jumpspeedUp;//上升速度public float jumpspeedVertiacal;//空中左右移动速度private Animator ani;//动画控制器private AnimatorStateInfo state;//动画状态// Start is called before the first frame updatevoid Start(){rig = GetComponent<Rigidbody2D>();//获取刚体ani = GetComponent<Animator>();//获取动画控制器ScalX = transform.localScale.x;}// Update is called once per framevoid Update(){move();//移动函数attack();//攻击函数-四连击}private void move(){    //水平,垂直俩个轴系float h = Input.GetAxis("Horizontal");float v = Input.GetAxis("Vertical");float dir = Input.GetAxisRaw("Horizontal");//方向-1 0 1//跳跃if (v > 0 && Iscanjump == true){rig.velocity = new Vector2(0, jumpspeedUp);//设置刚体速度,给予向量}//长按高跳if (rig.velocity.y > 0 && Input.GetKey(KeyCode.W) && Iscanjump == false){rig.velocity += Vector2.up * 0.2f;//长按高跳额外得到向上速度}//优化手感float a = dropConst * 5 - Mathf.Abs(rig.velocity.y);//通过下坠常数,空中速度快为0时,下坠常数a越大,即越快速 度过这个状态rig.velocity -= Vector2.up * a * Time.deltaTime;//方向改变if (dir != 0){transform.localScale = new Vector3(dir* ScalX, transform.localScale.y, transform.localScale.z);//通过改变scale改变方向}//左右移动Vector3 vt = new Vector3(h, 0, 0).normalized;//vt为俩个轴系合成的方向向量,normalized单位化//移动动画if (dir != 0){ani.SetBool("Ismove", true);}else { ani.SetBool("Ismove", false); }//空中左右移动,为地面jumpspeedVertiacal倍if (h != 0 && Iscanjump == false){gameObject.transform.Translate(vt * speed * jumpspeedVertiacal * Time.deltaTime);//通过这个函数来使用vt使得左右移动}//地面左右移动else { gameObject.transform.Translate(vt * speed * Time.deltaTime); }}private void attack() {state = ani.GetCurrentAnimatorStateInfo(0);//判断播放完if ((state.IsName("attack1") || state.IsName("attack2") || state.IsName("attack3") || state.IsName("attack4")) && state.normalizedTime >= 1.0f){ani.SetInteger("attack", 0);}if (Input.GetKey(KeyCode.J)){if (state.IsName("idle")||  state.IsName("move") && ani.GetInteger("attack")==0 ){ani.SetInteger("attack", 1);} else if (state.IsName("attack1")|| state.IsName("move") && ani.GetInteger("attack") == 1 ){ani.SetInteger("attack", 2);}else if (state.IsName("attack2")|| state.IsName("move") && ani.GetInteger("attack") == 2){ani.SetInteger("attack", 3);}else if (state.IsName("attack3")|| state.IsName("move") && ani.GetInteger("attack") == 3){ani.SetInteger("attack", 4);}}if (state.normalizedTime >=1.0f) {ani.SetFloat("normalizedTime", state.normalizedTime);}if (state.normalizedTime>=1&& ani.GetInteger("attack")==0){ani.SetLayerWeight(ani.GetLayerIndex("attack"), 0);}}
}

bottom脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class IsJump : MonoBehaviour
{//为了优化跳跃碰撞盒,在父物体下面新建空对象bottoom,并添加碰撞盒,用来检测底部(以前碰撞盒头碰到顶部地面还能跳不符合常理,所以需要作此操作)// Start is called before the first frame updatevoid Start(){}// Update is called once per framevoid Update(){}//检测否在地面碰撞盒子检测,通过给地面碰撞盒子transform的tag标签为groundprivate void OnCollisionStay2D(Collision2D collision){if (collision.transform.tag == "ground"){gameObject.GetComponentInParent<playerControl>().Iscanjump = true;//获取父物体脚本变量并赋值}}private void OnCollisionExit2D(Collision2D collision){if (collision.transform.tag == "ground"){gameObject.GetComponentInParent<playerControl>().Iscanjump = false;//获取父物体脚本变量并赋值}}
}

状态机里的动画行为脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SetNormalizedTime : StateMachineBehaviour
{private string normalizedTime = "normalizedTime";// OnStateEnter is called when a transition starts and the state machine starts to evaluate this stateoverride public void OnStateEnter(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){animator.SetFloat(normalizedTime, 0);}// OnStateUpdate is called on each Update frame between OnStateEnter and OnStateExit callbacksoverride public void OnStateUpdate(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){animator.SetFloat(normalizedTime, stateInfo.normalizedTime);}// OnStateExit is called when a transition ends and the state machine finishes evaluating this stateoverride public void OnStateExit(Animator animator, AnimatorStateInfo stateInfo, int layerIndex){animator.SetFloat(normalizedTime, 0);}
}

下一篇

3.Unity2D 横板 比较丝滑的相机移动_ζั͡ ั͡雾 ั͡狼 ั͡✾的博客-CSDN博客Unity2D 横板 比较丝滑的相机移动直接将相机作为物体的子物体,相机会比较生硬,转向时候感觉非常的膈应人,下面是我的相机丝滑优化https://blog.csdn.net/qq_54263076/article/details/125640244

2.Unity2D 横版 帧动画sprite animation+动画状态机animator+丝滑连击动作相关推荐

  1. 4.Unity2D 横版 帧事件+攻击判定+冲砍挑飞+更真实的打击

    总目录 1.攻击碰撞盒的创建 在玩家下面新建两个空物体命名为攻击一和攻击二.然后为两个物体分别添加碰撞盒,根据帧动化来调整碰撞盒位置.并都打开触发器 为俩个攻击盒添加触发器事件 using Syste ...

  2. 15.Unity2D 横版 骨骼动画 之 单张切片图骨骼动画+Aseprite像素画软件

    主目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 b站视频:骨骼动画 骨骼动画的原 ...

  3. 5.Unity2D 横版 对象池的创建

    总目录 注意右边enemy的激活与非激活状态 对象池的好处是不用频繁的毁坏和创建重复预制体,而是通过激活与非激活来对重复预制体进行管理.增加了游戏的流畅性. 1.建立enemy预制体+刚体2D+碰撞盒 ...

  4. 9.Unity2D 横版 简单AI 之 敌人跳跃条件优化+自动范围内检测敌人发起攻击(索敌)+对象池优化+主角受伤死亡

    总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1.动画animation和动画 ...

  5. 6.Unity2D 横版 受击反馈+跟随血条+延时/延迟扣血+协程的应用

    总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1. 受击反馈 用 Unity ...

  6. 7.Unity2D 横版 未受伤害时,血条缓慢变透明+伤害数值显示(浮动,大小,颜色)+协程的应用

    总目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 1.血条缓慢变淡 我们都知道,当 ...

  7. 17.Unity2D 横版 骨骼动画 之 动画中局部骨骼旋转+多层动画共同控制+局部骨骼索敌攻击

    主目录 承接上节课 16.Unity2D 横版 骨骼动画 之 单张PSB图+PS像素画软件_ζั͡ ั͡雾 ั͡狼 ั͡✾的博客-CSDN博客上一节课我们学习了单张的切片图,是最简单的一种骨骼动画,但 ...

  8. 14.Unity2D 横版 粒子系统特效 飙血粒子+高处落地粒子+对象池管理所有粒子

    主目录https://blog.csdn.net/qq_54263076/category_11900070.html?spm=1001.2014.3001.5482 粒子系统常用属性介绍 开始 1. ...

  9. 10.Unity2D 横版 简单AI 之 敌人随机移动+自动巡逻+障碍物跳跃+悬崖处转身+射线检测

    总目录 9.Unity2D 简单AI 之 敌人跳跃条件优化+自动范围内检测敌人发起攻击(索敌)+对象池优化+主角受伤死亡_ζั͡ ั͡雾 ั͡狼 ั͡✾的博客-CSDN博客Unity2D 简单AI 之 ...

最新文章

  1. N皇后问题的位运算求解——目前最快的方法
  2. 对于Wannacry“永恒之蓝”病毒 查看自己电脑是否安全
  3. arcgis python工具-ArcGIS使用Python脚本工具
  4. 实验23:测试泛型依赖注入★
  5. mfc打开控制台异常关闭_vc控制台程序关闭事件时的正确处理方式
  6. .NET Core / C# 开发 IOT 嵌入式设备的个人见解
  7. java 找不到构造函数_JAVA找不到符号构造函数
  8. Spark中的数据本地性
  9. exp/imp 注释乱码问题或Oracle EXP-00091的解决方法
  10. 三段话搞明白什么是Krylov子空间迭代法
  11. python安装virtualenv_python安装virtualenv虚拟环境步骤图文详解
  12. maven项目添加新dependency jar后本地可正常运行,但打包后加载不上
  13. 【字符串】 - 判断是否包含相应的字符 - 截取某一部分字符
  14. 软考 数据库系统工程师
  15. 素数c语言,C语言素数怎么表示
  16. 数学建模论文详细分工——论文手要求篇
  17. 移动端html富文本编辑器,PC/移动端的富文本编辑器wangEditor的使用
  18. 用二次探测法建立hash表
  19. linux ap 模式,无线AP是什么,客户端模式(apclient)是什么意思?
  20. 计划任务linux每天执行一次,linux 每天执行任务计划

热门文章

  1. 不要被事物表面的光鲜亮丽所迷惑
  2. PyEcharts输出保存图片的多种方法
  3. 如何看懂设计师给到的设计图?
  4. linux查看db2表空间大小,DB2 查看表空间的容器情况
  5. 微信小程序开发提示“获取手机号码失败 ERROR:该appid没有权限”解决方案
  6. 0基础学UI设计必须做好4个准备!
  7. 节省75%研发费用!飞算全自动软件工程平台助力软件开发企业突围
  8. 2010年征计算机图书作者/IT人文图书作者启事
  9. frappe-gantt在vue中的使用
  10. 软件生存周期过程及其模型