Unity学习笔记(二)如何制作角色动画

前言

本文为Udemy课程The Ultimate Guide to Creating an RPG Game in Unity学习笔记

创建一个角色

我们的目的是创建一个可移动、跳跃、冲刺等动作的角色

需要的组件:Rigidbody(用于创建物理规则)、Collider(用于检测碰撞)、Sprite Renderer(用于渲染角色,放在动画子对象)、Material(材质,2D 物理引擎中对象的物理交互属性的工具)

步骤一:先创建一个Player对象

在这里插入图片描述
创建Player属性如下
在这里插入图片描述

步骤二:修改初始图形象

现在我们来改变它的形象,需要修改Sprite Renderer使用我们自己的图标,这里需要先将原始图进行分割

图片初始,这肯定不能在游戏中使用,我们需要对它进行分割

在这里插入图片描述
可以通过编辑,也可以通过选择其他的按钮完成切割,这里我们选择编辑
在这里插入图片描述
由于这张图人物大小不一,所以我们要手动设置切割大小,这里也有自动模型(类型)

我这里选择了 X = 69, Y = 44
在这里插入图片描述
效果如下
在这里插入图片描述
然后我们再讲切割好的图片放到 Sprite Renderer 的精灵这里
在这里插入图片描述
如果切割出来的图片太小了,可以通过这里进行微调
在这里插入图片描述

这里角色不在中心,进行微调即可
在这里插入图片描述

拓展

Warrior_Sheet-Effect (Texture 2D)

Warrior_Sheet-Effect (Texture 2D) 通常指的是用于游戏开发中的 **角色动画纹理图集(**Sprite Sheet)

什么是 Warrior_Sheet-Effect?
  1. 定义
    1. 它是一张包含多个角色动作帧的二维纹理图片,用于动画实现。
    2. 例如,一个“战士”的行走、攻击、跳跃等动作会分成若干帧,排列在一张大图中。
  2. 用途
    1. 用于实现 2D 动画效果
    2. 在游戏中通过播放这些帧,实现角色的连续动作,如挥剑、奔跑、受伤等。
  3. 效果
    1. 提供流畅的战士角色动画,提升游戏画面的动态表现力。
在 Unity 中使用 Warrior_Sheet-Effect

步骤 1:导入纹理

  1. 将图集文件(如 Warrior_Sheet-Effect.png)拖入 Unity 的 Assets 文件夹。
  2. 选中纹理,在 Inspector 面板中设置:
    1. Texture Type:选择 Sprite (2D and UI)
    2. Sprite Mode:选择 Multiple(多帧模式)。
    3. Pixels Per Unit:根据游戏需求设置像素与单位的比例。

步骤 2:切割图集

  1. 在纹理设置中点击 Sprite Editor
  2. 打开切割工具,选择:
    1. Slice TypeGrid by Cell SizeGrid by Cell Count
    2. 根据图集帧的大小或数量进行切割。
  3. 确保每一帧的边界正确,然后点击 Apply

步骤 3:创建动画

  1. Hierarchy 面板中创建一个新的 GameObject 并附加 Sprite Renderer 组件。
  2. 打开切割后的图集,选择一组帧并拖入场景。
  3. Unity 会自动提示创建动画,保存为 .anim 文件。
  4. 在 Animator 面板中编辑动画的播放逻辑。
动画效果的优化
  1. 帧速率(Frame Rate)
    1. 在动画中调整帧速率,确保动作流畅但不过快(通常为 12~24 fps)。
  2. 循环动画
    1. 对于循环动作(如走路或奔跑),勾选 Loop
  3. 触发条件
    1. 结合 AnimatorC# 脚本,实现复杂的动画切换(如攻击时触发攻击动画)。
使用场景
  1. 战士角色动画
    1. 通过帧动画实现战士的攻击、行走、跳跃、受伤等动作。
  2. 特效动画
    1. 图集中可能包含技能特效(如剑光、爆炸效果),配合角色动画使用。
  3. 游戏 UI 或其他效果
    1. 适用于任何需要动态效果的 2D 场景。

制作角色动作的动画(Animator)

前期准备

将制作动画的窗口设置出来
在这里插入图片描述
在 Player 对象中创建子对象命名为 Animator,添加组件。

完成动画需要的组件:Sprite Renderer(渲染器)、Animator(动画)、C#脚本。

在这里插入图片描述
创建了 Animator 之后还需要创建 Animator Controller 来设置动画的状态

