2025-05-18 01:04:31 +08:00

100 lines
2.1 KiB
C#

// ***********************************************************************
// Assembly : Game
// Author : Kimch
// Created : 2020-05-20
// Description :
// Last Modified By :
// Last Modified On :
// ***********************************************************************
// <copyright file= "Ef_twirl" company="DefaultCompany"></copyright>
// <summary></summary>
// ***********************************************************************
using UnityEngine;
namespace G
{
/// <summary>
/// 旋转
/// </summary>
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<Renderer>();
}
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;
}
}
}
}