Ruby's Adventrue游戏制作笔记(十)Unity添加动画

  • 前言
  • 一、给食物添加动画
  • 二、给敌人添加动画
  • 三、添加玩家动画
  • 四、设置触发动画的脚本
  • 系列链接

前言

本文章是我学习Unity官方项目项目所做笔记,作为学习Unity的游戏笔记,在最后一章会发出源码,如果等不及可以直接看源码,里面也有很多注释相关,话不多说,让Ruby动起来!
游戏引擎:Unity2020.3

一、给食物添加动画

打开地图中的一个食物元素,点击windows-animation-animation
或者Ctrl + 6

帧数samples在右边打开


Create一个新的动画
创建缩放(放大缩小效果)

移动到0.1秒 放大

移动到0.2 复原

移动到0.3 缩小

移动到0.4 复原
完整动画完成,覆盖prefabs

二、给敌人添加动画


选择四个动画,直接拖入物体中
将下、左、上移动拖入后
由于向右运动就是向左运动的景象反转,所以先创建一个



将之前给向左移动的四个动画拖入新创建的动画中
添加一个flip X,进行水平方向上的反转


进入动画的controller

创建状态树


添加四个状态

将各种状态拖进来,改变各种属性

状态树为

将状态树设置为Layer Default State,删除其他动画

连线为

编辑蓝色箭头处,不用退出时间

增添和更改parameters中的trigger

设置状态树为MOVEX和moveY两个状态

修改脚本EnemyController
获取动画组件


三、添加玩家动画

由于资源拥有玩家的动画,所以不一一添加了,如果没有,跟敌人的流程差不多
给Ruby一个Animator状态转换机

直接选择Ruby

稍微讲解一下

idle是平常保持的普通状态
蓝箭头这个状态转换

当Speed > 0.1时,发生状态的转换,转换为move状态

蓝箭头这个状态转换

当Speed < 0.1时,发生状态的转换,转化为普通状态

四、设置触发动画的脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class PlayerController : MonoBehaviour
{// 玩家速度public float speed = 5f;// 玩家最大生命值private int maxHealth = 5;// 当前生命值private int currentHealth;// 受到伤害后的无敌时间 无敌时间2秒private float invincibleTime = 2f; // 无敌计时器private float invincibleTimer;// 是否无敌private bool isInvincible;// 玩家的朝向信息// 默认朝向右方private Vector2 lookDirection = new Vector2(1, 0);private Animator anim;// 获得最大生命值public int myMaxHealth{get{return maxHealth;}}// 获得当前生命值public int myCurrentHealth{get{return currentHealth;}}// 获得玩家刚体private Rigidbody2D rbody;void Start(){currentHealth = 2;invincibleTimer = 0;// 获得玩家刚体rbody = GetComponent<Rigidbody2D>();anim = GetComponent<Animator>();}// Update is called once per framevoid Update(){float moveX = Input.GetAxisRaw("Horizontal");  // 控制水平移动方向 按下A时返回 -1,按下D时返回 1float moveY = Input.GetAxisRaw("Vertical"); // 控制垂直方向 W:1 S:-1 // 改变朝向信息Vector2 moveVerctor = new Vector2(moveX, moveY);if(moveVerctor.x !=0 || moveVerctor.y != 0){lookDirection = moveVerctor;}// 设置动画anim.SetFloat("Look X", lookDirection.x);anim.SetFloat("Look Y", lookDirection.y);// 根据向量大小判断anim.SetFloat("Speed", moveVerctor.magnitude);// 创建position坐标,存储玩家输入的坐标Vector2 position = rbody.position;// position.x += moveX * speed * Time.deltaTime;// position.y += moveY * speed * Time.deltaTime;//使用向量尝试position += moveVerctor * speed * Time.deltaTime;// 将最终坐标赋值给玩家// transform.position = position;// 使用刚体rbody.position = position;// 无敌计时if (isInvincible){invincibleTimer -= Time.deltaTime;if (invincibleTimer < 0){// 倒计时结束后取消无敌状态isInvincible = false;}}}// 改变玩家生命值public void ChangeHealth(int amount){// 如果受到伤害,判断是否无敌if(amount < 0){// 无敌,不执行if (isInvincible == true) return;// 不无敌,执行,并且设定为无敌状态isInvincible = true;invincibleTimer = invincibleTime;}Debug.Log(currentHealth + "/" + maxHealth);// 把玩家的生命值约束在 0 和 最大值 之间currentHealth = Mathf.Clamp(currentHealth + amount, 0, maxHealth);//currentHealth += amount;Debug.Log(currentHealth + "/" + maxHealth);}
}

系列链接

Ruby‘s Adventrue游戏制作笔记(一)Unity创建项目

Ruby‘s Adventrue游戏制作笔记(二)Unity控制ruby移动

Ruby‘s Adventrue游戏制作笔记(三)Unity使用tilemap绘制场景

Ruby‘s Adventrue游戏制作笔记(四)Unity绘制其他元素

Ruby‘s Adventrue游戏制作笔记(五)Unity解决碰撞抖动和旋转问题

Ruby‘s Adventrue游戏制作笔记(六)Unity相机跟随玩家移动

Ruby‘s Adventrue游戏制作笔记(七)Unity采集生命道具

Ruby‘s Adventrue游戏制作笔记(八)Unity伤害陷阱

Ruby‘s Adventrue游戏制作笔记(九)Unity添加敌人

Ruby‘s Adventrue游戏制作笔记(十)Unity添加动画

Ruby‘s Adventrue游戏制作笔记(十一)Unity角色攻击——发射子弹

Ruby‘s Adventrue游戏制作笔记(十二)Unity给角色添加简单的特效