在这里插入图片描述

双击后,在动画器的窗口就可以看到当前的状态了
在这里插入图片描述

制作角色简单的动画

在这里插入图片描述
选择之前切割的图拉取到对应的片段中
在这里插入图片描述

效果如下
请添加图片描述

拓展

Animator?

Animator 是 Unity 中用于管理和控制动画的组件和系统,通过结合 动画片段(Animation Clips)状态机(State Machines)脚本触发器(Triggers),实现复杂的角色动作和动画效果。以下是 Animator 的详细介绍及使用方法:

1. 什么是 Animator?
  • Animator 组件
    • 挂载在游戏对象上,连接动画控制器(Animator Controller)。
    • 用于播放、控制和切换动画片段。
  • Animator Controller
    • 是一个图形化的动画状态机,定义了动画之间的切换逻辑。
2. Animator 的主要功能
  1. 播放动画
    1. 控制角色的行走、跑步、攻击等动作。
  2. 状态机管理
    1. 动画状态之间的转换由状态机(State Machine)完成,允许动画流畅过渡。
  3. 参数控制
    1. 通过 Animator 参数(如 boolfloatint)动态调整动画行为。
  4. 触发器(Trigger)
    1. 用于触发一次性动画,比如攻击动作。
  5. 混合树(Blend Tree**)**:
    1. 实现动作的平滑过渡(如行走到跑步的速度切换)。
3. 如何使用 Animator

步骤 1:添加 Animator 组件

  1. 选择一个游戏对象(如角色)。
  2. 在 Inspector 面板中,点击 Add Component,选择 Animator

步骤 2:创建 Animator Controller

  1. 右键点击 Assets > Create > Animator Controller
  2. 将创建的 Animator Controller 拖入对象的 Animator 组件的 Controller 槽位。

步骤 3:添加动画片段

  1. 双击打开 Animator Controller。
  2. 将动画片段(.anim 文件)拖入 Animator 面板。
  3. 设置初始状态:
    1. 右键点击一个动画片段,选择 Set as Layer Default State

步骤 4:设置动画切换

  1. 在 Animator 中点击一个状态(动画片段),右键选择 Make Transition
  2. 创建一个到目标状态的过渡。
  3. 设置过渡条件:
    1. 在 Animator 面板中,创建参数(如 isRunning)。
    2. 选中过渡箭头,设置条件(如 isRunning = true 时切换到跑步动画)。

步骤 5:通过脚本控制动画

使用代码动态控制 Animator 参数:

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    private Animator animator;

    void Start()
    {
        animator = GetComponent<Animator>();
    }

    void Update()
    {
        // 设置动画参数
        float speed = Input.GetAxis("Vertical");
        animator.SetFloat("Speed", Mathf.Abs(speed));

        if (Input.GetButtonDown("Jump"))
        {
            animator.SetTrigger("Jump");
        }
    }
}
4. Animator 的核心概念

状态(State)

  • 表示一个动画片段或动作的状态,例如 Idle、Run、Jump。
  • 每个状态可以对应一个动画片段。

过渡(Transition)

  • 状态之间的切换。
  • 通过设置条件(Parameters)和过渡时间(Transition Duration)实现流畅的切换。

参数(Parameters)

  • 动画切换的触发条件。
  • 参数类型:
    • Float:如角色速度。
    • Bool:如是否攻击。
    • Int:如动作模式编号。
    • Trigger:一次性触发动作。

混合树(Blend Tree**)**

  • 在同一个状态中,根据参数值平滑混合多个动画。
  • 常见用法:
    • 根据速度混合行走和跑步动画。
    • 根据角色角度混合转身动画。
5. 常见用法场景
  1. 角色动画
    1. 管理角色的待机、行走、攻击、跳跃等动作。
  2. 敌人 AI 动画
    1. 根据敌人的状态(巡逻、追击、攻击)切换动画。
  3. 技能特效
    1. 技能启动和结束动画,通过 Trigger 控制一次性播放。
  4. UI 动画
    1. 在界面中实现按钮按下或弹窗动画。
6. 常见问题及解决方案
  1. 动画切换卡顿
    1. 检查过渡时间是否过长。
    2. 确保没有不必要的过渡条件冲突。
  2. 动画循环问题
    1. 在 Animation Clip 的 Inspector 面板中,取消 Loop Time 勾选。
  3. 参数未更新
    1. 确保在代码中正确调用 SetFloatSetBoolSetTrigger 等方法。
  4. 动画过渡条件无效
    1. 确保所有相关参数在 Animator 面板中已正确配置。
