自学内容网 自学内容网

四、人物动画代码控制

一、连接动画控制器

1、人物基本状态


待机;奔跑

二者之间切换需要一个Bool值(run)

当run为真时,进入奔跑状态;当run为假时,退回待机状态

2、使用代码控制

1、原理

在人物移动代码上,按下一个移动按键,则进行移动动画播放
松开移动按键,取消动画播放。

2、代码

public void Move()
{
//获取水平和垂直
InputH = Input.GetAxis("Horizontal");
InputV = Input.GetAxis("Vertical");
Direction = new Vector3(InputH, 0, InputV);

if (Direction.magnitude>=0.1f)//检测是否有玩家输入
{
//动画
Animator1.SetBool("Run",true);


移动
//Controller1.Move(Direction*MoveSpeed*Time.deltaTime);

//计算目标角度
float TargetAngle = Mathf.Atan2(Direction.x, Direction.z) * Mathf.Rad2Deg
+ Camera1.transform.eulerAngles.y;//弧度值转为角度值
  //平滑角度过渡
float Angle = Mathf.SmoothDampAngle(this.transform.eulerAngles.y, TargetAngle,
ref TurnSmooth, TurnTime);
//设置角色旋转
this.transform.rotation = Quaternion.Euler(0, Angle, 0);
//计算新的移动方向

Vector3 MoveDirection = Quaternion.Euler(0, TargetAngle, 0) * Vector3.forward;

//移动角色
Controller1.Move(MoveDirection * MoveSpeed * Time.deltaTime);
}
else
{
//动画部分
Animator1.SetBool("Run", false);
}

}

3、动画根运动

使用动画根运动,会导致人物在位移时出现闪现情况
取消勾选根运动,使用代码控制移动

注:使用动画根运动会平滑的进行过渡;但并不是所有的动画都支持根运动;

如果支持,动画在预览时,会出现一定的位移;

如果不支持,动画在预览时,会在原地进行动画播放

解决方法:

将人物身上的动画控制器移至人物的父物体上;

使Ucc和动画控制器和人物脚本在同一物体上挂载;

即可实现使用根运动进行动画播放;

注:如果Ucc和动画控制器不在一个物体上,动画在根运动时会出现UCC与人物模型脱离

二、人物连招

1、实现连招

原理:设置一个计数器,由0~3,一共四个动画,依次计数器加一,进行连招动画播放

瑕疵:播放完一个动画后,下一次进行攻击播放的动画是依然是原来的下一个

解决:计数器清零一下‘

public void DoAttack()
{
if (Input.GetKeyDown(KeyCode.Mouse0))
{
//普通攻击播放动画
if (ComboNum == 0)
{
Animator1.CrossFade("combo1", 0.1f);//跳转CrossFade

}
else if (ComboNum==1)
        {
Animator1.CrossFade("combo2", 0.1f);//跳转CrossFade

}
else if (ComboNum == 2)
{
Animator1.CrossFade("combo3", 0.1f);//跳转CrossFade

}
else
{
Animator1.CrossFade("combo4", 0.1f);//跳转CrossFade

}
//普通攻击连段
if (ComboNum < 3)
{
ComboNum = ComboNum + 1;
}
else
{
ComboNum = 0;
}

}
}

将计数器自增放置在if循环外面;

如果每一次都增加一次自增,会使时间复杂度提高

三、断点调试

在VS中下一个断点,选择附加到Unity中

unity中会弹出Debug页面,选择调试Debug,unity页面右下角标志会改变


原文地址:https://blog.csdn.net/akjhgi/article/details/142578188

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!