一、创建文件夹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();
}
///
/// 切换动画函数
/// agent.velocity:人物的速度、sqrMagnitude将某某数值类型转化为float
///
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();
}
///
/// 切换动画函数
/// agent.velocity:人物的速度、sqrMagnitude将某某数值类型转化为float
///
private void SwitchAnimation()
{
anim.SetFloat("Speed",agent.velocity.sqrMagnitude);
}
///
/// 因为要注册到OnMouseClick函数,所以函数参数类型也得一样
///
///
public void MoveToTarget(Vector3 target)
{
agent.destination = target;
}
}
- 上一篇:Unity3D实战【七】Cinemachine & Post Processing 摄像机跟踪和后处理
- 下一篇:Unity3D实战【九】Shader Graph 遮挡剔除