private void RenderAura() { if (_auraState == eAuraState.Creating) { _auraTime++; float scale = (float)_auraTime / AuraCreatingDuration; _auraTf.localScale = new Vector3(scale, scale, 1); float zAngle = AuraCreatingDuration * 1f / 15 * _auraTime - 0.5f * _auraTime * _auraTime * 1f / 15; _auraTf.localEulerAngles = new Vector3(0, 0, zAngle); if (_auraTime >= AuraCreatingDuration) { _auraTime = 0; _auraState = eAuraState.Normal; } } else if (_auraState == eAuraState.Normal) { _auraTime++; // 后一个数字t是周期,t帧为一个周期,前一个360为角度 // 通常顺序是 (_auraTime / t) * 360 float angle = _auraTime * 360f / 720; _auraTf.localEulerAngles = new Vector3(45f * Mathf.Sin(angle * Mathf.Deg2Rad), -45f * Mathf.Sin(angle * 0.5f * Mathf.Deg2Rad), _auraTime * 0.6f); } else if (_auraState == eAuraState.Disappearing) { _auraTime++; float scale = 1 - (float)_auraTime / AuraCreatingDuration; _auraTf.localScale = new Vector3(scale, scale, 1); float realTime = _auraTime + _auraDisappearTime; float angle = realTime * 360f / 360; _auraTf.localEulerAngles = new Vector3(-45f * Mathf.Sin(angle * Mathf.Deg2Rad), 45f * Mathf.Sin(angle * Mathf.Deg2Rad), realTime * 0.6f); if (_auraTime >= AuraDisappearingDuration) { _isShowAura = false; } } }
/// <summary> /// 显示魔法阵 /// </summary> /// <param name="isShow">显示、隐藏</param> /// <param name="ani">是否有出现、消失动画</param> public void ShowAura(bool isShow, bool ani) { if (isShow) { if (!ani) { _auraState = eAuraState.Normal; _auraTf.localScale = Vector3.one; _auraTime = 0; } else { _auraState = eAuraState.Creating; _auraTime = 0; } _isShowAura = isShow; } else { if (!_isShowAura) { return; } if (!ani) { _isShowAura = false; _auraTf.localScale = Vector3.zero; } else { _auraDisappearTime = _auraTime; _auraTime = 0; _auraState = eAuraState.Disappearing; } } }