一、创建文件夹Prefabs(存放预制体)和Animations(存放动画相关)
-
给人物改个名字(Player),Add Component->Animator,把人物拖到Prefabs文件夹里
-
在Animations文件夹下建一个文件夹Animators,右键Create->Animator Controller(Player),然后拖给人物

-
Window->Animation->Animator打开窗口,右键Create State->From New Blend Tree(Locomotion),删除无用参数Blend

-
双击Locomotion进入,创建一个Float类型参数Speed,点击Blend Tree设置参数
- 将素材包里的动画拖到motion里
-
打开PlayerController脚本代码
private Animator anim;
void Awake()
{
anim = GetComponent<Animator>();
}
void Update()
{
SwitchAnimation();
}
/// <summary>
/// 切换动画函数
/// agent.velocity:人物的速度、sqrMagnitude将某某数值类型转化为float
/// </summary>
private void SwitchAnimation()
{
anim.SetFloat("Speed",agent.velocity.sqrMagnitude);
}
- 支线
当前playercontroller脚本代码
using UnityEngine;
using UnityEngine.AI;
public class PlayerController : MonoBehaviour
{
private NavMeshAgent agent;
private Animator anim;
void Awake()
{
//在Awake函数中初始化
agent = GetComponent<NavMeshAgent>();
anim = GetComponent<Animator>();
}
void Start()
{
MouseManger.Instance.OnMouseClicked += MoveToTarget;//将函数注册到事件中
}
void Update()
{
SwitchAnimation();
}
/// <summary>
/// 切换动画函数
/// agent.velocity:人物的速度、sqrMagnitude将某某数值类型转化为float
/// </summary>
private void SwitchAnimation()
{
anim.SetFloat("Speed",agent.velocity.sqrMagnitude);
}
/// <summary>
/// 因为要注册到OnMouseClick函数,所以函数参数类型也得一样
/// </summary>
/// <param name="target"></param>
public void MoveToTarget(Vector3 target)
{
agent.destination = target;
}
}
本文介绍了在Unity3D中如何创建和管理角色的动画与控制器。首先,创建Prefabs和Animations文件夹,用于分别存放预制体和动画资源。接着,为人物组件添加Animator,并将其保存为Prefab。在Animations文件夹下创建AnimatorController,配置人物的动画状态机。创建一个名为'Locomotion'的 BlendTree,并设置Speed参数。在PlayerController脚本中,实现根据角色速度切换动画的功能。此外,还展示了如何使用NavMeshAgent进行目标移动,并在事件中调用MoveToTarget函数。
7001

被折叠的 条评论
为什么被折叠?



