Unity3D 学习笔记(七) 举盾动画 与 防御姿态设置
2020-02-28 本文已影响0人
Never肥宅
添加盾牌模型
在这里插入图片描述和之前添加武器一样找到左前臂
在这里插入图片描述
IK Pass打勾后,引擎会调用OnAnimatorIK方法
添加新脚本来方便修改盾牌方向
public class LeftArmAnimFix : MonoBehaviour
{
public Vector3 a;
private Animator anim;
void Start(){
anim = GetComponent<Animator>();
}
void OnAnimatorIK()
{
//print("a");
Transform leftLowerArm = anim.GetBoneTransform(HumanBodyBones.LeftLowerArm);
leftLowerArm.localEulerAngles = a;
anim.SetBoneLocalRotation(HumanBodyBones.LeftLowerArm , Quaternion.Euler(leftLowerArm.localEulerAngles));
}
}
在这里插入图片描述
由于地板和盾牌碰撞影响人物翻滚动作,添加layer Weapon
在这里插入图片描述
去掉Weapon和其他层的碰撞
在这里插入图片描述
举盾动画添加
在这里插入图片描述添加Defense Layer
在这里插入图片描述
添加defense bool变量
在这里插入图片描述
先把Defense图层的Mask设置为之前做好的LeftHand,并且为了方便调试把Weight设为1
在这里插入图片描述
拖入动作并设置转换条件
在这里插入图片描述
通过defense变量可以控制是否举盾
defense = Input.GetKey(keyD);
添加获取按键并且将其发送到anim中
anim.SetBool("defense",pi.defense);
在这里插入图片描述
仿照之前添加攻击动作给两个状态添加状态机脚本
并添加对应呼唤的方法
public void OnDefenseEnter()
{
pi.inputEnabled = false;
//lockPlanar = true;
//print("on defense");
lerpTarget = 1.0f;
}
public void OnDefenseIdleEnter()
{
pi.inputEnabled = true;
//lockPlanar = false;
print("OnAttackIdle");
//anim.SetLayerWeight(anim.GetLayerIndex("Attack"),0.0f);
lerpTarget = 0f;
}
public void OnDefenseUpdate(){
//thrustVec = model.transform.forward * anim.GetFloat("attack1hAVelocity") * jabMultiplier;
anim.SetLayerWeight( anim.GetLayerIndex("Defense"), Mathf.Lerp(anim.GetLayerWeight(anim.GetLayerIndex("Defense")),lerpTarget,0.1f));
}
public void OnDefenseIdleUpdate(){
anim.SetLayerWeight( anim.GetLayerIndex("Defense"), Mathf.Lerp(anim.GetLayerWeight(anim.GetLayerIndex("Defense")),lerpTarget,0.1f));
}
实现了右键举盾动画