none
heritage c# help me RRS feed

  • Question

  • this code has a error, i don't know that.

      

    public class Controlador : MonoBehaviour {

        [Header("Tipos de Planetas")]
        public GameObject[] Planetas;
        GameObject[] PlanetasInstanciados = new GameObject[100];

        //Start es el método con en que se empieza al ejecutar. IMPORTANTE que se llame así.
        void Start () {
            instanciarPlanetas();
    }

        void instanciarPlanetas()
        {
            for (int i = 1; i <= 100; i++)
            {
                int r = Random.Range(1, 100);
                if (r<=30)
                { 
                    PlanetasInstanciados[i - 1]= Instantiate(Planetas[0]); 
                    PlanetasInstanciados[i - 1].GetComponent<PlanetaRocoso>().SetNumeroPlaneta(i);
                    PlanetasInstanciados[i - 1].GetComponent<PlanetaRocoso>().Setmaterial(Random.Range(0, 1));
                }
                else
                { 
                    PlanetasInstanciados[i - 1] = Instantiate(Planetas[1]);                
                    PlanetasInstanciados[i - 1].GetComponent<PlanetaGaseoso>().SetNumeroPlaneta(i);
                    PlanetasInstanciados[i - 1].GetComponent<PlanetaGaseoso>().Setmaterial(Random.Range(0, 4));
                }
            }
        }

    }

    -----------------------------------------------

             

    using UnityEngine;
    using System.Collections;


    //Clase Padre de la herencia.
    public class Planeta : MonoBehaviour {

        //Sus variables tienen que ser PROTECTED para que sean accesibles por las clases hijo
        protected int numeroPlaneta;
        protected float DistanciaAlCentro;
        protected float Masa;
        protected float diametro;

        //El material ha de ser PUBLIC para poder acceder desde UNITY
        //Array de materiales para la seleccion aleatoria del material del planeta
        public Material[] materiales;

        //Funciones que todas las clases hijo  van a utilizar.
        public void SetNumeroPlaneta(int i)
        {
            numeroPlaneta = i;
        }
        public  void Setmaterial(int i)
        {
            //Fijate en la sintaxis, mayor/menor (<>), parentesis, etc...
            GetComponent<MeshRenderer>().material = materiales[i];
        }

        public  void Posicion()
        {
            //transform. a las coordenadas del game object y le asignas las coordenadas del 
            //nuevo vector r.
            Vector3 r = new Vector3(Random.Range(-50, 50), Random.Range(-50, 50), Random.Range(-50, 50));
            transform.position = r;
        }

    }

    --------------------------


    Monday, March 6, 2017 8:36 AM

