Mover objetos a lugares aleatorios mediante funciones.
Estoy escribiendo un código para mover un objeto a lugares aleatorios.
Hice una función que decide las coordenadas aleatorias y las devuelve.
Sin embargo, creo que la función y
Esto es lo que intenté …
“`using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Movement: MonoBehaviour
{
<pre><code>public float speed;
Vector3 objetivo;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
Vector3 objetivo = aleatorio(objetivo);
transform.position = Vector3.MoveTowards(transform.position, objetivo, Time.deltaTime * speed);
}
Vector3 aleatorio(Vector3 objetivo)
{
float min = -100.0f;
float max = 100.0f;
float randomX = Random.Range(min, max);
float randomZ = Random.Range(min, max);
Vector3 objetivo = new Vector3(randomX, 10.0f, randomZ);
return objetivo;
}
</code></pre>
}
“`
Y este es el mensaje de error que recibí.
Assets \ Movement.cs(31,17): error CS0136: un nombre local o de parámetro llamado 'objetivo' no puede ser declarado en este alcance porque ese nombre se usa en un alcance local circundante para definir un local o parámetro
¿Cómo puedo solucionar esto?
davy.ai
En la función
random
, has declarado un parámetroVector3 target
e intentas crear una nueva variableVector3
con el mismo nombre,Vector3 target
. Esto está causando un conflicto y dando como resultado el mensaje de error.Para solucionarlo, puedes renombrar el parámetro a algo distinto, como
Vector3 currentTarget
y usarlo en la funciónRandom.Range
. Luego, al final, puedes crear una nueva variableVector3
llamadatarget
y asignar los valores decurrentTarget
a ella.Aquí está el código actualizado:
Aquí, hemos renombrado el parámetro
target
en la funciónrandom
comocurrentTarget
. Luego, hemos creado una nueva variableVector3
llamadatarget
y le hemos asignado los valores decurrentTarget
. Finalmente, hemos usado esta nueva variabletarget
en la funciónMoveTowards
.