Unity - A计划(一年有效期) 扫二维码继续学习 二维码时效为半小时

(66评价)
价格: 1299.00元
1对1 答疑即时回复7天无理由退款30天价保提问必答

服务保障

1对1 答疑

提供专属的一对一在线答疑,快速答疑解惑。

即时回复

及时响应学习咨询,帮助解决问题。

7天无理由退款

购买后7天内可申请无理由退款。

30天价保

购买后30天内如遇降价,可申请价保。

提问必答

对于提问做到有问必答,帮您扫清学习过程中的种种障碍

unity中的动画系统的问题
猫懒发起了问答2018-10-19
4
回复
590
浏览

人物在碰到物体的时候没有跳跃,直接穿过去了。

这是代码

public class Player : MonoBehaviour
{

    private Animator anim;
    private int speedRotateID = Animator.StringToHash("SpeedRotate");
    private int speedZID = Animator.StringToHash("SpeedZ");
    private int VaultID = Animator.StringToHash("Vault");
    private Vector3 matchTarget = Vector3.zero;

    // Use this for initialization
    void Start()
    {
        anim = GetComponent<Animator>();
    }

    // Update is called once per frame
    void Update()
    {
        anim.SetFloat(speedZID, Input.GetAxis("Vertical") * 4.1f);
        anim.SetFloat(speedRotateID, Input.GetAxis("Horizontal") * 126);
        bool isVault = false;
        if (anim.GetFloat(speedZID) > 3 && anim.GetCurrentAnimatorStateInfo(0).IsName("Locomotion"))
        {
            RaycastHit hit;
            if (Physics.Raycast(transform.position + Vector3.up * 0.3f, transform.forward, out hit, 4.5f))
            {
                if (hit.collider.tag == "Obstacle")
                {
                    if (hit.distance > 3)
                    {
                        Vector3 point = hit.point;
                        point.y = hit.collider.transform.position.y + hit.collider.bounds.size.y+0.1f;
                        matchTarget = point;
                        isVault = true;
                    }

                }
            }
        }
        anim.SetBool(VaultID, isVault);
        if (anim.GetCurrentAnimatorStateInfo(0).IsName("Vault"))
        {
            anim.MatchTarget(matchTarget, Quaternion.identity, AvatarTarget.LeftHand, new MatchTargetWeightMask(Vector3.one, 0), 0.38f, 0.5f);
        }
    }
}

然后之前没有用Matchtarger之前人物是可以跳跃的,就是之前这个代码

   void Update()
    {
        anim.SetFloat(speedZID, Input.GetAxis("Vertical") * 4.1f);
        anim.SetFloat(speedRotateID, Input.GetAxis("Horizontal") * 126);
        bool isVault = false;
        if (anim.GetFloat(speedZID) > 3 )
        {
            RaycastHit hit;
            if (Physics.Raycast(transform.position + Vector3.up * 0.3f, transform.forward, out hit, 4.5f))
            {
                if (hit.collider.tag == "Obstacle")
                {
                    if (hit.distance > 3)
                   
                        isVault = true;
                    

                }
            }
        }
        anim.SetBool(VaultID, isVault);

 

所有回复
发表回复
你还没有登录,请先 登录或 注册!