¿Cómo resuelvo el error? El operador ‘==’ no se puede aplicar a los operandos de tipo ‘grupo de métodos’ e ‘int’
– UnityAssets3Free
buenas , me llamo jorge y hoy os traigo
nueva pregunta curiosa
Tengo un juego cuando estás destruyendo cajas con la bruja de la pelota, estás rebotando con la plataforma (juego estándar en 2D). Y tengo power-ups que van generando y multiplican la cantidad de bolas y cuando la bola toca una pared que está abajo, se destruye. Tengo un programa en el que cuando se multiplica el número de bolas establece el número de bolas +1, pero una cosa no funciona bien.
GUIÓN EN LA PELOTA:
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++;
y estoy tratando de conectar esto con mi script en la plataforma que es:
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");
pero en esta última parte de la función de bolas ocurre un error: El operador ‘<=’ no se puede aplicar a operandos de tipo ‘grupo de métodos’ e ‘int’. Intenté cambiar int a float pero no funciona. Así que mi punto es que cuando se destruyen todas las bolas, pierdes.
PD: quiero saber si esto: ball2 PBDM = FindObjectOfType(); ¿Es PBDM, puedes cambiarlo o es realmente un pensamiento? Por ejemplo:
bola2 TEXTO = FindObjectOfType(); TEXTO.Copiar();
2 respuestas 2
La variable balls
simplemente se define como una variable privada dentro de la clase ‘ball2’. Esto no es accesible para nada excepto para esta instancia de la clase ‘ball2’. Como nota al margen, si ejecuta ‘Copiar ()’ en la pelota, cada nueva pelota obtendrá una instancia separada de la variable ‘bolas’. No tendrán el mismo valor. Puede crear un administrador de juegos prefabricado y hacer esa copia y realizar un seguimiento de las bolas. Esta es probablemente la forma mejor y más estándar de resolver este problema. Hay guías sobre prefabricados singletons y game manager. como estepero aquí hay un ejemplo:
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");
no hay variable balls
declarado en cualquier parte del movement
clase. Entonces, ¿qué estás tratando de comparar con <=
? Bueno, lo único que declaraste con ese nombre es un método llamado balls
. Los métodos no son números, son métodos.
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
sin mas,espero que te halla servido