7. 高级功能
  1. 层级(Layers)
    1. 用于处理多种动画叠加,例如角色奔跑时还可以播放上半身射击动作。
  2. IK**(Inverse Kinematics,逆向动力学)**:
    1. 用于角色与环境的动态交互(如手部抓住物体)。
  3. 动画事件(Animation Events)
    1. 在动画帧中插入事件回调,触发脚本逻辑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/936776.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Pytest-Bdd-Playwright 系列教程(16):标准化JSON报告Gherkin格式命令行报告

Pytest-Bdd-Playwright 系列教程&#xff08;16&#xff09;&#xff1a;标准化JSON报告&Gherkin格式命令行报告 前言一、创建Feature文件二、创建步骤定义文件三、生成Cucumber格式的JSON报告四、使用Gherkin格式的命令行报告五、将BDD报告集成到Jenkins中总结 前言 在自动…

harbor镜像仓库搭建

Harbor简介 Harbor的发展背景和现状 Harbor项目起始于2014年左右,当时正值容器技术和微服务架构迅速崛起的时期。随着越来越多的企业开始采用容器化部署应用,对于私有镜像管理的需求也日益增长。传统的解决方案要么缺乏必要的企业级特性(如访问控制、安全性和可扩展性),…

Windows安装Jira

下载 Download Jira Data Center | Atlassian https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-10.3.0-x64.exe 以管理员身份安装&#xff0c;否则弹出以下提醒 创建和配置MySQL数据库&#xff1a;参照 Connecting Jira applicat…

【企业微信自建应用-前端篇】企业微信自建应用开发流程详细介绍

前言 最近接到需求&#xff0c;需要我在企业微信端自建一个应用&#xff0c;用来接受PC端派发的工单&#xff0c;告警&#xff0c;公告等内容。 这里写一个帖子汇总一下我经历的全流程开发&#xff0c;当然这是基础的流程啊。因为功能要求也不高。后面如果开发更多的东西再补充…

[每周一更]-(第127期):Go新项目-Gin中使用超时中间件实战(11)

在项目不断迭代过程中&#xff0c;发现基础架构中&#xff0c;没有进行超时控制&#xff0c;有些接口由于网络延迟以及远程调用等情况存在请求时间过长的问题&#xff0c;消耗了资源&#xff0c;也降低了用户体验&#xff0c;这一讲我们聊下超时控制中间件&#xff0c;来完善我…

定时/延时任务-Kafka时间轮源码分析

文章目录 1. 概要2. TimingWheel2.1 核心参数2.2 添加任务2.3 推进时间 3. TimerTaskList3.1 添加节点3.2 删除节点3.3 刷新链表3.4 队列相关 4. 时间轮链表节点-TimerTaskEntry5. TimerTask6. Timer 和 SystemTimer - 设计降级逻辑7. 上层调用8. 小结 1. 概要 时间轮的文章&a…

【传感器技术】第6章 压电式传感器,压电材料,压电效应,电压放大器

关注作者了解更多 我的其他CSDN专栏 过程控制系统 工程测试技术 虚拟仪器技术 可编程控制器 工业现场总线 数字图像处理 智能控制 传感器技术 嵌入式系统 复变函数与积分变换 单片机原理 线性代数 大学物理 热工与工程流体力学 数字信号处理 光电融合集成电路…

端点鉴别、安全电子邮件、TLS

文章目录 端点鉴别鉴别协议ap 1.0——发送者直接发送一个报文表明身份鉴别协议ap 2.0——ap1.0 的基础上&#xff0c;接收者对报文的来源IP地址进行鉴别鉴别协议ap 3.0——使用秘密口令&#xff0c;口令为鉴别者和被鉴别者之间共享的秘密鉴别协议ap 3.1——对秘密口令进行加密&…

XDOJ 877 图的深度优先遍历

题目&#xff1a;图的深度优先遍历 问题描述 已知无向图的邻接矩阵&#xff0c;以该矩阵为基础&#xff0c;给出深度优先搜索遍历序列&#xff0c;并且给出该无向图的连通分量的个数。在遍历时&#xff0c;当有多个点可选时&#xff0c;优先选择编号小的顶点。&#xff08;即…

