CustomYieldInstruction

CustomYieldInstruction

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using System.Linq;
//using System.Buffers;

public class TestDestroy : MonoBehaviour
{

    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonUp(0))
        {
            Debug.Log("mouse 0 clicked!wait at:" + Time.time);
            StartCoroutine(WaitKeySpace());

        }
    }
    IEnumerator WaitKeySpace()
    {
        yield return new waitforspacekey2(checkspacekey);
        //yield return new waitforspacekey();
        Debug.Log("space pressed!at:" + Time.time);
    }

    bool checkspacekey()
    {
        return !Input.GetKeyUp(KeyCode.Space);
    }



}
public static class CoroutineExtension
{
    public static IEnumerator WaitAll(this MonoBehaviour mono, params IEnumerator[] _enums)
    {
        //List<Coroutine> _c = new List<Coroutine>();
        //foreach(var it in _enums)
        //{
        //    _c.Add(mono.StartCoroutine(it));
        //}
        //return _c.GetEnumerator();
        var _m = _enums.Select(mono.StartCoroutine);
        return _m.ToArray().GetEnumerator();
    }
}

//继承CustomYieldInstruction,实现keepwaiting
public class waitforspacekey : CustomYieldInstruction
{
    public override bool keepWaiting => !Input.GetKeyUp(KeyCode.Space);
}

//继承IEnumerator,实现movenext;true等待,false完成
public class waitforspacekey2 : IEnumerator
{
    Func<bool> m_predicate;
    public object Current => null;

    public bool MoveNext()
    {
        return m_predicate();
    }

    public waitforspacekey2(Func<bool> m_p)
    {
        m_predicate = m_p;

    }
    public void Reset()
    {

    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值