Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

C# Building Placement

Iniciado por cricricri_ina, Octubre 21, 2016, 10:08:35 AM

Tema anterior - Siguiente tema
Buenas a todos!
 
Necesito hacer mediante c# en unity una interfaz  en la que mediante unos botones aparezcan en la pantalla unos game objects.
 
Es decir, me expreso mejor, por ejemplo yo tengo una habitación y si clico en un botón que hay en la pantalla que aparezca una mesa en medio de la habitación y si clico el botón de la pantalla de la silla desaparezca la mesa y me aparezca la silla. También necesitaría otro botón el cual me dejara el escenario reseteado.
 
Soy incapaz de dar con la formula para hacerlo, así agradecería ayudas como tutoriales, aportaciones o lo que sea cualquier ayuda es buena porque me urge bastante sacar esto.
 
Saludos! Y muchas gracias de antemano
 
 

Yo lo haría así:
 
- Crea un nuevo script en C# y en este script crea una variable public gameObject objectX; para cada objeto susceptible de ser mostrado/ocultado por los botones
 
- Adjunta esta script a cada botón (esto es chapucero pero bueno)
 
- Desde el panel inspector arrastra cada objeto de la escena al slot objectX correspondiente. Así desde el código del script ya puedes acceder a estos objetos.
 
- En este script tendrías que manejar el evento click del botón al que está attachado el script. En el código del botón click simplemente haces objectX.setActive(true o false) y ala.
 
Hecho así es bastante chapuza pero es fácil y tendría que funcionar.
 
No sé cómo tratas el evento click de los botones, si hasta ahí llegas entonces no tendrías que tener problema: en esa misma classe crea las variables públicas para poner la mensa, la silla, etc, las asignas luego delsde el inspector y en el evento click activas o desactivas lo que quieras. Para el botón de reset igual, los desactivas todos y ya está. 
 
 

Octubre 23, 2016, 01:29:16 PM #2 Ultima modificación: Octubre 23, 2016, 02:32:27 PM por pioj
Actualmente tengo este script... como meto el destroy? Porque he probado de todo y no hay manera
 

using UnityEngine;
using System.Collections;
public class Towers : MonoBehaviour {
    public GameObject[] towers ;
    public Cursor _Cursor ;
    private GameObject tower;
    public void createTower(string name)
    {
        switch (name)
        {
            case "_tower1":
                tower = Instantiate(towers[], new Vector3(, , ), Quaternion.identity) as GameObject;
                break;
            case "_tower2":
                tower = Instantiate(towers[1], new Vector3(, , ), Quaternion.identity) as GameObject;
                break;
            case "_tower3":
                tower = Instantiate(towers[2], new Vector3(, , ), Quaternion.identity) as GameObject;
                break;
        }
        if (tower != null)
        {
            // Init regions
            tower.GetComponent<RegionTower>().Start();
            _Cursor.RenderMatrixMap.shemeRadius = tower.GetComponent<RegionTower>().returnMatrix;
            _Cursor.createTower = tower;
            _Cursor.RenderMatrixMap.refreshMatrixCursor();
        }
        
    }
}

 
 

Octubre 23, 2016, 07:32:32 PM #3 Ultima modificación: Octubre 23, 2016, 07:33:11 PM por kaito
Podrías intentar esto:
 
1)Añade a todos los GameObjects el componente BoxCollider. No elimines el MeshCollider.
 
2)Utiliza Physics.BoxCast para proyectar el BoxCollider sobre la habitación ignorando los objetos.
 
3)Elimina los objetos que se encuentran en esa posición antes de añadir el nuevo objeto con Physics.OverlapBox
 
4)Elimina el componente BoxCollider si no es necesario.

Hola, usa los nuevos eventos que trae la UI de unity, son muy utiles, creas la UI (interfaz) con los botones que quieras (Create/UI/buttom), en cada uno tenes un Button(script), este tiene una lista de eventos, por default tenes OnClick, donde dice "none" seleccion el gameObject de al escena, donde dice "no function" busca GameObject/SetActive(bool).
 
Si queres que aparezca uno y desaparezca otro podes usar codigo, no recuerdo muy bien como funcionaba pero habia algun que otro truco, o sino podes decir que cuando clickeas en la silla, pones el gameobject "silla" en on (SetActiva(true) mediante los eventos que mencione arriba) y que ademas pones la mesa en off (suponiendo solo silla y mesa). Lo mismo para la mesa, y asi, si son pocos es muy sencillo.
 
saludos

Etiquetas: