hola que tal gente, el problema es el siguiente:
RaycastHit hit; embedded statement can't be a declaration or labeled statement esto que esta al lado de RayCastHit hit; es lo que me aparece, el problema es que yo tengo que darle el nombre al RaycastHit para referenciarlo en otra parte del codigo.
void Update()
{
if ( (Ammunition >= 1) && Input.GetMouseButtonDown(0) )
RaycastHit hit;
Ammunition--;
Debug.Log (Ammunition);
if(Physics.Raycast(Camera.main,transform.position, Camera.main.transform.forward,out hit)){
Debug.Log(hit.collider.name);
}
}
}
Bueno ahi esta el resto del codigo menos el int ammunition y el range Range que no los puse para alargar la lectura.
Si alguien sabe como hacer para que pueda solucionarlo seria de mucha ayuda ya que lo busque y no encontre nada, ni en el Unity Api.
Cita de: DerKaiser date=1548203917RaycastHit hit; embedded statement can't be a declaration or labeled statement
...
if ( (Ammunition >= 1) && Input.GetMouseButtonDown(0) )
RaycastHit hit;
Hola, bastante fácil, lo que pasa es lo siguiente:
Esto:
if(A)
B;
... es lo mismo que :
if(A)
{
B;
}
con la particularidad que
el if de arriba solo toma una instrucción de argumento, es como un "if rapidito" (si se da esto hacé esto). Si la única acción que tenés la usas para declarar una variable (por valor o por referencia) te va a dar error, ya que no la vas a reusar el líneas posteriores (solamente tenés una chance de hacer lo tuyo, una sola línea). En cambio si agregás las llaves no pasa nada,
incluso si lo dejás igual (te da un warning de que estás declarando/definiendo y no usandolo). Ejemplo:
// MAL -> Error
if(m_speed > 2)
float b = 2;
// BIEN -> Warning
if(m_speed > 2)
{
float b = 2;
}
// BIEN (sin sentido pero bien)
if(m_speed > 2)
{
float b = 2;
m_speed *= b;
}
OSea, agregale las llaves al if si querés salir del error, pero si lo dejás tal cual va a estar al pedo igual, va a vivir dentro de if y nada más. Te conviene declararlo antes, como miembro de la clase o previo a la instrucción que lo va a usar.
... probablemente se te haya olvidado la llave al final del if ??
Cita de: lightbug date=1548219997Hola, bastante fácil, lo que pasa es lo siguiente:
Esto:
if(A)
B;
... es lo mismo que :
if(A)
{
B;
}
con la particularidad que el if de arriba solo toma una instrucción de argumento, es como un "if rapidito" (si se da esto hacé esto). Si la única acción que tenés la usas para declarar una variable (por valor o por referencia) te va a dar error, ya que no la vas a reusar el líneas posteriores (solamente tenés una chance de hacer lo tuyo, una sola línea). En cambio si agregás las llaves no pasa nada, incluso si lo dejás igual (te da un warning de que estás declarando/definiendo y no usandolo). Ejemplo:
// MAL -> Error
if(m_speed > 2)
float b = 2;
// BIEN -> Warning
if(m_speed > 2)
{
float b = 2;
}
// BIEN (sin sentido pero bien)
if(m_speed > 2)
{
float b = 2;
m_speed *= b;
}
OSea, agregale las llaves al if si querés salir del error, pero si lo dejás tal cual va a estar al pedo igual, va a vivir dentro de if y nada más. Te conviene declararlo antes, como miembro de la clase o previo a la instrucción que lo va a usar.
... probablemente se te haya olvidado la llave al final del if ??
Gracias, si se me olvidó pasará más.
Todos los IF estan bien, el problema que presentas es ASIGNACIÓN de VARIABLES que no se están utilizando.
La variable "b" la declaras dentro del bloque del IF, por lo que si no la utilizas en el mismo ámbito entonces te dará un Warning. "La variable 'b' se asignó pero nunca se uso"
IF, FOR, WHILE, FOREACH y algunas características más no requieren delimitar el bloque (BLOQUE: es todo aquello que se encierra en 2 llaves), es más los bloques funcionan por sí solo. Siempre y cuando estemos hablando de una línea.
//Ejemplo 1 - Sin bloque
if (a > b)
Debug.Log("A win");
//Ejemplo 2 - Con Bloque
if (a > b)
{
Debug.Log("A win");
}
Ejemplo de USO de bloques en cualquier lugar.
private void Update()
{
float c = 1;
//BLOQUE 1
{
float a = 0;
float b = 1;
Debug.Log("Bloque 1 => " a + b * c);
c++;
}
//BLOQUE 2
{
float a = 0;
float b = 1;
Debug.Log("Bloque 2 => " a - b * c);
}
}
La variable C es local, quiere decir que solo puede ser utilizada dentro de la función UPDATE. Las variables a y b, pertenecen a un bloque de código, gracias a esto podes tener lógicas separadas dentro de una misma función.
Saludos.
Cita de: francoe1 date=1548372442Todos los IF estan bien, el problema que presentas es ASIGNACIÓN de VARIABLES que no se están utilizando.
La variable "b" la declaras dentro del bloque del IF, por lo que si no la utilizas en el mismo ámbito entonces te dará un Warning. "La variable 'b' se asignó pero nunca se uso"
IF, FOR, WHILE, FOREACH y algunas características más no requieren delimitar el bloque (BLOQUE: es todo aquello que se encierra en 2 llaves), es más los bloques funcionan por sí solo. Siempre y cuando estemos hablando de una línea.
//Ejemplo 1 - Sin bloque
if (a > b)
Debug.Log("A win");
//Ejemplo 2 - Con Bloque
if (a > b)
{
Debug.Log("A win");
}
Ejemplo de USO de bloques en cualquier lugar.
private void Update()
{
float c = 1;
//BLOQUE 1
{
float a = 0;
float b = 1;
Debug.Log("Bloque 1 => " a + b * c);
c++;
}
//BLOQUE 2
{
float a = 0;
float b = 1;
Debug.Log("Bloque 2 => " a - b * c);
}
}
La variable C es local, quiere decir que solo puede ser utilizada dentro de la función UPDATE. Las variables a y b, pertenecen a un bloque de código, gracias a esto podes tener lógicas separadas dentro de una misma función.
Saludos.
Entendido,, todo la iinformacion es ayuda.
Sal
u2.