美文网首页
5.9IK动画和动画曲线

5.9IK动画和动画曲线

作者: 胤醚貔貅 | 来源:发表于2017-05-09 15:47 被阅读50次

    IK动画

    usingUnityEngine;

    usingSystem.Collections;

    publicclassPlayerIKScript:MonoBehaviour{

    private Animator animator;

    public  Transform  rightHandTarget;//右手子节点参考目标

    public  Transform  rightHand;//右手位置

    private bool  isActive;//是否开始IK动画

    voidStart( ){

    //得到动画的控制器组件

    animator=GetComponent<Animator>( );

    }

    voidUpdate( ){

    if(Input.GetKeyDown(KeyCode.C)){

    isActive=!isActive;

    }

    }

    //IK动画的回调方法---前提是IKPass必须勾选

    void  OnAnimatorIK(int LayerIndex ){

    if(animator){

    //设置骨骼的权重,1表示完整骨骼

    animator.SetIKPositionWeight(AvatarIKGoal.RightHand,1);

    animator.SetIKRotationWeight(AvatarIKGoal.RightHand,1);

    if(isActive){

    //设置骨骼的位置和旋转

    if(rightHandTarget){

    //设置右手根据目标点来旋转和移动父骨骼节点

    animator.SetIKPosition(AvatarIKGoal.RightHand,Vector3.Lerp(rightHand.position,

    rightHandTarget.position,0.5f));

    animator.SetIKRotation(AvatarIKGoal.RightHand,rightHandTarget.rotation);

    }

    }

    }

    }

    }

    usingUnityEngine;

    usingSystem.Collections;

    publicclassPlayerScript:MonoBehaviour{

    private Animator animator;

    //private int walk;

    //private int run;

    private int runTurn;

    //private int walkTurn;

    private CharacterController characterController;

    voidStart( ){

    //获取animator组件,使用该组件来控制动画状态

    animator=GetComponent<Animator>( ) ;

    characterController=GetComponent<CharacterController>( );

    //转换为hash值,效率更高

    //walk=Animator.StringToHash("Walk");

    //run=Animator.StringToHash("Run");

    runTurn=Animator.StringToHash("RunTurn");

    //walkTurn=Animator.StringToHash("WalkTurn");

    }

    voidUpdate(){

    ////从其他状态到walk状态

    //if(Input.GetKeyDown(KeyCode.W)){

    ////设置walk动画参数的值为1

    //animator.SetInteger(walk,1);

    //}

    //

    ////从walk状态到run状态

    //if(Input.GetKeyDown(KeyCode.R)){

    ////设置walk动画参数的值为2

    //animator.SetInteger(walk,2);

    //}

    ////从idel状态到run状态

    //if(Input.GetKeyDown(KeyCode.P)){

    ////设置run动画参数的值为1

    //animator.SetInteger("Run",1);

    //}

    ////从walk状态到idel状态

    //if(Input.GetKeyDown(KeyCode.I)){

    ////设置walk动画参数的值为0

    //animator.SetInteger(walk,0);

    //}

    //if(Input.GetKeyDown(KeyCode.R)){

    //if(animator.GetCurrentAnimatorStateInfo(0).IsName("Idle")){

    //

    //animator.SetInteger(run,1);

    //

    //

    //}

    //}

    ////判断当前是否在跑动状态

    //if(animator.GetCurrentAnimatorStateInfo(0).IsName("RunTurn")){

    //

    //animator.SetFloat(runTurn,Input.GetAxis("Horizontal"));

    //

    //}

    //点击W走动

    //if(Input.GetKeyDown(KeyCode.W)){

    //

    //if(animator.GetCurrentAnimatorStateInfo(0).IsName("Idle")){

    //

    //animator.SetInteger(walk,1);

    //}

    //}

    //

    //if(animator.GetCurrentAnimatorStateInfo(0).IsName("Walk")){

    //

    //animator.SetFloat(walkTurn,Input.GetAxis("Horizontal"));

    //}

    if(animator.GetCurrentAnimatorStateInfo(0).IsName("Move")){

    animator.SetFloat("Speed",Input.GetAxis("Vertical"));

    animator.SetFloat(runTurn,Input.GetAxis("Horizontal"));

    }

    if(Input.GetKeyDown(KeyCode.Space)){

    animator.SetTrigger("Roll");

    }

    //动画曲线

    //判断当前动画是否是滚动状态

    if(animator.GetCurrentAnimatorStateInfo(0).IsName("Roll")){

    //获取动画曲线的值

    characterController.height=animator.GetFloat("Height");

    characterController.center=newVector3(characterController.center.x,animator.GetFloat("Y"),characterController.center.z);

    }

    if(Input.GetKeyDown(KeyCode.J)){

    animator.SetTrigger("Jump");

    }

    if(Input.GetKeyDown(KeyCode.S)){

    //animator.SetTrigger("Shoot");

    animator.SetBool("Raise",true);

    }

    }

    }

    2D混合2D混合通常是指两个参数来控制字动画的混合,2D的混合也可以分为三种不同模式,不同的模式下不同的应用场合,他们的区别在于计算每个片段影响的具体方式,下面来详解一下:

    2Dsimple directional (2D简单定向模式下),这种混合模式适用于所有的动画都具有一定的运动方向,但其中任何两段动画运动方向都不相同的情形,例如,向前走,向后走,向左走和向右走,在次模式下,每一个方向上都不应存在多段动画,例如你想前走和向右跑是不能同时存在的,特别的,此时还可以存在一段处于(0,0)位置的特殊动画,例如idle状态,当然也可以不存在。2Dfreeform directional (2D自由定向模式),这种混合模式同样适用于所有的动画都具有一定的运动方向的情形,但是在同一方向上可以存在多段动画,例如向前走和向前跑可以同时存在,特别的,在此模式下,必须存在一段(0,0)位置的动画,例如idle状态。

    2Dfreeform Cartesian(2D自由笛卡尔模式),这种混合模式使用于动画部确定运动方向的情形,例如向左走然后又想右转,向前跑然后右转,在此模式下,X参数和Y参数可以代表不同的含义,例如角速度和线速度。

    相关文章

      网友评论

          本文标题:5.9IK动画和动画曲线

          本文链接:https://www.haomeiwen.com/subject/bpxitxtx.html