// *********************************************************************** // Assembly : Game // Author : Kimch // Created : 2020-05-20 // Description : // Last Modified By : // Last Modified On : // *********************************************************************** // // // *********************************************************************** using UnityEngine; namespace G { /// /// 旋转 /// public class Ef_twirl : MonoBehaviour { private int _uvAnimationTileX = 4; private int _uvAnimationTileY = 4; private int _framesPerSecond = 180; private int _index; private int _lastIndex; private float _startTime; private int _lastFrame; private bool _isLoop; private Renderer _renderer; private Vector2 _size; private void Awake() { _renderer = this.GetComponentInChildren(); } private void Start() { _startTime = 0f; _lastFrame = _uvAnimationTileX * _uvAnimationTileY; _renderer.enabled = false; } public void TwirlOn(int x, int y, int fps, bool loop) { _uvAnimationTileX = x; _uvAnimationTileY = y; _framesPerSecond = fps; _isLoop = loop; _startTime = 0f; _lastFrame = _uvAnimationTileX * _uvAnimationTileY; _size = new Vector2(1f / _uvAnimationTileX, 1f / _uvAnimationTileY); _renderer.enabled = true; } public void TwirlOff() { _renderer.enabled = false; } private void Update() { if (!_renderer.enabled) { return; } _startTime += Time.deltaTime; _index = (int)(_startTime * _framesPerSecond); if (_isLoop) { _index %= _lastFrame; } if (_index != _lastIndex) { if (_index >= _lastFrame) { _renderer.enabled = false; _lastIndex = -1; } int _uIndex = _index % _uvAnimationTileX; int _vIndex = _index / _uvAnimationTileX; var _offset = new Vector2(_uIndex * _size.x, 1f - _size.y - _vIndex * _size.y); _renderer.material.mainTextureOffset = _offset; _renderer.material.mainTextureScale = _size; _lastIndex = _index; } } } }