0

I'm making minecraft-like 2D game and everything seems like it's okay except changing block texture in one chunk. This is how I try to change sprite:

var block = new GameObject("blok", typeof(SpriteRenderer), typeof(BoxCollider2D), typeof(CircleCollider2D));
block.GetComponent(SpriteRenderer).sprite = Sprite.Create(Resources.Load("/Prefabs/Blokovi/blok_zemlja") as Texture2D, Rect(0, 240, 16, 16), Vector2(0.5, 0.5), 16);

It does not take any effect, why?

P.S. I use UnityScript/JavaScript.

Thanks in advance!

CodeSmile
  • 64,284
  • 20
  • 132
  • 217
Amar Kalabić
  • 888
  • 4
  • 15
  • 33

2 Answers2

0

You do not need to use Instantiate() to create new empty GameObject. You are doing this right by using only constructor. To populate the GameObject by new components try to use AddComponent() method instead of putting the types to constructor. This method returning type is Component so you can easily get reference to just added component. Small example:

var block = new GameObject("block");
block.AddComponent("BoxCollider2D");
block.AddComponent("CircleCollider2D"); 
var spriteRenderer = block.AddComponent("SpriteRenderer");
spriteRenderer.sprite = Sprite.Create(Resources.Load("/Prefabs/Blokovi/blok_zemlja") as Texture2D, Rect(0, 240, 16, 16), Vector2(0.5, 0.5), 16);
0

I solved my problem by adding an tag named "blok" to block GameObject and adding one for loop which then changes sprite for every type of block (gameobject with tag "blok"). Here is for loop code:

    var go_list = GameObject.FindGameObjectsWithTag ("blok");

    for (var object in go_list) {
    }
Amar Kalabić
  • 888
  • 4
  • 15
  • 33