栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > Unity3D

【Unity】角色动画控制

Unity3D 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【Unity】角色动画控制

场景
  • 记录一下unity中的角色动画控制

  • 通常角色的动画都是通过Animator状态机进行状态间的切换的

  • 在状态机中,每个状态间的连线(Transitions)是通过以下4种条件触发的

  • Float,Int,Bool类型的参数是通过设置值进行修改,而Trigger比较特殊,set一次触发一次

在本案例中,控制角色动画
  • 其实比较简单
  • 移动和警觉的逻辑触发条件就写在移动的地方进行速度的判断(这里取消了垂直方向的速度,只判断水平方向的速度)
//下面用来计算水平方向的速度,控制动画
tmp_motionVector = motionVector;
tmp_motionVector.y = 0;
if (robotAnimationControler)
{
    robotAnimationControler.MoveSpeed = tmp_motionVector.magnitude ;
    robotAnimationControler.Alerted = robotAnimationControler.MoveSpeed > 0;//三目表达式可以忽略。。
}
  • 然后再在robotAnimationControler脚本中对状态机中的参数进行设值
/// 
/// 角色动画控制器
/// 
public class RobotAnimationControler : MonoBehaviour
{
    public Animator RobotAnimator;
    public float MoveSpeed;
    // 警惕,是移动的时候(敌人追击玩家的时候)
    public bool Alerted;
    public bool Death;

    private void Start()
    {
        RobotAnimator = this.GetComponentInChildren();
    }

    private void Update()
    {
        setParameters();
        if (Input.GetMouseButtonDown(0))
        {
            TriggerAttack();
        }        
        if (Input.GetMouseButtonDown(1))
        {
            TriggerOnDamaged();
        }
    }

    private void setParameters()
    {
        if (RobotAnimator == null) return;
        RobotAnimator.SetFloat("MoveSpeed", MoveSpeed);
        RobotAnimator.SetBool("Alerted", Alerted);
        RobotAnimator.SetBool("Death", Death);
    }

    private void TriggerAttack()
    {
        if (RobotAnimator == null) return;
        RobotAnimator.SetTrigger("Attack");
    }
    
    private void TriggerOnDamaged()
    {
        if (RobotAnimator == null) return;
        RobotAnimator.SetTrigger("OnDamaged");
    }
}
  • 最后再注意一下状态机中过度Transitions的判断条件,速度为多少的时候触发动画,调整一下即可
  • 其实还有很多细节,再之后再记录
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/900597.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号