Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: cricricri_ina en Octubre 21, 2016, 10:08:35 AM

Título: C# Building Placement
Publicado por: cricricri_ina en Octubre 21, 2016, 10:08:35 AM
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
 
 
Título: C# Building Placement
Publicado por: musaranya en Octubre 21, 2016, 11:29:47 AM
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á. 
 
 
Título: C# Building Placement
Publicado por: cricricri_ina en Octubre 23, 2016, 01:29:16 PM
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();
        }
        
    }
}

 
 
Título: C# Building Placement
Publicado por: kaito en Octubre 23, 2016, 07:32:32 PM
Podrías intentar esto:
 
1)Añade a todos los GameObjects el componente BoxCollider. No elimines el MeshCollider.
 
2)Utiliza Physics (https://docs.unity3d.com/ScriptReference/Physics.html).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 (https://docs.unity3d.com/ScriptReference/Physics.html).OverlapBox
 
4)Elimina el componente BoxCollider si no es necesario.
Título: C# Building Placement
Publicado por: lightbug en Noviembre 14, 2016, 10:18:41 PM
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