Resultados 1 al 2 de 2

Sugerencias script csharp Unity

  1. #1
    Fecha de ingreso
    Jan 2016
    Mensajes
    27

    Ayuda script csharp Unity

    Buenos días a todos.

    Me gustaría qué algún programador de la sala me ayudará para añadir un destroy este script, para qué cada vez que pulse uno de los diferentes botones que hay se destruyera el gameobject que hay en pantalla. Es que soy bastante limitadita con la programación y llevo y días y días encalláda
    Gracias de antemano public class gUIScript : MonoBehaviour {
    BuildManager bm;
    Button cube, cylinder;
    bol buildopen = false;
    // Use this for initialization
    void Start () {
    bm = GameObject. Find(BuildManager). GetComponent<BuildManager>();
    Canvas cv = GameObject. Find(Canvas). GetComponent<Canvas>();
    cube = cv, transform. FindChild(CubeButton), gameObject. GetComponent<Button>();
    cylinder = cv, transform. FindChild(CylinderButton), gameObject. GetComponent<Button>();
    }
    public void ActiveteBuilding(Button pressedBtn)
    {
    if (pressedBtn, name == BuildButton)
    {
    if (buildopen)
    {
    //bm. DeactivateBuildingmode();
    cube, gameObject. SetActive(false);
    cylinder, gameObject. SetActive(false);
    pressedBtn, image, color = Color.white;
    buildopen = false;
    }
    else
    {
    //bm. ActivateBuildingmode();
    cube, gameObject. SetActive(true);
    cylinder, gameObject. SetActive(true);
    pressedBtn, image, color = new Color(255, 0, 255);
    buildopen = true;
    }
    }
    else
    {
    switch (pressedBtn, name)
    {
    case CubeButton:
    bm. SelectBuilding(0);
    break;
    case CylinderButton:
    bm. SelectBuilding(1);
    break;.
    }
    pressedBtn, image, color = new Color(155, 120, 255);
    bm. ActivateBuildingmode();.
    }
    }
    void Update()
    {
    if (buildopen)
    {
    if (.bm, isBuildingEnabled)
    {
    if (cube, image, color.= Color.white)
    cube, image, color = Color.white;
    if (cylinder, image, color.= Color.white)
    cylinder, image, color = Color.white;
    }
    }
    }
    }.

  2. #2
    Fecha de ingreso
    Dec 2025
    Mensajes
    0
    Para añadir la funcionalidad de destruir el GameObject en pantalla al pulsar un botón, necesitas modificar tu script. Primero, debes tener una referencia al GameObject que quieres destruir. Puedes obtenerlo de diferentes maneras, como asignarlo desde el Inspector o buscarlo por etiqueta.

    Suponiendo que el GameObject a destruir esté en pantalla y sea único, podrías usar una etiqueta. Asigna una etiqueta como "ObjetoADestruir" a tu GameObject en el Inspector de Unity.

    Dentro de tu función public void ActivateBuilding(Button pressedBtn), en el bloque del switch, añade una línea para destruir el objeto. Te recomiendo hacerlo justo después de seleccionar el edificio o al principio de la función, dependiendo de tu lógica.

    Aquí tienes las modificaciones clave. Añade una variable privada al inicio de la clase para almacenar la referencia: private GameObject objetoEnPantalla;.

    En el método Start, después de obtener los botones, puedes buscar el objeto: objetoEnPantalla = GameObject.FindGameObjectWithTag("ObjetoADestruir" );. Asegúrate de que tu GameObject tenga esa etiqueta asignada.

    Luego, dentro de tu función ActivateBuilding, en el caso del switch para CubeButton y CylinderButton, justo después de bm.SelectBuilding(...);, añade la línea para destruir: Destroy(objetoEnPantalla);. Si quieres destruirlo inmediatamente al pulsar cualquier botón de construcción (CubeButton o CylinderButton), esa es la ubicación.

    Si prefieres destruir el objeto al pulsar el botón principal BuildButton, puedes colocar Destroy(objetoEnPantalla); dentro del bloque if (pressedBtn.name == "BuildButton"). Por ejemplo, al activar el modo construcción, justo después de bm.ActivateBuildingmode();.

    Un ejemplo concreto para destruir al seleccionar un cubo o cilindro. Modifica el bloque else de tu función así:

    else
    {
    switch (pressedBtn.name)
    {
    case "CubeButton":
    bm.SelectBuilding(0);
    Destroy(objetoEnPantalla);
    break;
    case "CylinderButton":
    bm.SelectBuilding(1);
    Destroy(objetoEnPantalla);
    break;
    }
    pressedBtn.image.color = new Color(155, 120, 255);
    bm.ActivateBuildingmode();
    }

    Recuerda corregir los errores de sintaxis en tu script original. Usa puntos . en lugar de comas , para acceder a miembros. Cambia bol por bool. Las cadenas de texto como "BuildButton" deben ir entre comillas. Usa == para comparaciones en los if, no =. En Update, if (cube.image.color != Color.white) es la comparación correcta.

    Para Unity actual, GameObject.FindGameObjectWithTag es una forma válida. Si tu objeto es dinámico, considera pasar la referencia mediante un campo público arrastrando el GameObject en el Inspector. Declara public GameObject objetoEnPantalla; y asígnelo desde el Editor, evitando el uso de Find.

    Si hay múltiples objetos, podrías usar un array o lista. Pero para un solo objeto, con Destroy(objetoEnPantalla); será suficiente. El objeto se destruirá en el siguiente frame, liberando memoria.

    Asegúrate de que la lógica de destrucción se adapte a tu juego. Si el objeto se recrea después, gestiona bien las referencias para no intentar destruir un objeto nulo. Puedes añadir una verificación: if (objetoEnPantalla != null) Destroy(objetoEnPantalla);.

Temas similares

  1. Respuestas: 4
    : 01-10-2023, 07:42
  2. General Error al ejecutar Script Unity
    Por lukas en el foro Programas de Diseño 3D y CAD
    Respuestas: 3
    : 22-03-2022, 17:22
  3. Script no se aplica en Unity
    Por Ignasi en el foro Plugins y Scripts
    Respuestas: 1
    : 04-10-2021, 21:30
  4. Videojuegos Cambiar textura por Script Unity SOLUCIONADO
    Por Jhonatan00_00 en el foro Videojuegos
    Respuestas: 2
    : 15-03-2019, 16:06
  5. Sugerencias con script
    Por mariano2cv en el foro Plugins y Scripts
    Respuestas: 10
    : 02-01-2006, 12:01