100 lines
2.1 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|
|
}
|