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");
}
}
}
当你用球破坏盒子时我有游戏你在平台上弹跳(标准 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");
}
}
}