es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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 no están conectadas entre sí.
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?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    En la función random, has declarado un parámetro Vector3 target e intentas crear una nueva variable Vector3 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ón Random.Range. Luego, al final, puedes crear una nueva variable Vector3 llamada target y asignar los valores de currentTarget a ella.

    Aquí está el código actualizado:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class Movement : MonoBehaviour
    {
    
        public float speed;
    
        Vector3 target;
    
        // Start is called before the first frame update
        void Start()
        {
    
        }
    
        // Update is called once per frame
        void Update()
        {
            Vector3 newTarget = random(target);
            transform.position = Vector3.MoveTowards(transform.position, newTarget, Time.deltaTime * speed);
        }
    
        Vector3 random(Vector3 currentTarget)
        {
            float min = -100.0f;
            float max = 100.0f;
            float randomX = Random.Range(min, max);
            float randomZ = Random.Range(min, max);
            Vector3 target = new Vector3(randomX, 10.0f, randomZ);
    
            return target;
        }
    
    }
    

    Aquí, hemos renombrado el parámetro target en la función random como currentTarget. Luego, hemos creado una nueva variable Vector3 llamada target y le hemos asignado los valores de currentTarget. Finalmente, hemos usado esta nueva variable target en la función MoveTowards.

Comments are closed.