前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Unity-黑暗之魂复刻-计时类

Unity-黑暗之魂复刻-计时类

作者头像
祝你万事顺利
发布2019-06-05 17:11:23
4430
发布2019-06-05 17:11:23
举报
文章被收录于专栏:Unity游戏开发Unity游戏开发

1.在按钮按下后有一段时间可以在接受一次按钮 变量: duration 延长时间长度 elapsedTime已经延长时间 STATE状态

代码语言:javascript
复制
public class MyTimer  {
    //Timer计时多长
    public float duration = 1.0f;

    private float elapsedTime = 0;
    public enum STATE
    {
        IDLE,
        RUN,
        FINISHED
    }
    public STATE state;

    public void Tick()
    {
        switch (state)
        {
            case STATE.IDLE:

                break;
            case STATE.RUN:
                elapsedTime += Time.deltaTime;
                if (elapsedTime >= duration)
                {
                    state = STATE.FINISHED;
                }
                break;
            case STATE.FINISHED:

                break;
            default:
                Debug.Log("MyTimer Error");
                break;
        }
    }

    public void Go()
    {
        elapsedTime = 0;
        state = STATE.RUN;
    }
}

2.DoubleTigger在上面的基础上给Button加一个计时器,在ButtonOnReleased的时候,开始计时,直到extendingDurartion结束,加上OnPressing时间都属于DoubleTrigger检测时间范围,在extendingDuration中&&检测到了onPressed,那就是触发了DoubleTrigger。

3.LongPress在按下后进行计时,在一段时间后才将STATE设置为RUN。

在Button中设置IsExtending、IsDelaying两个信号

代码语言:javascript
复制
public class MyButton {
    public bool IsPressing = false;
    public bool OnPressed = false;
    public bool OnReleased = false;
    public bool IsExtending = false;
    public bool IsDelaying = false;

    public float extendingDuration = 0.15f;
    public float delayingDuration = 0.15f;

    private bool curState = false;
    private bool lastState = false;

    private MyTimer extTimer = new MyTimer();
    private MyTimer delayTimer = new MyTimer();

    public void Tick(bool input)
    {
        extTimer.Tick();
        delayTimer.Tick();

        curState = input;
        IsPressing = curState;
        OnPressed = false;
        OnReleased = false;
        IsExtending = false;
        IsDelaying = false;

        if (curState != lastState)
        {
            if(curState == true)
            {
                OnPressed = true;
                StartTimer(delayTimer, delayingDuration);
            }
            else
            {
                OnReleased = true;
                StartTimer(extTimer, extendingDuration);
            }
        }
        lastState = curState;
        if(extTimer.state == MyTimer.STATE.RUN)
        {
            IsExtending = true;
        }
        if(delayTimer.state == MyTimer.STATE.RUN)
        {
            IsDelaying = true;
        }
    }

    private void StartTimer(MyTimer myTimer,float duration)
    {
        myTimer.duration = duration;
        myTimer.Go();
    }
}

以下将3个动作融合到了一个按键上: 跑的设置: A按下并且不在Delaying,或者在Extending

代码语言:javascript
复制
 run = (buttonA.IsPressing && !buttonA.IsDelaying) || buttonA.IsExtending;

翻滚设置: A松开并且A在Delaying范围

代码语言:javascript
复制
roll = buttonA.OnReleased && buttonA.IsDelaying;

跳跃设置: 在Extending并且按下A

代码语言:javascript
复制
jump = buttonA.OnPressed && buttonA.IsExtending;
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.06.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档