在 Unity 中创建 2D 动画
要在 Unity 中创建 2D 动画,开发人员可以使用内置动画窗口和 Unity 动画器组件。这是入门的分步指南。
设置项目
- 打开 Unity 和 创建 一个新的 2D 项目或打开一个现有项目。
- 如果开始新项目,请将项目的模板设置为 2D。
导入精灵资源
- 可以使用 Sprite 编辑器在 Unity 中创建精灵,也可以从外部图像文件(例如 PNG 或 JPEG)导入精灵。
- 要在 Unity 中创建精灵,请转至 Assets 菜单,选择“创建”,然后选择“精灵”或“精灵渲染器”。然后就可以绘制或导入精灵图稿。
配置精灵动画
- 精灵准备就绪后,在“项目”窗口中选择精灵资源。
- 在检查器窗口中,确保纹理类型设置为 'Sprite (2D and UI)'。如果不是,请将其更改为 'Sprite (2D and UI)'。
- 单击“项目”窗口中的精灵资源以在“精灵编辑器”中将其打开。
- 使用 Sprite Editor 定义动画的各个 frames。如果需要,可以将精灵分割成多个子图像。编辑器还允许修改每个帧的枢轴点以控制精灵的位置。
- 保存在 Sprite 编辑器中所做的更改。
使用动画窗口创建动画
- 要打开“动画”窗口,请转至 'Window -> Animation'。
- 在“动画”窗口中,单击“创建”按钮以创建新的动画剪辑。
- 在“项目”窗口中选择动画剪辑,其属性将出现在“检查器”窗口中。
- 在检查器窗口中可以设置动画剪辑的长度、采样率和其他属性。
- 要创建关键帧,请将“动画”窗口中的播放头移动到特定的时间,并在“场景”或“层次结构”窗口中修改精灵的属性(例如,位置、比例、旋转等)。
- 在不同时间添加关键帧以创建流畅的动画。Unity 将自动在关键帧之间插入值。
设置动画师
- 在“场景”或“层次结构”窗口中选择精灵对象。
- 在 Inspector 窗口中,单击 Add Component 按钮并搜索 "Animator" 将 Animator 组件添加到对象中。
- 单击 Animator 组件中的 Create 按钮来创建新的 Animator Controller 资源。
- 将新创建的动画控制器分配给动画组件的控制器字段。
配置动画控制器
- 双击新创建的 Animator Controller 资源以在 Animator 窗口中将其打开。
- 在“动画器”窗口中,有一个“动画器控制器”图,它表示动画流程。
- 在动画器窗口中右键单击并选择 'Create State -> From New Clip' 或 'From Sprite Renderer' 以创建动画状态。
- 将之前在“动画”窗口中创建的动画剪辑拖放到相应的动画状态上。
- 通过单击一个状态并将箭头拖动到另一个状态来创建动画状态之间的转换。可以调整转换条件,例如时间、参数值或事件。
- 可以添加参数来控制转换,例如布尔值、整数或触发器。例如,可以有一个名为 "IsRunning" 的 bool 参数,它触发从空闲动画状态到运行动画状态的转换。
播放动画
- 在“场景”或“层次结构”窗口中选择精灵对象。
- 在 Inspector 窗口的 Animator 组件中,将创建的 Animator Controller 资源拖到 Controller 字段上。
- 按动画窗口中的 Play 按钮来测试和预览动画。
以编程方式控制动画
- 以编程方式控制动画需要从 script 访问 Animator 组件。
- 在脚本中,创建一个 Animator 类型的变量,并使用 'GetComponent<Animator>()' 获取对附加到 sprite 对象的 Animator 组件的引用。
- 然后可以使用动画器的函数和属性来触发转换、设置参数值或控制动画的播放。例如,调用 animator.SetBool("IsRunning", true) 将触发运行动画。
using UnityEngine;
public class AnimationController : MonoBehaviour
{
private Animator animator;
private void Start()
{
// Get a reference to the Animator component
animator = GetComponent<Animator>();
}
private void Update()
{
// Check for input or condition to trigger animations
if (Input.GetKeyDown(KeyCode.Space))
{
// Trigger a jump animation
animator.SetTrigger("Jump");
}
float moveInput = Input.GetAxis("Horizontal");
animator.SetFloat("Speed", Mathf.Abs(moveInput));
// Check if the character is grounded
bool isGrounded = IsGrounded();
// Set the "IsGrounded" parameter in the Animator
animator.SetBool("IsGrounded", isGrounded);
if (isGrounded && Input.GetKeyDown(KeyCode.C))
{
// Trigger a crouch animation
animator.SetBool("IsCrouching", true);
}
if (isGrounded && Input.GetKeyUp(KeyCode.C))
{
// Stop the crouch animation
animator.SetBool("IsCrouching", false);
}
}
private bool IsGrounded()
{
// Implement your own logic to check if the character is grounded
// For example, you can use raycasting or collision detection
// and return true if the character is touching the ground
// and false otherwise.
return false;
}
}
结论
这是使用内置工具在 Unity 中创建 2D 动画的基本概述。Unity 还支持更高级的技术,例如使用精灵表、反向运动学 (IK) 和编写自定义动画脚本 behaviors。根据具体要求和相关动画的复杂性探索这些选项。