1

I am trying to make a basic controller engine. I made a bool variable called JumpWait to wait to be able to jump until touching ground. Here is my code:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TwoDController : MonoBehaviour
{

    public float speed;
    public int Jumps;
    public bool InAir = false;

    void OnCollisionEnter2D(Collision2D otherObj)
    {
        if (otherObj.gameObject.CompareTag("Ground"))
        {
            Jumps = 0;
        }
    }

    private void Update()
    {

        if (Jumps == 0)
        {
            InAir = false;
        }
        if (Input.GetKey("a"))
        {
            transform.Translate(Vector3.left * speed * Time.deltaTime);
        }

        if (Input.GetKey("d"))
        {
            transform.Translate(Vector3.right * speed * Time.deltaTime);
        }
        if (Input.GetKey("w"))
            Jumps += 1;
        {
            if (Jumps >= 1)
            {
                StartCoroutine("JumpWait");
                transform.Translate(Vector3.up * speed * Time.deltaTime);
            }
        }

    }
    IEnumerator JumpWait()
    {
        yield return (new WaitUntil(InAir = false));


    }
}

Could someone PLEASE help me out? i have been trying this for hours

double-beep
  • 5,031
  • 17
  • 33
  • 41
HiddenToad
  • 68
  • 10

1 Answers1

4

Welcome to StackOverflow!

Seems you need a little bit of help with what MethodName(Func<T>) means. Take a look at the code below:

    private bool inAir = false;
    
    //This is what your WaitUntil looks like: 
    public bool FakeWaitUntil(Func<bool> someMethod)
    {
        bool someVar = someMethod();
        return someVar;
    }
    
    //You need to create a method that returns bool
    public bool MyMethod()
    {
        return inAir;
    }
    
    public void UsageOfFakeUntil()
    {
        //This is how it is used:
        FakeWaitUntil(MyMethod);

        //Or a dirtier (IMHO) implementation using anonymous functions:
        FakeWaitUntil(() => { return inAir; });
    }

    

WaitUntil is expecting a method that returns a bool, or a delegate. It seems WaitUntil is expecting you to process something before taking action on it, in your case you might need to process InAir.

More profound information can be found here