@作者 : SYFStrive
目录
- 连击好处
- 实现功能
- 插件下载
- 引入命名空间
- 使用到的变量
- 初始化代码
- 完成连击值效果
- 完成连击分值效果
- 效果
连击好处
- 连击是指在游戏中进行持续的操作。 在FTG类、ARPG类等游戏中,有的游戏设有连击系统。由于连击衔接的时间间隔在系统上有一定的设定,所以一般而言,连击是需要一定的技巧的。所以,在某些游戏中,连击的衔接及次数是衡量触手与否的重要标准。
- 攻击是一个靠普攻发挥威力的特技,进行普攻才会触发连击,所以如果使用的战法漏气了,还有连击效果来弥补,效果依然还是很可观的。
实现功能
案例说明:通过UI实现连击效果 👉 通过携程模拟连击效果的时间间隔 👉 通过DOTween、LeanTween简单完成连击的动画
插件下载
引入命名空间
DOTween需要引入命名空间 、LeanTween不需要引入命名空间直接使用、如 👇
using System.Collections;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening;
使用到的变量
//分值
public int score { get; private set; }
[Header("===连击的值、时间间隔===")]
public float doubleScore;
private float intervalTime = 2;
private float lastTime;
[Space]
[Header("===连击的Spri、连击的Text===")]
public Image imageSpr;
public GameObject doubleScoreText;
[Space]
[Header("===连击分值效果===")]
[SerializeField] float fromScore;
[SerializeField] float toScore;
[SerializeField] float animationTime;
[SerializeField] Text scoreText;
初始化代码
public class ComboEffect : MonoBehaviour
{
private void Start()
{
score = 0;
lastTime = 0;
doubleScoreText.gameObject.SetActive(false);
}
private void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
DoubleHitDoubleScore();
}
}
}
完成连击值效果
#region 连击值效果
private void DoubleHitDoubleScore()
{
if (Time.time <= lastTime + intervalTime)
{
doubleScore++;
}
else
{
doubleScore = 0;
doubleScore++;
imageSpr.fillAmount = 1;
}
doubleScoreText.gameObject.SetActive(true);
doubleScoreText.transform.DOScale(Vector2.one * 3f, 0.2f).OnComplete(() => {
doubleScoreText.transform.DOScale(Vector2.one, 0.2f);
});
StartCoroutine(nameof(ImageFillAmountDoubleHit));
doubleScoreText.GetComponent<Text>().text =doubleScore * 1 + "连击";
lastTime = Time.time;
DoublehitScore();
}
IEnumerator ImageFillAmountDoubleHit()
{
float doubleValue = 1;
float currentScore = doubleScore;
while (doubleValue > 0)
{
if (currentScore == doubleScore)
{
doubleValue -= Time.deltaTime / intervalTime;
imageSpr.fillAmount = doubleValue;
}
else
{
StopCoroutine(nameof(ImageFillAmountDoubleHit));
StartCoroutine(nameof(ImageFillAmountDoubleHit));
}
yield return null;
}
doubleScore = 0;
doubleScoreText.gameObject.SetActive(false);
}
#endregion
完成连击分值效果
#region 连击分值效果
public void DoublehitScore()
{
fromScore = score;
toScore = fromScore + doubleScore * 100;
//参数:开始值、目标值、渐变的时间
LeanTween.value(fromScore, toScore,animationTime)
.setEase(LeanTweenType.easeInOutQuint)
.setOnUpdate((float _value) => { fromScore = _value; scoreText.text ="分值:"+fromScore.ToString("f6");});
score = (int)toScore;
}
#endregion