先随意创建一个游戏对象用于测试
获取一下SpriteRenderer组件,实现不同的蓄力改变它的颜色。
private bool isDown;
private float time;
private SpriteRenderer spriteRenderer;
void Start()
{
isDown = false;
spriteRenderer = GetComponent<SpriteRenderer>();
}
Test1方法检测鼠标状态,键盘同理
void Update()
{
Test1();
Timer();
}
void Test1()
{
if (Input.GetMouseButtonDown(0))
{
isDown = true;
Debug.Log("按下鼠标左键");
}
else if (Input.GetMouseButtonUp(0))
{
Debug.Log("松开鼠标左键");
isDown = false;
}
}
计时的逻辑处理,我们要实现蓄力时间0.5—3秒时为重击,伤害加成为100%—250%,低于0.5秒则为轻击。
/// <summary>
/// 计时逻辑处理方法
/// </summary>
void Timer()
{
if (isDown) //按下时开始计时
{
time += Time.deltaTime;
}
else if (!isDown && time > 0.5f) //蓄力完成&蓄力0.5秒以上
{
Debug.Log("本次蓄力时长:"+time);
//0.5—3
time = time > 3f ? time = 3 : time; //限制有效蓄力为0.5—3秒
Debug.Log("有效蓄力时长:"+time);
//0%-100%
float percentum = (time - 0.5f) / (3f - 0.5f) * 1f; //蓄力时长百分比 *1f可省略
Debug.Log("蓄力时长百分比:" + percentum);
//1—2.5
float damage = (2.5f - 1f) * percentum + 1f; //最终伤害加成
Debug.Log("释放重击");
Debug.Log("释放重击伤害加成:" + damage);
spriteRenderer.color = new Color32(255, 0, 0, 255); //重击时变为红色
time = 0;
}
else if (!isDown && time > 0 && time <= 0.5) //蓄力小于0.5秒
{
Debug.Log("本次蓄力时长:" + time);
Debug.Log("释放轻击");
spriteRenderer.color = new Color32(255, 255, 0, 255); //轻击时变为黄色
time = 0;
}
}
运行结果
总结:
求x-y之间a的值的百分比:
公式:(a-x)/(y-x)*100%
求x-y之间的百分比a的值:
公式:(y-x)*a+x