Showing posts with label unity2d. Show all posts
Showing posts with label unity2d. Show all posts

Tuesday, April 14, 2015

Instantiate a prefab

I keep having to look up how to instantiate a prefab.  This is an easier place for me to look for it.

Put this as a method variable

// C# 

public Transform prefabMovePath;

Once you have that method variable in your Unity script, then you will see this.
Simply drag and drop the prefab you want to the script to instantiate to the PrefabMovePath in unity.


Since I'll probably forget that too, the way you create a prefab is pretty simple, build it up in the hierarchy/scene, then drag it from the hierarchy to the project.  It will have a blue cube icon.

Use this Instantiate code to create an instance of that prefab.

private Transform curMove;
void Start() 
{
    curMove = (Transform)Instantiate(prefabMovePath, new Vector3(0, 0, 0), Quaternion.identity);
}

Then, since that prefab has a script I need access to, use this when wanting to call code in the script that prefab is attached to.

        MovePath mp = curMove.GetComponent();
        mp.rotateLeft();

Friday, February 6, 2015

Using Unity Instantiate to create child objects

I'm building a tetris like board and was using Instantiate to create a group of tiles that were a move piece and when I moved the parent object, non of them moved.  It wasn't hard to fix, simply set the parent of the instantiated object.


            Transform ttmp = (Transform)Instantiate(goal_tile, goal_tile.position, goal_tile.rotation);
            tile.transform.position = new Vector2(
                (cellToCol(i) * tile_plain.rect.width) / tile_plain.pixelsPerUnit,
                (cellToRow(i) * tile_plain.rect.width) / tile_plain.pixelsPerUnit);
            ttmp.parent = transform;


Then in the update method, I can move the entire group of tiles like this



       Transform t2 = GetComponent();
       t2.position = new Vector3(t2.position.x + 0.005f, t2.position.y, t2.position.z);



In this case I'm getting the Transform associated with myself and adding a small amount to the x position. It doesn't do much because it just moves of the screen, but the game is getting closer bit by bit.

Thursday, January 29, 2015

Unity2D script to programatcally add a sprite

I'm create a grid of tiles. The tiles are sprites and I'm laying them out programmatically. Here is the code to generate one of the tiles.

public Sprite tile_plain; // assign this in unity by dragging a sprite to it void Start() { GameObject tile = new GameObject(); tile.AddComponent(); tile.GetComponent().sprite = tile_plain; tile.transform.position = new Vector2((i * tile_plain.rect.width)/tile_plain.pixelsPerUnit, 5f); }

Tuesday, January 27, 2015

Unity 2D Units

I'm building a tile system to display a grid of sprits in my game. I'm old school and used to just using pixels so a 32 pixel wide sprite is 32 pixels wide. so when I do this to create a strip of sprites
(a public method variable)public Sprite tile_plain; int i; for (i=0;i<25;i++) { GameObject tile = new GameObject(); tile.AddComponent(); tile.GetComponent().sprite = tile_plain; tile.transform.position = new Vector2((i * tile_plain.rect.width), 5f);

Then only one sprite element shows up on the screen and the others, while they are there are off the screen. To do this, you have to divide by the pixels per unit identified in the sprite.
(a public method variable)public Sprite tile_plain; int i; for (i=0;i<25;i++) { GameObject tile = new GameObject(); tile.AddComponent(); tile.GetComponent().sprite = tile_plain; tile.transform.position = new Vector2((i * tile_plain.rect.width)/tile_plain.pixelsPerUnit, 5f);
This was a good Stackoverflow post (Unity 4.3 - understanding positions and screen resolution, how to properly set position of object?) on the topic.