Search Unity

How do i start a script on the start of the app

Discussion in 'Scripting' started by GABIKILLER12, Jun 12, 2019.

  1. GABIKILLER12

    GABIKILLER12

    Joined:
    Apr 16, 2019
    Posts:
    2
    Code (CSharp):
    1.  
    2. using System;
    3. using System.Collections;
    4. using System.Collections.Generic;
    5. using UnityEngine;
    6. using static Classe_Parafuso; // O Script onde são atribuidos os valores e posições das variáveis
    7.  
    8. public class Parafuso_Propriedades : MonoBehaviour
    9. {
    10.  
    11.     public class Parafuso_Parametros // Classe Geral dos Parafusos
    12.     {
    13.        
    14.         public string NomeParafuso;         // Nome que vai ser atribuido ao Parafuso criado no jogo
    15.         public float PosXParafuso;          // Posição X inicial do Parafuso
    16.         public float PosYParafuso;          // Posição Y inicial do Parafuso
    17.         public float PosZParafuso;          // Posição Z inicial do Parafuso
    18.         public float RotXParafuso;          // Rotação X inicial do Parafuso
    19.         public float RotYParafuso;          // Rotação Y inicial do Parafuso
    20.         public float RotZParafuso;          // Rotação Z inicial do Parafuso
    21.         public float ScaleXParafuso;        // Tamanho X do Parafuso
    22.         public float ScaleYParafuso;        // Tamanho Y do Parafuso
    23.         public float ScaleZParafuso;        // Tamanho Z do Parafuso
    24.         public string TagParafuso;          // Tag atribuida para depois saber quando é ativo a animação do parafuso
    25.         public float PosXFinal;             // Posição X Final do Parafuso
    26.         public float PosYFinal;             // Posição Y Final do Parafuso
    27.         public float PosZFinal;             // Posição Z Final do Parafuso
    28.         public float DifPosXParafuso;       // Diferença entre o ponto de Partida e o Ponto de chegada do Parafuso no eixo X
    29.         public float DifPosYParafuso;       // Diferença entre o ponto de Partida e o Ponto de chegada do Parafuso no eixo Y
    30.         public float DifPosZParafuso;       // Diferença entre o ponto de Partida e o Ponto de chegada do Parafuso no eixo Z
    31.         public GameObject FicheiroParafuso; // Ficheiro 3D do parafuso
    32.  
    33.         public Parafuso_Parametros(string NomeP, float PosXP, float PosYP, float PosZP, float RotXP, float RotYP, float RotZP, float ScaleXP, float ScaleYP, float ScaleZP, string TagP, float PosXF, float PosYF, float PosZF, float DifPosXP, float DifPosYP, float DifPosZP, GameObject FileP)
    34.         {
    35.             NomeParafuso = NomeP;
    36.             PosXParafuso = PosXP;
    37.             PosYParafuso = PosYP;
    38.             PosZParafuso = PosZP;
    39.             RotXParafuso = RotXP;
    40.             RotYParafuso = RotYP;
    41.             RotZParafuso = RotZP;
    42.             ScaleXParafuso = ScaleXP;
    43.             ScaleYParafuso = ScaleYP;
    44.             ScaleZParafuso = ScaleZP;
    45.             TagParafuso = TagP;
    46.             PosXFinal = PosXF;
    47.             PosYFinal = PosYF;
    48.             PosZFinal = PosZF;
    49.             DifPosXParafuso = DifPosXP;
    50.             DifPosYParafuso = DifPosYP;
    51.             DifPosZParafuso = DifPosZP;
    52.             FicheiroParafuso = FileP;
    53.         }
    54.     }
    55. }
    56.  
    57. I want start this code on the start of the game, this one are just the variables but if make a void for this one for the trigger on the game to start it just keeps giving errors on the script...
    58.  
    59.  
    60.  
    61. using System;
    62. using System.Collections;
    63. using System.Collections.Generic;
    64. using UnityEngine;
    65. using static Parafuso_Propriedades; // O Script onde são declaradas as variáveis
    66.  
    67. public class Classe_Parafuso : MonoBehaviour
    68. {
    69.     //classe_parafuso = GetComponent<Parafuso_Propriedades>();
    70.  
    71.     [Range(-2, 2)] public float MovementSpeed; // Velocidade de movimento do Parafuso
    72.     [Range(5, 25)] public float RotateSpeed = 20; // Velocidade de rotação do Parafuso durante a animação
    73.     public float MeterParafuso; // Velocidade de movimento do parafuso a meter na calha por exemplo
    74.     public float Rotacao = 0; // Contador da rotação
    75.     public float AumentoRotacao;
    76.     public float MaxRotacao = 100; // Máxima rotação na animação na hora de rodar o parafuso
    77.  
    78.     // ------------------------- Quantos Parafusos tem o projeto? --------------------------------------------------------------------
    79.     // Não esquecer que se o array tiver Parafuso_Parametros[10], o array começa em [0] e termina em [10] logo tem 11 casas!
    80.  
    81.     Parafuso_Parametros[] Parafusos = new Parafuso_Parametros[3]; // Dizer quantos Parafusos a classe parafuso pode ter
    82.     public GameObject prego;
    83.     int num = 3;           // O valor tem que o mesmo ao atribuido acima senão valores de parafusos podem não ser introduzidos!
    84.     bool DadosFeitos = false;
    85.     bool AlternadorDados = false; // Se o alternador não ficar True a animação não começa porque os dados podem não ter sido preenchidos corretamente
    86.     bool VariaveisAtribuidas = false;
    87.     bool CriadorObjetos = false;
    88.  
    89.     // ----------------------------------------------------------------------------------------------------------------------
    90.  
    91.     public void Receber_Dados() // Preenche o Array Parafusos[] com todos os nomes que têm de ser dados aos parafusos
    92.     {
    93.         if (VariaveisAtribuidas == false && AlternadorDados == false && DadosFeitos == false && CriadorObjetos == false)
    94.         {
    95.             int a = 0;
    96.  
    97.             for (int i = 0; i <= num; i++)
    98.             {
    99.                 Parafusos[i].NomeParafuso = ($"Parafuso{a}");
    100.                 //Debug.Log(Parafusos[i].NomeParafuso);
    101.                 a++;
    102.             }
    103.             VariaveisAtribuidas = true;
    104.         }
    105.  
    106.         // ------------------------------------------ Preenchimento de valores -------------------------------------------------
    107.         // ------------------ -------------------Única Parte necessária a modificar --------------------------------------------
    108.  
    109.         for (int i = 0; i <= num; i++)
    110.         {
    111.             switch (i)
    112.             {
    113.                 case 0:                                    // Se i == 0, o array parafusos[0] recebe os valores abaixos
    114.                     Parafusos[i].PosXParafuso = 0f;
    115.                     Parafusos[i].PosYParafuso = 2.85f;
    116.                     Parafusos[i].PosZParafuso = 0.3f;
    117.                     Parafusos[i].RotXParafuso = 0f;
    118.                     Parafusos[i].RotYParafuso = 0f;
    119.                     Parafusos[i].RotZParafuso = 0f;
    120.                     Parafusos[i].ScaleXParafuso = 0.2f;
    121.                     Parafusos[i].ScaleYParafuso = 0.5f;
    122.                     Parafusos[i].ScaleZParafuso = 0.1f;
    123.                     Parafusos[i].TagParafuso = "Vaga1";
    124.                     Parafusos[i].PosXFinal = 0f;
    125.                     Parafusos[i].PosYFinal = -2.05f;
    126.                     Parafusos[i].PosZFinal = 0.3f;
    127.                     Parafusos[i].FicheiroParafuso = (GameObject)Resources.Load("ParafusoPrefab", typeof (GameObject));
    128.                     break;
    129.  
    130.                 case 1:                                   // Se i == 1, o array parafusos[1] recebe os valores abaixos
    131.                     Parafusos[i].PosXParafuso = 0f;
    132.                     Parafusos[i].PosYParafuso = 2.85f;
    133.                     Parafusos[i].PosZParafuso = 0f;
    134.                     Parafusos[i].RotXParafuso = 0f;
    135.                     Parafusos[i].RotYParafuso = 0f;
    136.                     Parafusos[i].RotZParafuso = 0f;
    137.                     Parafusos[i].ScaleXParafuso = 1f;
    138.                     Parafusos[i].ScaleYParafuso = 1f;
    139.                     Parafusos[i].ScaleZParafuso = 1f;
    140.                     Parafusos[i].TagParafuso = "Vaga3";
    141.                     Parafusos[i].PosXFinal = 0f;
    142.                     Parafusos[i].PosYFinal = -1.6f;
    143.                     Parafusos[i].PosZFinal = 0f;
    144.                     Parafusos[i].FicheiroParafuso = (GameObject)Resources.Load("ParafusoPrefab", typeof(GameObject));
    145.                     break;
    146.  
    147.                 case 2:                                   // Se i == 2, o array[] parafusos[2] recebe os valores abaixos
    148.                     Parafusos[i].PosXParafuso = 0f;
    149.                     Parafusos[i].PosYParafuso = 2.85f;
    150.                     Parafusos[i].PosZParafuso = 0f;
    151.                     Parafusos[i].RotXParafuso = 0f;
    152.                     Parafusos[i].RotYParafuso = 0f;
    153.                     Parafusos[i].RotZParafuso = 0f;
    154.                     Parafusos[i].ScaleXParafuso = 1f;
    155.                     Parafusos[i].ScaleYParafuso = 1f;
    156.                     Parafusos[i].ScaleZParafuso = 1f;
    157.                     Parafusos[i].TagParafuso = "Vaga1";
    158.                     Parafusos[i].PosXFinal = 0f;
    159.                     Parafusos[i].PosYFinal = -1.6f;
    160.                     Parafusos[i].PosZFinal = 0f;
    161.                     //FicheiroParafuso = ;
    162.                     break;
    163.  
    164.                 case 3:                                   // Se i == 3, o array parafusos[3] recebe os valores abaixos
    165.                     Parafusos[i].PosXParafuso = 0f;
    166.                     Parafusos[i].PosYParafuso = 2.85f;
    167.                     Parafusos[i].PosZParafuso = 0f;
    168.                     Parafusos[i].RotXParafuso = 0f;
    169.                     Parafusos[i].RotYParafuso = 0f;
    170.                     Parafusos[i].RotZParafuso = 0f;
    171.                     Parafusos[i].ScaleXParafuso = 1f;
    172.                     Parafusos[i].ScaleYParafuso = 1f;
    173.                     Parafusos[i].ScaleZParafuso = 1f;
    174.                     Parafusos[i].TagParafuso = "Vaga2";
    175.                     Parafusos[i].PosXFinal = 0f;
    176.                     Parafusos[i].PosYFinal = -1.6f;
    177.                     Parafusos[i].PosZFinal = 0f;
    178.                     // FicheiroParafuso = ParafusoPrefab;
    179.                     AlternadorDados = true;
    180.                     break;
    181.  
    182.                 default:
    183.                     break;
    184.  
    185.                     // Se for necessário introduzir mais parafuso simplesmente copia-se o case e cola-se a seguir ao ultimo mas antes do default, no case poê-se um valor acima ao último presente e assim modifica-se os dados
    186.                     // IMPORTANTE: Se mudar o tamanho do case tem que se mudar o tamanho do Parafusos_Parametros[] e a variável num.
    187.                     // IMPORTANTE: O alternadorDados tem que ficar no ultimo case, tem que existir e tem que mudar para TRUE, caso contrário o animador não funciona!!
    188.  
    189.                     // ------------------------------------------------- Fim de Preenchimento de valores -------------------------------------------------------------
    190.             }
    191.         }
    192.     }
    193.  
    194.     public void CalculoDeDiferencaDePosicoes() // ------------------ Calculo da diferença entre a posição inicial e a posição final em cada eixo -------------------------
    195.     {
    196.         if (AlternadorDados == true && DadosFeitos == false && VariaveisAtribuidas == true && CriadorObjetos == false) // Se o AlternadorDados não mudar para true as contas não são feitas
    197.                                                              // Os calculos apenas são feitos enquanto a variável DadosFeitos tiver valor false
    198.         {
    199.             for (int i = 0; i <= num; i++)
    200.             {
    201.                 Parafusos[i].DifPosXParafuso = Parafusos[i].PosXFinal - Parafusos[i].PosXParafuso;
    202.                 Parafusos[i].DifPosYParafuso = Parafusos[i].PosYFinal - Parafusos[i].PosYParafuso;
    203.                 Parafusos[i].DifPosZParafuso = Parafusos[i].PosZFinal - Parafusos[i].PosZParafuso;
    204.             }
    205.             DadosFeitos = true; // Após fazer os calculos todos a variável DadosFeitos muda para True para não permitir que mais cálculos sejam feitos
    206.         }
    207.     }
    208.  
    209.     public void CriacaoObjetos()
    210.     {
    211.         for (int i = 0; i <= num; i++)
    212.         { // Aqui é criado a cópia da Prefab do parafuso, e é atribuido os valores de rotação e as coordenadas
    213.             prego = Instantiate(Parafusos[i].FicheiroParafuso, new Vector3(Parafusos[i].PosXParafuso, Parafusos[i].PosYParafuso, Parafusos[i].PosZParafuso), Quaternion.Euler(Parafusos[i].RotXParafuso, Parafusos[i].RotYParafuso, Parafusos[i].RotZParafuso));
    214.             prego.gameObject.tag = Parafusos[i].TagParafuso; // Define a Tag ao Clone
    215.         }
    216.         CriadorObjetos = true; // Após criar todos os objetos o criadorObjetos passa a true e nao deixa criar mais nenhum
    217.     }
    218.     // ------------------- Fim do Calculo da diferença entre a posição inicial e a posição final em cada eixo -------------------
    219.  
    220.     // ---------------------------------- Inicio da Animação do Parafuso --------------------------------------------------------
    221.     public void Update() // Atualiza a cada a cada frame que passa
    222.                           // Se por acaso a taxa de frames for baixa ou muito alta, pode trocar por (void static Update) e assim ele faz sempre á mesma frequência
    223.     {
    224.         for (int i = 0; i <= num; i++) // Desde o valor 0 até ao máximo do array
    225.         {
    226.             // ---------------------------------------- Animador de Rotação e movimento do Parafuso a encaixar ----------------------------------------------------------------------
    227.  
    228.             if (AlternadorDados == true && DadosFeitos == true && VariaveisAtribuidas == true && CriadorObjetos == true) // As animações são apenas iniciadas se o AlternadorDados e os DadosFeitos estiverem a true
    229.         {
    230.            
    231.                 if (Parafusos[i].PosXParafuso < -2 && Rotacao < MaxRotacao) // Se a posição do parafuso for menor que y = -2 e a rotacao for menor que a maxima rotação permitida
    232.                 {
    233.                     Rotacao += AumentoRotacao * Time.deltaTime; //
    234.                     transform.Rotate(0, RotateSpeed * AumentoRotacao * Time.deltaTime, 0); // Roda parafuso para a Direita conforme a velocidade do aumento da rotação e do RotateSpeed
    235.  
    236.                     if (Rotacao < MaxRotacao / 2.5) // Rodar parafuso a acelarar e a ir para baixo lentamente
    237.                     {
    238.                         AumentoRotacao += Time.deltaTime;
    239.                         MeterParafuso -= Time.deltaTime / 200;
    240.                     }
    241.  
    242.                     transform.Translate(0, MeterParafuso * Time.deltaTime, 0);
    243.  
    244.                     if (Rotacao > MaxRotacao / 1.5) // Rodar parafuso a desacelarar e a ir para baixo lentamente
    245.                     {
    246.                         AumentoRotacao -= Time.deltaTime; // desacelara a velocidade que o parafuso roda
    247.                         MeterParafuso += Time.deltaTime / 200; // desacelara a velocidade que o parafuso desce ao rodar
    248.                     }
    249.  
    250.                     // -----------------------------Fim do Animador de Rotação e movimento do Parafuso a encaixar ----------------------------------------------------------------------
    251.  
    252.  
    253.                     // ------------------------------------------------ Animador de Movimento -----------------------------------------------------------------
    254.  
    255.                     if (Parafusos[i].DifPosYParafuso != 0) // Mover Parafuso no eixo do Y se o valor for igual a 0 ele não verifica esta operação
    256.                     {
    257.                         if (Parafusos[i].DifPosYParafuso < 0) // Se o valor da diferença no eixo do Y for negativo
    258.                         {
    259.                             transform.Translate(0, MovementSpeed * Time.deltaTime, 0);
    260.                         }
    261.                         else transform.Translate(0, Parafusos[i].DifPosYParafuso * MovementSpeed, 0); // Se o valor da diferença no eixo do Y for positivo
    262.                     }
    263.  
    264.                     if (Parafusos[i].DifPosXParafuso != 0) // Mover Parafuso no eixo do X se o valor for igual a 0 ele não verifica esta operação
    265.                     {
    266.                         if (Parafusos[i].DifPosXParafuso < 0) // Se o valor da diferença no eixo do X for negativo
    267.                         {
    268.                             transform.Translate(0, MovementSpeed * Time.deltaTime, 0);
    269.                         }
    270.                         else transform.Translate(0, Parafusos[i].DifPosXParafuso * MovementSpeed, 0); // Se o valor da diferença no eixo do X for positivo
    271.                     }
    272.  
    273.                     if (Parafusos[i].DifPosZParafuso != 0) // Mover Parafuso no eixo do Z se o valor for igual a 0 ele não verifica esta operação
    274.                     {
    275.                         if (Parafusos[i].DifPosZParafuso < 0) // Se o valor da diferença no eixo do Z for negativo
    276.                         {
    277.                             transform.Translate(0, MovementSpeed * Time.deltaTime, 0);
    278.                         }
    279.                         else transform.Translate(0, Parafusos[i].DifPosZParafuso * MovementSpeed, 0); // Se o valor da diferença no eixo do Z for positivo
    280.                     }
    281.  
    282.                     // ------------------------------------------------ Fim do Animador de Movimento -----------------------------------------------------------------
    283.                 }
    284.             }
    285.         }
    286.        
    287.     }
    288. }
    289.  
    290. this is the last script and its dependent to the other before.... am i doing something wrong??
     
  2. GABIKILLER12

    GABIKILLER12

    Joined:
    Apr 16, 2019
    Posts:
    2
    The Basic is this

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using static Classe_Parafuso; // O Script onde são atribuidos os valores e posições das variáveis

    public class Parafuso_Propriedades : MonoBehaviour
    {

    public class Parafuso_Parametros // Classe Geral dos Parafusos
    {
    public string NomeParafuso; // Nome que vai ser atribuido ao Parafuso criado no jogo
    public float PosXParafuso; // Posição X inicial do Parafuso
    public float PosYParafuso; // Posição Y inicial do Parafuso
    public float PosZParafuso; // Posição Z inicial do Parafuso
    public float RotXParafuso; // Rotação X inicial do Parafuso
    public float RotYParafuso; // Rotação Y inicial do Parafuso
    public float RotZParafuso; // Rotação Z inicial do Parafuso
    public float ScaleXParafuso; // Tamanho X do Parafuso
    public float ScaleYParafuso; // Tamanho Y do Parafuso
    public float ScaleZParafuso; // Tamanho Z do Parafuso
    public string TagParafuso; // Tag atribuida para depois saber quando é ativo a animação do parafuso
    public float PosXFinal; // Posição X Final do Parafuso
    public float PosYFinal; // Posição Y Final do Parafuso
    public float PosZFinal; // Posição Z Final do Parafuso
    public float DifPosXParafuso; // Diferença entre o ponto de Partida e o Ponto de chegada do Parafuso no eixo X
    public float DifPosYParafuso; // Diferença entre o ponto de Partida e o Ponto de chegada do Parafuso no eixo Y
    public float DifPosZParafuso; // Diferença entre o ponto de Partida e o Ponto de chegada do Parafuso no eixo Z
    public GameObject FicheiroParafuso; // Ficheiro 3D do parafuso

    public Parafuso_Parametros(string NomeP, float PosXP, float PosYP, float PosZP, float RotXP, float RotYP, float RotZP, float ScaleXP, float ScaleYP, float ScaleZP, string TagP, float PosXF, float PosYF, float PosZF, float DifPosXP, float DifPosYP, float DifPosZP, GameObject FileP)
    {
    NomeParafuso = NomeP;
    PosXParafuso = PosXP;
    PosYParafuso = PosYP;
    PosZParafuso = PosZP;
    RotXParafuso = RotXP;
    RotYParafuso = RotYP;
    RotZParafuso = RotZP;
    ScaleXParafuso = ScaleXP;
    ScaleYParafuso = ScaleYP;
    ScaleZParafuso = ScaleZP;
    TagParafuso = TagP;
    PosXFinal = PosXF;
    PosYFinal = PosYF;
    PosZFinal = PosZF;
    DifPosXParafuso = DifPosXP;
    DifPosYParafuso = DifPosYP;
    DifPosZParafuso = DifPosZP;
    FicheiroParafuso = FileP;
    }
    }
    }

    and on the other script is this

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using static Parafuso_Propriedades; // O Script onde são declaradas as variáveis


    public class Classe_Parafuso : MonoBehaviour
    {
    //classe_parafuso = GetComponent<Parafuso_Propriedades>();

    [Range(-2, 2)] public float MovementSpeed; // Velocidade de movimento do Parafuso
    [Range(5, 25)] public float RotateSpeed = 20; // Velocidade de rotação do Parafuso durante a animação
    public float MeterParafuso; // Velocidade de movimento do parafuso a meter na calha por exemplo
    public float Rotacao = 0; // Contador da rotação
    public float AumentoRotacao;
    public float MaxRotacao = 100; // Máxima rotação na animação na hora de rodar o parafuso

    // ------------------------- Quantos Parafusos tem o projeto? --------------------------------------------------------------------
    // Não esquecer que se o array tiver Parafuso_Parametros[10], o array começa em [0] e termina em [10] logo tem 11 casas!

    public Parafuso_Parametros[] Parafusos = new Parafuso_Parametros[3]; // Dizer quantos Parafusos a classe parafuso pode ter
    public GameObject[] prego = new GameObject[3];

    int num = 3; // O valor tem que o mesmo ao atribuido acima senão valores de parafusos podem não ser introduzidos!
    bool DadosFeitos = false;
    bool AlternadorDados = false; // Se o alternador não ficar True a animação não começa porque os dados podem não ter sido preenchidos corretamente
    bool VariaveisAtribuidas = false;
    bool CriadorObjetos = false;

    // ----------------------------------------------------------------------------------------------------------------------

    public void Receber_Dados() // Preenche o Array Parafusos[] com todos os nomes que têm de ser dados aos parafusos
    {
    // if (VariaveisAtribuidas == false) //&& AlternadorDados == false && DadosFeitos == false && CriadorObjetos == false
    //{
    int a = 0;

    for (int i = 0; i <= num; i++)
    {
    Parafusos.NomeParafuso = ($"Parafuso{a}");
    Debug.Log(Parafusos.NomeParafuso);
    a++;
    }
    }
    }

    the first script is defined on the scripts order to start before the app starts but when i do to start the second script it keeps apeering this error: NullReferenceException: Object reference not set to an instance of an object Classe_Parafuso.Receber_Dados () (at Assets/Animador_Parafusos/Classe_Parafuso.cs:46)

    help :(
     
  3. Kurt-Dekker

    Kurt-Dekker

    Joined:
    Mar 16, 2013
    Posts:
    38,689
    By convention Unity MonoBehaviours have special functions. One is called Start(), one is called Update(), and there are many others..

    I suggest you try a few basic tutorials to get the feel for how that system works so you can use it too.