目录
一、实现步骤
(一)准备资源与创建场景
- 导入上节课使用的人物资源,选择合适的人物模型。
- 创建一个平面作为地面,确保视角中 x 轴代表右边,给平面重置位置并移走灯。
- 将导入的角色放置在地面上。
- 创建一个材质,调整地面亮度使其不那么刺眼。
(二)创建脚本与获取按键输入
- 创建一个名为 “do_there_are_control” 的脚本并挂载到角色模型上。
- 在脚本中获取水平轴和垂直轴的按键输入:
float horizontalInput = Input.GetAxis("Horizontal");
float verticalInput = Input.GetAxis("Vertical");
Vector3 movementVector = new Vector3(horizontalInput, 0, verticalInput);
(三)角色旋转设置
- 根据获取的向量来设置角色旋转,使用四元数实现旋转:
Quaternion targetRotation = Quaternion.LookRotation(movementVector);
transform.rotation = targetRotation;
(四)动画控制器设置
- 为角色创建一个动画器控制器 “blair_control” 并挂载到角色上。
- 将默认站立动画和跑步动画拖入控制器中。
- 创建一个布尔类型的参数 “is_run” 用于控制动画切换,设置从站立到跑步以及从跑步到站立的条件和过渡。
(五)通过代码控制动画播放
- 在脚本中获取动画组件:
Animator animator;
void Start()
{
animator = GetComponent<Animator>();
}
- 根据按键按下与否来设置动画播放:
if (movementVector!= Vector3.zero)
{
animator.SetBool("is_run", true);
}
else
{
animator.SetBool("is_run", false);
}
(六)实现角色移动
- 使用
Translate
方法实现角色朝前方移动:
transform.Translate(Vector3.forward * 2 * Time.deltaTime);
(七)调整动画过渡效果
- 选择动画器,调整过渡时间参数。如果希望动画切换更流畅但有一定延迟,可以设置过渡时间为 0.2 秒左右;如果希望更跟手但动画切换生硬,可将过渡时间设为 0。
二、完整 Unity 代码示例
using UnityEngine;
public class do_there_are_control : MonoBehaviour
{
private float horizontalInput;
private float verticalInput;
private Vector3 movementVector;
private Animator animator;
void Start()
{
animator = GetComponent<Animator>();
}
void Update()
{
horizontalInput = Input.GetAxis("Horizontal");
verticalInput = Input.GetAxis("Vertical");
movementVector = new Vector3(horizontalInput, 0, verticalInput);
Quaternion targetRotation = Quaternion.LookRotation(movementVector);
transform.rotation = targetRotation;
if (movementVector!= Vector3.zero)
{
animator.SetBool("is_run", true);
}
else
{
animator.SetBool("is_run", false);
}
transform.Translate(Vector3.forward * 2 * Time.deltaTime);
}
}
通过以上步骤和代码,就可以在 Unity 中实现使用按键控制角色运动并播放相应动画的功能。在实际操作中,可以根据需求进一步调整和优化。