Пример #1
0
 void OnAnimatorIK()
 {
     if (_isActive)
     {
         if (_ikObject == null)
         {
             _isActive      = false;
             _callBack      = null;
             _ikObject      = null;
             _currentWeight = 0;
         }
         else
         {
             if (_ikObject.nodes != null)
             {
                 for (int i = 0; i < _ikObject.nodes.Length; i++)
                 {
                     animator.SetIKPositionWeight(_ikObject.nodes[i].goal, _currentWeight);
                     animator.SetIKRotationWeight(_ikObject.nodes[i].goal, _currentWeight);
                     animator.SetIKPosition(_ikObject.nodes[i].goal, _ikObject.transform.TransformPoint(_ikObject.nodes[i].position));
                     animator.SetIKRotation(_ikObject.nodes[i].goal, _ikObject.transform.rotation * Quaternion.Euler(_ikObject.nodes[i].position));
                 }
             }
             if (_ikObject.hints != null)
             {
                 for (int i = 0; i < _ikObject.hints.Length; i++)
                 {
                     animator.SetIKHintPositionWeight(_ikObject.hints[i].hint, _currentWeight);
                     animator.SetIKHintPositionWeight(_ikObject.hints[i].hint, 0f); // исправить потом _ikObject.transform.TransformPoint(_ikObject.nodes[i].position))
                 }
             }
         }
     }
 }
Пример #2
0
    // Активирует IK

    public void activate(Call callBack, IKObject ikObject)
    {
        _callBack = callBack;
        _ikObject = ikObject;
        _isActive = true;
        StartCoroutine(upWeight());
    }
Пример #3
0
    void IKCompleted()
    {
        IKObject obj = ik.ikObject;

        ik.unactivate();

        IAction actionObj = obj as IAction;

        if (actionObj != null)
        {
            actionObj.action();
        }
    }
Пример #4
0
 IEnumerator downWeight()
 {
     for (float i = 1; i > 0f; i -= Time.deltaTime)
     {
         _currentWeight = i;
         yield return(null);
     }
     _isActive      = false;
     _ikObject      = null;
     _currentWeight = 0;
     if (_callBack != null)
     {
         _callBack();
     }
     _callBack = null;
 }
Пример #5
0
    void Update()
    {
        RaycastHit hit;

        if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, .45f, mask))
        {
            IKObject ikObject = hit.collider.gameObject.GetComponent <IKObject>();
            if (ikObject != null)
            {
                if (Input.GetKeyDown(KeyCode.E))
                {
                    ik.activate(IKCompleted, ikObject);
                }
            }
        }
    }
Пример #6
0
    //Деактивируем IK

    public void unactivate(bool isFast, Call callBack)
    {
        if (isFast)
        {
            _isActive      = false;
            _ikObject      = null;
            _currentWeight = 0;
            if (_callBack != null)
            {
                _callBack();
            }
            _callBack = null;
        }
        else
        {
            _callBack = callBack;
            StartCoroutine(downWeight());
        }
    }