Ruby‘s Adventrue游戏制作笔记(十三)Unity血条UI的显示

Ruby‘s Adventrue游戏制作笔记(十四)Unity播放游戏音效

Ruby‘s Adventrue游戏制作笔记(十五)UnityNPC对话

Ruby‘s Adventrue游戏制作笔记(十六)Unity子弹数量及其UI

Ruby‘s Adventrue游戏制作笔记(十七)Unity添加游戏胜利条件和失败条件和导出游戏

Ruby‘s Adventrue游戏制作笔记(十)Unity添加动画相关推荐

  1. Ruby‘s Adventrue游戏制作笔记(十四)Unity播放游戏音效

    Ruby's Adventrue游戏制作笔记(十四)Unity播放游戏音效 前言 一.创建背景音乐 二.创建新的脚本 三.在其他需要播放的所有脚本中进行操作 四.给敌人添加音效 五.给玩家添加移动音效 ...

  2. Ruby‘s Adventrue游戏制作笔记(十二)Unity给角色添加简单的特效

    Ruby's Adventrue游戏制作笔记(十二)Unity给角色添加简单的特效 前言 一.把特效物品进行切割 二.创建 particle System 三.创建彩色球 四.再设置一下其他属性 五. ...

  3. Ruby‘s Adventrue游戏制作笔记(十六)Unity子弹数量及其UI

    Ruby's Adventrue游戏制作笔记(十六)Unity子弹数量及其UI 前言 一.创建新的UI 二.编辑脚本 三.创建获得子弹的道具 系列链接 前言 本文章是我学习Unity官方项目项目所做笔 ...

  4. Ruby‘s Adventrue游戏制作笔记(四)Unity绘制其他元素

    Ruby's Adventrue游戏制作笔记(四)Unity绘制其他元素 前言 一.修改地图层级,将Order in Layer 提高到-10 二.创建Prefabs 三.调整人物在其他元素的位置 四 ...

  5. Ruby‘s Adventrue游戏制作笔记(十七)Unity添加游戏胜利条件和失败条件和导出游戏

    Ruby's Adventrue游戏制作笔记(十七)Unity添加游戏胜利条件和失败条件和导出游戏 前言 一.添加两个相应的UI 二.导出游戏 系列链接 源代码和素材及游戏程序 前言 本文章是我学习U ...

  6. Ruby‘s Adventrue游戏制作笔记(十一)Unity角色攻击——发射子弹

    Ruby's Adventrue游戏制作笔记(十一)Unity角色攻击--发射子弹 前言 一.编辑子弹 二.创建脚本 三.修改玩家攻击脚本 四.将子弹拖入玩家脚本 五.让子弹碰撞到该碰撞的东西 六.编 ...

  7. Unity-业余2D游戏制作笔记02-Dialogue System for Unity使用

    纯新手,仅用于记录个人学习中遇到的问题. 目录 当前目标: C#的变量数值和LUA代码连接 (一)Dialogue System任务流程里简单的LUA代码修改变量 (二)Lua通过调用C#函数,来修改 ...

  8. Scanvenger游戏制作笔记(三)Unity3D创建对墙体的攻击

    Scanvenger游戏制作笔记(三)Unity3D创建对墙体的攻击 前言 一.给墙体增加一个刚体 二.添加标签以便确认 三.脚本 四.Wall 的脚本 五.攻击动画 系列链接 前言 本文章是我学习S ...

  9. 【Visual C++】游戏开发笔记十六 讲解一个完整的回合制游戏demo

    本系列文章由zhmxy555编写,转载请注明出处. 文章链接  http://blog.csdn.net/zhmxy555/article/details/7447864 作者:毛星云    邮箱:  ...

最新文章

  1. 【游戏】疯狂坦克2街机版(不需模拟器)
  2. sublime快捷键整理
  3. Delphi 完全时尚手册之 Visual Style 篇 (界面不错) 转自http://blog.csdn.net/iseekcode/article/details/4733229...
  4. MySQL数据库恢复(LOAD DATA)
  5. python视频教程-Python视频教程
  6. 华为s2600t java_华为服务器RH2288H V2连接 华为存储S2600T
  7. MCS9865串口卡并口卡驱动
  8. linux服务器显卡监控脚本
  9. CanOpen学习笔记5-- CanFestival使用提示
  10. 4.8 51单片机-PCF8591(ADC/DAC)转换芯片
  11. 递归解决汉罗塔问题到底多么简单
  12. matlab中条件数无穷大报错,matlab求条件数
  13. linux 两个文件比较是否完全相同
  14. 2022版自动发卡平台自动发卡源码
  15. 看门狗2显示服务器不可用,看门狗2显示目前无法使用这个应用程序 | 手游网游页游攻略大全...
  16. 数据压缩——WAV文件格式分析
  17. 掌握弹性扩展,让你的应用更强大——弹性伸缩的原理与实践
  18. Python数据类型(二)文本类型-str
  19. 2786: 这是一道数学题 python
  20. 28张高清彩图,了解《人人3 创新版》讲了啥

热门文章

  1. IT架构设计_隽语集(Design Thinking _0901)
  2. Github美化README
  3. c语言 freopen txt_C语言freopen()函数
  4. ACM必学 C/C++文件输入输出利器—freopen函数
  5. 【附源码】Java计算机毕业设计安卓基于Android的物流快递app(程序+LW+部署)
  6. docker安装 hitchhiker --分布式压力测试
  7. 作业帮运维负责人聂安:云原生时代运维转型之道
  8. iOS本地推送实现备忘录闹铃提醒
  9. Nodejs实战之二(使用 superagent 与 cheerio 完成简单爬虫)
  10. 阿里躺平设计家:“人货场”变迁下的家居数智转型