Spring--07-01---@Transactional注解失效的8大场景

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Transactiona1.默认回滚&#xff1a;RuntimeException 1.Transactional注解失效的8大场景1.数据库引擎是否支持事务3.方法不是public的4.自身调用5.数据源没有配置事…

拆解大语言模型RLHF中的PPO

** 拆解大语言模型RLHF中的PPO ** 参考链接&#xff1a;https://zhuanlan.zhihu.com/p/645225982 为什么大多数介绍RLHF的文章&#xff0c;一讲到PPO算法的细节就戛然而止了呢&#xff1f;要么直接略过&#xff0c;要么就只扔出一个PPO的链接。然而LLM PPO跟传统的PPO还是有…

【工业机器视觉】基于深度学习的水表盘读数识别(4-训练与预测)

【工业机器视觉】基于深度学习的仪表盘识读(读数识别)&#xff08;3&#xff09;-CSDN博客 训练与预测 Ultralytics YOLO指的是由Ultralytics公司开发的一系列基于YOLO&#xff08;You Only Look Once&#xff09;架构的目标检测算法。YOLO是一种实时目标检测系统&#xff0c;它…

Qt Pro 常用配置

Part1: Summary Qt 开发中 Pro 文件的内容很多&#xff0c;需要不断的去学习和使用&#xff0c;现系统性的整理一下。以备录&#xff1b; 1.创建pro文件 1.1 步骤&#xff1a; Qt Creator--->New Project--->应用程序--->Qt Widgets Application--->名称为&…

ChatGPT生成测试用例的最佳实践(一)

前面介绍的案例主要展示了ChatGPT在功能、安全和性能测试用例生成方面的应用和成果。通过ChatGPT生成测试用例&#xff0c;测试团队不仅可以提升工作效率&#xff0c;还可以加快测试工作的速度&#xff0c;尽早发现被测系统中的问题。问题及早发现有助于提高软件的质量和用户满…

【从零开始入门unity游戏开发之——C#篇04】栈(Stack)和堆(Heap),值类型和引用类型,以及特殊的引用类型string

文章目录 知识回顾一、栈&#xff08;Stack&#xff09;和堆&#xff08;Heap&#xff09;1、什么是栈和堆2、为什么要分栈和堆3、栈和堆的区别栈堆 4、总结 二、值类型和引用类型1、那么值类型和引用类型到底有什么区别呢&#xff1f;值类型引用类型 2、总结 三、特殊的引用类…

欧科云链研究院:AI时代,如何证明“我是我”?

OKG Research&#xff5c;编辑 近日&#xff0c;OpenAI 发布了新模型 Sora。这是一款高性能的文本到多模态生成工具&#xff0c;支持从文本生成精细的图像和动态视频。 相较早先发布的视频样例&#xff0c;该功能目前已经可以由用户真实上手体验&#xff0c;目前由于服务过载…

【老白学 Java】日期 / 时间格式化

日期 / 时间格式化 文章来源&#xff1a;《Head First Java》修炼感悟。 本篇文章&#xff0c;老白把日期和时间的格式化参数进行了整理&#xff0c;方便以后查阅&#xff0c;更加详细的说明请参考 Java API 文档。 一、语法解释 %&#xff0c;必要参数&#xff0c;用于引用参…

说说你对java lambda表达式的理解?

大家好&#xff0c;我是锋哥。今天分享关于【说说你对java lambda表达式的理解?】面试题。希望对大家有帮助&#xff1b; 说说你对java lambda表达式的理解? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Java Lambda 表达式是 Java 8 引入的一项重要特性&#…

【roadMap】我转行软件测试的经历

软件测试这行咋样&#xff1f; 如果你简单了解过「软件测试工程师」这个岗位&#xff0c;就会知道它的基本特点&#xff1a; 待遇比开发低&#xff0c;比其他行业高入门丝滑&#xff0c;算是技术岗最简单的一类测试行业有细分领域&#xff1a;功能、性能、自动化… 每个行业…

[笔记] 编译LetMeowIn(C++汇编联编程序)过程

文章目录 前言过程下载源码vs2017 创建空项目 引入编译文件改项目依赖属性改汇编编译属性该项目还需注意编译运行 总结 前言 编译LetMeowin 项目发现是个混编项目&#xff0c;c调用汇编的程序&#xff0c;需要配置一下&#xff0c;特此记录一下 过程 下载源码 首先下载源码…