- Home /
Unity: Switch position between quads
So I made this puzzle and the core mechanics seems to work just fine.
I tried to implement a randomizer function so the puzzle wasn't already solve when you first load it up. I did the thing that made most sense in my mind, and that was to give each quad a unique name, and there after made them switch positions with the transform.positions command. When trying to execute this function all i got was an CS0103 error that tells me that the unique assigned names didn't exist in the current context, which makes sense since the quads first will be created when the script is executed.
I just want to know if this is actually possible with my code.
public class Puzzle : MonoBehaviour {
public Texture2D image;
//Amount of blocks per line(can be changed inside of unity)
public int blocksPerLine = 4;
Block emptyBlock;
//The function that calls the CreatePuzzle function
void Start()
{
CreatePuzzle();
Randomizer();
}
//CreatePuzzle function
void CreatePuzzle()
{
Texture2D[,] imageSlices = ImageSlicer.GetSlices(image, blocksPerLine);
//Everytime y is equal to 0 and less than the blocksPerLine it will postfix y, meaning it will create another block until it is at its limit.
for (int y = 0; y < blocksPerLine; y++)
{
for(int x = 0; x < blocksPerLine; x++)
{
//This creates the gameobject as the primitive type: Quad.
GameObject blockObject = GameObject.CreatePrimitive(PrimitiveType.Quad);
blockObject.name = "Piece" + x;
blockObject.transform.position = -Vector2.one * (blocksPerLine - 1) * .5f + new Vector2(x, y);
blockObject.transform.parent = transform;
Block block = blockObject.AddComponent<Block>();
block.OnBlockPressed += PlayerMoveBlockInput;
block.Init(new Vector2Int(x, y), imageSlices[x, y]);
//Creates an empty block, so that you're able to slide the puzzle around
if(y == 0 && x == blocksPerLine - 1)
{
blockObject.SetActive(false);
emptyBlock = block;
}
}
}
//Sets the sixe of the block to match the Camera view
Camera.main.orthographicSize = blocksPerLine * .55f;
}
void Randomizer()
{
Piece0.transform.positions = Piece1.transform.positions;
}
//The function that makes the player available to move the blocks
void PlayerMoveBlockInput(Block blockToMove)
{
if ((blockToMove.coord - emptyBlock.coord).sqrMagnitude == 1)
{
Vector2Int targetCoord = emptyBlock.coord;
emptyBlock.coord = blockToMove.coord;
blockToMove.coord = targetCoord;
Vector2 targetPosition = emptyBlock.transform.position;
emptyBlock.transform.position = blockToMove.transform.position;
blockToMove.transform.position = targetPosition;
}
}
}
Your answer
Follow this Question
Related Questions
Randomize texture within prefab 0 Answers
Random placement of jigsaw puzzle 0 Answers
Script causing huge lag 0 Answers
get a gameobject position from vector3 array? 1 Answer
How to transform position of object A to object C (C is a child of B object) 1 Answer