Пример #1
0
        // Update is called once per frame
        void Update()
        {
            if (blendShapeProxy == null)
            {
                return;
            }

            bool disableBlink = false;

            // 目線の操作
            _lookAtHead.RaiseYawPitchChanged(-Input.GetAxis("Horizontal") * maxEyeYaw, Input.GetAxis("Vertical") * maxEyePitch);

            // 瞬き中は操作不能に
            if (blendShapeProxy.GetValue(BlendShapePreset.Blink) != 0)
            {
                return;
            }

            foreach (var element in elements)
            {
                var targetWeight = element.GetInputValue();
                var weight       = element.value;

                if (targetWeight > weight)
                {
                    weight = Mathf.Clamp(weight + 1 * Time.deltaTime * element.speed, 0, 1);
                }
                else if (targetWeight < weight)
                {
                    weight = Mathf.Clamp(weight +  -1 * Time.deltaTime * element.speed, 0, 1);
                }

                if (weight != 0)
                {
                    disableBlink = true;
                }
                element.value = weight;
            }

            LayerdBlendUtility.Blend(ref elements);

            foreach (var element in elements)
            {
                blendShapeProxy.SetValue(element.blendShapeName, element.value);
            }

            // 瞬き抑制
            if (disableBlink)
            {
                blinker.enabled = false;
            }
            else
            {
                blinker.enabled = true;
            }
        }