Search Unity

  1. Welcome to the Unity Forums! Please take the time to read our Code of Conduct to familiarize yourself with the forum rules and how to post constructively.
  2. We have updated the language to the Editor Terms based on feedback from our employees and community. Learn more.
    Dismiss Notice

Hello, I am new to unity....How do I optimize this code????

Discussion in 'Scripting' started by Sabith_WeBros, Oct 11, 2019.

  1. Sabith_WeBros

    Sabith_WeBros

    Joined:
    Oct 11, 2019
    Posts:
    1
    So I am making a 2D kids type game....and I was spawning some 2d sprites...... and this is my code

    void spawnObject()
    {
    SpriteRenderer renderer;
    Sprite[] sprites = Resources.LoadAll<Sprite>("IceCream/Dummy_Base");

    GameObject base1 = new GameObject("base1");
    GameObject base2 = new GameObject("base2");
    GameObject base3 = new GameObject("base3");

    base1.transform.position = new Vector3(1.8f, .5f);
    base2.transform.position = new Vector3(5.3f, .5f);
    base3.transform.position = new Vector3(8.8f, .5f);

    base1.transform.localScale = new Vector3(.1f, .1f);
    base2.transform.localScale = new Vector3(.1f, .1f);
    base3.transform.localScale = new Vector3(.1f, .1f);


    renderer = base1.AddComponent<SpriteRenderer>();
    renderer.sprite = (Sprite) sprites[0];
    renderer = base2.AddComponent<SpriteRenderer>();
    renderer.sprite = (Sprite) sprites[1];
    renderer = base3.AddComponent<SpriteRenderer>();
    renderer.sprite = (Sprite) sprites[2];

    base1.AddComponent<BoxCollider2D>();
    base2.AddComponent<BoxCollider2D>();
    base3.AddComponent<BoxCollider2D>();

    base1.GetComponent<BoxCollider2D>().isTrigger = true;
    base2.GetComponent<BoxCollider2D>().isTrigger = true;
    base3.GetComponent<BoxCollider2D>().isTrigger = true;


    }
     
  2. MitjaHD

    MitjaHD

    Joined:
    Sep 30, 2018
    Posts:
    64
    It would be easier to just create these 3 objects in Unity and enable them when needed.
     
  3. Brathnann

    Brathnann

    Joined:
    Aug 12, 2014
    Posts:
    7,151
    Assuming you can't create these in the scene before hand, you'll want to look at collections and loops. You should be able to loop through and create each object within that loop.

    Now, that being said, without actual testing, you may not see a speed increase but it will save your sanity by not having to duplicate ever set of code if you want to create more and more objects.
     
  4. Carwashh

    Carwashh

    Joined:
    Jul 28, 2012
    Posts:
    746
    Could probably be improved further, just did it quickly in a text editor..

    Code (csharp):
    1.  
    2. void spawnObject()
    3. {
    4.     Sprite[] sprites = Resources.LoadAll<Sprite>("IceCream/Dummy_Base");
    5.  
    6.     GameObject base1 = new GameObject("base1");
    7.     GameObject base2 = new GameObject("base2");
    8.     GameObject base3 = new GameObject("base3");
    9.  
    10.     Vector3 basePos = new Vector3(1.8f, 0.5f);
    11.     SetupGameObejct(base1, basePos, sprites[0]);
    12.  
    13.     basePos = new Vector3(5.3f, 0.5f);
    14.     SetupGameObejct(base2, basePos, sprites[1]);
    15.  
    16.     basePos = new Vector3(8.8f, 0.5f);
    17.     SetupGameObejct(base3, basePos, sprites[2];
    18. }
    19.  
    20. private void SetupGameObejct(GameObject base, Vector3 pos, Sprite sprite)
    21. {
    22.     base.transform.position = pos;
    23.     base.transform.localScale = new Vector3(0.1f, 0.1f);
    24.  
    25.     SpriteRenderer renderer = base.AddComponent<SpriteRenderer>();
    26.     renderer.sprite = sprite;
    27.  
    28.     Collder col = base.AddComponent<BoxCollider2D>();
    29.     col.isTrigger = true;
    30. }