Jump to content

Recommended Posts

hola a todos tengo un problema con un script, soy algo nuevo en unity, ya estoy casi por terminar un juego pero me eh atorado en una parte y quisera ver si me pueden ayudar,

el problema es el siguiente.

eh puesto 8 gameobjects en un array pero nesecito que los gameobject se activen o desactiven dependiendo de una variable que se llama "divesInside" que se encuentra en otra clase, bueno todo asta aqui va de maravilla cuando pongo los gameobject en el array, pero nesecito que estos gameobject dentro de el array de activen o desactiven dependiendo de la cantidad de "divesInside", el codigo funciona pero al momento de hacer SetActive a un objeto de el array solo me activa el que esta en la posicion [0] y no los demas, aun si pongo en update fuera de el "for" a otro objeto de el array siempre me activara el de la posicion [0] y no los otros. este el el codigo.

using UnityEngine;
using System.Collections;

public class DivesInsideDisplay : MonoBehaviour {
    public GameObject divesDisplay;
    public Transform location;
    private GameObject[] divesDisplayArray = new GameObject[8];
    public float spaceBetween;
    private float space =0;
    
	// Use this for initialization
	void Start () {
        for (int i = 0; i < divesDisplayArray.Length; i++)
        {
            divesDisplayArray[i] = divesDisplay;
            Instantiate(divesDisplayArray[i], location.position + new Vector3(space , 0, 0),location.localRotation);
            space += spaceBetween;
            divesDisplayArray[i].SetActive(false);
        }

	}
	void Update () {

        
        for (int i = 0; i < GameRules.divesInside; i++)
        {
            divesDisplayArray[i].SetActive(true);
        }
    }
}

 

 

 

 

Edited by Oaken3d
error

Share this post


Link to post
Share on other sites
Intenta sacarlo del void Star() y ponlo en el Update

for (int i = 0; i < divesDisplayArray.Length; i++)
        {
            divesDisplayArray[i] = divesDisplay;
            Instantiate(divesDisplayArray[i], location.position + new Vector3(space , 0, 0),location.localRotation);
            space += spaceBetween;
            divesDisplayArray[i].SetActive(false);
        }
Edited by DavidV

Share this post


Link to post
Share on other sites

El código lo tienes bien, pero prueba a instanciar primero el objeto y luego a guardarlos en el array, porque lo que estás haciendo es guardar la misma referencia en todos los "huecos" del array, la referencia del primero, los otros los creas, pero no los estás guardando en el array :)

divesDisplayArray[i] = (GameObject) Instantiate(divesDisplay, location.position + new Vector3(space , 0, 0),location.localRotation);

 

Share this post


Link to post
Share on other sites

UnitySpain © Todos los derechos reservados 2020
×
×
  • Create New...