All replies

  • Oh yes, you use this code:

      

    using UnityEngine;
    using System.Collections;

    public class PlanetaGaseoso : Planeta {

        //En las clases hijos las variables son privadas.
        private int nLunas;

        void Start () {
            DistanciaAlCentro = Random.Range(2, 100);
            nLunas = Random.Range(10, 50);
            Masa = Random.Range(10, 400);
            diametro = Mathf.Pow(Masa * 10, 0.25f);
            gameObject.transform.localScale = new Vector3(diametro, diametro, diametro);
            Posicion();
        }

    }

    --------------------------------------

    Monday, March 6, 2017 8:37 AM
  • and this:

    using UnityEngine;
    using System.Collections;

    public class PlanetaRocoso : Planeta {

        //En las clases hijos las variables son privadas.
        private int temperatura;
        private int habitabilidad;
        
        void Start () {
            DistanciaAlCentro = Random.Range(2, 100);
            temperatura = Random.Range(0, 100);
            Masa = Random.Range(0.1f, 10);
            habitabilidad = (int)(1-(Mathf.Abs((temperatura-50))/100)-( Mathf.Abs(Mathf.Log10(Masa))/2));
            diametro = Mathf.Pow(Masa * 10,0.25f);
            gameObject.transform.localScale = new Vector3(diametro, diametro, diametro);
            Posicion();
        }
       
    }


    Monday, March 6, 2017 8:37 AM
  • A couple of things to consider:
    First thing is you are doing Unity Engine Development. While it does use C#, it is also using the Mono Framework as target. You are propably better of asking on the Unity Forums then on the MS C# Forum. Every class down to simple cases as Random behaves utterly different between Mono, .NET and .NET Core.

    The second issues is that you forgot to put the code into code blocks.

    The third issue is that you forgot to tell us WICH error the code produces and on what line precisely. "Does not work" has never been sufficient error information.

    I can do the Syntax Highlighting, but we still need to know the error and the line it happens on:

    public class Controlador : MonoBehaviour {
    
        [Header("Tipos de Planetas")]
        public GameObject[] Planetas;
        GameObject[] PlanetasInstanciados = new GameObject[100];
    
        //Start es el método con en que se empieza al ejecutar. IMPORTANTE que se llame así.
        void Start () {
            instanciarPlanetas();
    }
    
        void instanciarPlanetas()
        {
            for (int i = 1; i <= 100; i++)
            {
                int r = Random.Range(1, 100);
                if (r<=30)
                { 
                    PlanetasInstanciados[i - 1]= Instantiate(Planetas[0]); 
                    PlanetasInstanciados[i - 1].GetComponent<PlanetaRocoso>().SetNumeroPlaneta(i);
                    PlanetasInstanciados[i - 1].GetComponent<PlanetaRocoso>().Setmaterial(Random.Range(0, 1));
                }
                else
                { 
                    PlanetasInstanciados[i - 1] = Instantiate(Planetas[1]);                
                    PlanetasInstanciados[i - 1].GetComponent<PlanetaGaseoso>().SetNumeroPlaneta(i);
                    PlanetasInstanciados[i - 1].GetComponent<PlanetaGaseoso>().Setmaterial(Random.Range(0, 4));
                }
            }
        }
    
    }
    using UnityEngine;
    using System.Collections;
    
    
    //Clase Padre de la herencia.
    public class Planeta : MonoBehaviour {
    
        //Sus variables tienen que ser PROTECTED para que sean accesibles por las clases hijo
        protected int numeroPlaneta;
        protected float DistanciaAlCentro;
        protected float Masa;
        protected float diametro;
    
        //El material ha de ser PUBLIC para poder acceder desde UNITY
        //Array de materiales para la seleccion aleatoria del material del planeta
        public Material[] materiales;
    
        //Funciones que todas las clases hijo  van a utilizar.
        public void SetNumeroPlaneta(int i)
        {
            numeroPlaneta = i;
        }
        public  void Setmaterial(int i)
        {
            //Fijate en la sintaxis, mayor/menor (<>), parentesis, etc...
            GetComponent<MeshRenderer>().material = materiales[i];
        }
    
        public  void Posicion()
        {
            //transform. a las coordenadas del game object y le asignas las coordenadas del 
            //nuevo vector r.
            Vector3 r = new Vector3(Random.Range(-50, 50), Random.Range(-50, 50), Random.Range(-50, 50));
            transform.position = r;
        }
    
    }
    using UnityEngine;
    using System.Collections;
    
    public class PlanetaGaseoso : Planeta {
    
        //En las clases hijos las variables son privadas.
        private int nLunas;
    
        void Start () {
            DistanciaAlCentro = Random.Range(2, 100);
            nLunas = Random.Range(10, 50);
            Masa = Random.Range(10, 400);
            diametro = Mathf.Pow(Masa * 10, 0.25f);
            gameObject.transform.localScale = new Vector3(diametro, diametro, diametro);
            Posicion();
        }
    
    }
    using UnityEngine;
    using System.Collections;
    
    public class PlanetaRocoso : Planeta {
    
        //En las clases hijos las variables son privadas.
        private int temperatura;
        private int habitabilidad;
        
        void Start () {
            DistanciaAlCentro = Random.Range(2, 100);
            temperatura = Random.Range(0, 100);
            Masa = Random.Range(0.1f, 10);
            habitabilidad = (int)(1-(Mathf.Abs((temperatura-50))/100)-( Mathf.Abs(Mathf.Log10(Masa))/2));
            diametro = Mathf.Pow(Masa * 10,0.25f);
            gameObject.transform.localScale = new Vector3(diametro, diametro, diametro);
            Posicion();
        }
       
    }


    Remember to mark helpfull answers as helpfull and close threads by marking answers.

    Monday, March 6, 2017 12:04 PM