1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- using TMPro;
- using UnityEngine;
- namespace UnityUIPlayables
- {
- public class TextMeshProUGUISpacingMixer
- {
- private float _blendedCharacter;
- private float _blendedLine;
- private float _blendedParagraph;
- private float _blendedWord;
- private float _totalWeight;
- public void SetupFrame()
- {
- _blendedCharacter = 0.0f;
- _blendedLine = 0.0f;
- _blendedWord = 0.0f;
- _blendedParagraph = 0.0f;
- _totalWeight = 0.0f;
- }
- public void Blend(TextMeshProUGUIAnimationValue.SpacingValue startValue,
- TextMeshProUGUIAnimationValue.SpacingValue endValue, float inputWeight, float progress)
- {
- _blendedCharacter += Mathf.Lerp(startValue.Character, endValue.Character, progress) * inputWeight;
- _blendedLine += Mathf.Lerp(startValue.Line, endValue.Line, progress) * inputWeight;
- _blendedWord += Mathf.Lerp(startValue.Word, endValue.Word, progress) * inputWeight;
- _blendedParagraph += Mathf.Lerp(startValue.Paragraph, endValue.Paragraph, progress) * inputWeight;
- _totalWeight += inputWeight;
- }
- public void ApplyFrame(TextMeshProUGUI binding)
- {
- if (_totalWeight == 0)
- {
- return;
- }
- _blendedCharacter += binding.characterSpacing * (1f - _totalWeight);
- _blendedLine += binding.lineSpacing * (1f - _totalWeight);
- _blendedWord += binding.wordSpacing * (1f - _totalWeight);
- _blendedParagraph += binding.paragraphSpacing * (1f - _totalWeight);
- binding.characterSpacing = _blendedCharacter;
- binding.lineSpacing = _blendedLine;
- binding.wordSpacing = _blendedWord;
- binding.paragraphSpacing = _blendedParagraph;
- }
- }
- }
|