How do I solve error: Operator '==' cannot be applied to operands of type 'method group' and 'int'

How do I solve error: Operator '==' cannot be applied to operands of type 'method group' and 'int'

当你用球破坏盒子时我有游戏你在平台上弹跳(标准 2d 游戏)。而且我有正在产卵的能量提升,它们是球的倍数,当球接触到楼下的墙壁时,它被摧毁了。我有一个程序,当球数乘以它时,它会设置球数 +1,但有一点不对。

舞会脚本:

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

public class ball2 : MonoBehaviour
{
private Rigidbody2D rb;
public GameObject ball;

[SerializeField]
private int forceOne = 10;

[SerializeField]
private int forceTwo = 15;
private float balls;
public float numBalls = 1;

void Start()
{
    rb = GetComponent<Rigidbody2D>();
    rb.AddForce(new Vector2(forceOne * 25f, forceTwo * 25f));
    balls = numBalls;
}

public void Copy()
{
    Instantiate(ball, this.transform.position, Quaternion.identity);
    balls++;
}

}

我正在尝试将其与我在平台 上的脚本联系起来是:

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

public class movement : MonoBehaviour
{
[SerializeField]
private float speed = 10f;
public int startBoxes = 120;
private int boxes;
private string MUL_TAG = "mul";

private float movementX;

private void Start()
{
    boxes = startBoxes;
}

private void Update()
{
    Movement();
}

public void Destroy()
{
    boxes--;                                            

    if (boxes <= 0)
        endGame();
}

private void endGame()
{
    SceneManager.LoadScene("level_");
}

private void Movement()
{
    movementX = Input.GetAxisRaw("Horizontal");
    transform.position += new Vector3 (movementX, 0f, 0f) * Time.deltaTime * speed;
}

private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.CompareTag(MUL_TAG))
    {
        ball2 PBDM = FindObjectOfType<ball2>();
        PBDM.Copy();
    }



}

public void balls()
{
    
    if (balls <= 0)
        SceneManager.LoadScene("loseScreen");

}

}

但是关于 balls 函数的最后一部分是一个错误:运算符 '<=' 不能应用于 'method group' 和 'int' 类型的操作数。 我试图将 int 更改为 float,但它不起作用。 所以我的观点是,当所有球都被摧毁时,你就输了。

P.S 我想知道这是不是:ball2 PBDM = FindObjectOfType(); PBDM 是你可以改变它还是它实际上是一个想法?例如:

ball2 TEXT = FindObjectOfType(); TEXT.Copy();

movement class 中的任何地方都没有声明变量 balls。那么,它试图与 <= 进行比较的是什么?好吧,您唯一使用该名称声明的是一个名为 balls 的方法。方法不是数字,它们是方法。

变量balls仅在'ball2'class中定义为私有变量。除了 'ball2' class 的那个实例之外,任何东西都无法访问它。作为旁注,如果您 运行 'Copy()' 在球上,每个新球将获得 'balls' 变量的单独实例。它们不会是相同的值。您可以创建一个游戏管理器预制件,然后制作该副本并跟踪球。这可能是解决此问题的更好、更标准的方法。有关于 Singletons 和 Game manager prefabs 的指南 like this one,但这里有一个例子:

public class GameManager : MonoBehaviour
{
    private static _instance = null;
    public static GameManager Instance
    { 
        get 
        {
            if (_instance == null)
            {
                _instance = this;
            }
            else
            {
                Destroy(gameObject);
            }

            return _instance;
        }
    }

    private int _balls;
    public int Balls 
    { 
        get => _balls;

        set
        {
            int oldValue = _balls;
            _balls = value;
            OnBallsChanged(oldValue);
        }
    }

    private void OnBallsChanged (int oldValue)
    {
        if (Balls <= 0)
        {
            SceneManager.LoadScene("loseScreen");
        }
    }
}