2
\$\begingroup\$

I have been trying to do this for a few hours in unity now but cant get my head around it. basically i have 4 points(vector3) 1 each for the 4 corners topleft, topright, bottomleft, bottomright. now i have a sprite that i use as a block what i want to do is basically fit X number of blocks within the four points. see the image below. Icant think of a way to do this right now.enter image description here I would really appreciate any help in how to achieve this. thanks for helping.

\$\endgroup\$

1 Answer 1

4
\$\begingroup\$

first time here, have some time to kill so this is what I did. I'm assuming this is in a gui/2d game. This is what i did to get it to work.

create a canvas and add 4 UI images. These act as the 4 points(vector3's) enter image description here create a script and setup a way to draw lines so that you know that you are getting the right positions

using UnityEngine; using System.Collections; public class drawAndCalculate : MonoBehaviour { public GameObject topLeft,topRight,bottomLeft,bottomRight,cube; GameObject [] copyCube; void OnDrawGizmos(){ //fix the positions to make "perfect" straight tines Vector3 topRight_pos = topRight.transform.position; Vector3 botLeft_pos = bottomLeft.transform.position; Vector3 botRight_pos = bottomRight.transform.position; //adjuest them topRight_pos.y = topLeft.transform.position.y; botRight_pos.x = topRight_pos.x; botLeft_pos.x = topLeft.transform.position.x; botLeft_pos.y = botRight_pos.y; //save them back topRight.transform.position = topRight_pos; bottomRight.transform.position = botRight_pos; bottomLeft.transform.position = botLeft_pos; Gizmos.color = Color.red; Gizmos.DrawLine (topLeft.transform.position, topRight.transform.position); Gizmos.color = Color.green; Gizmos.DrawLine (topRight.transform.position, bottomRight.transform.position); Gizmos.color = Color.blue; Gizmos.DrawLine (bottomRight.transform.position, bottomLeft.transform.position); Gizmos.color = Color.cyan; Gizmos.DrawLine (bottomLeft.transform.position, topLeft.transform.position); } } 

now you can move the images to make any rectangle. Now that you have the info is a matter of slicing into even proportions, so:

  1. create an array of gameobjects,
  2. get the width and height of the rectangle
  3. resize each gameobject to the width/5 and height/5
  4. position them in within the rectangle

--

// Use this for initialization void Start () { //original is 100 by 100, Lets make o copy that is 50'50 //original question only want a SX S = 25 cubes //get the size of the rectangle that the cubes wilt be placed //using Local position since they are all inside canvas to get the actual values float rectwidth = topRight.transform.localPosition.x - topLeft.transform.localPosition.x; float rectheight = topRight.transform.localPosition.y - bottomRight.transform. localPosition.y; copyCube = new GameObject[25]; //make 25 for (int i = 0; i < 25; i++) { copyCube [i] = Instantiate (cube) as GameObject;//crate them copyCube[i].transform.SetParent (this.transform.parent,false);//set the parent so that the scale is the some copyCube[i].transform.localScale = new Vector3(1,1,1 );//set scale just in case. size is based on scaLe of 2 copyCube[i].transform.GetComponent<RecTransform>().sizeDelta = new vector2(rectwidth/s,rectheight/5);//resizethen //place them in the cube for (int i = 0; i < 5; i++) { for (int j = 0; j <5; j++) { //figure out the location float xpos = (rectwidth/5) * j; float ypos = (rectheight/5) * i; //remember to add the offset of where the cube starts //in unity, origin(0,0) is on the bottom Left not top Left Like Java //and add half of o cube because of the cube having the pivot in the middle xpos..bottomLeft.transform.localPosition.x.(rectwidth/5)/2; ypos += bottomLeft.transform.localPosition.y +(rectheight / 5) / 2; copyCube [j+(i*5)].transform.localPosition = new Vector2 (xpos, ypos);//set the position copyCube[j+(i*5)].name = "pepe"; } } } 

done should be good to go!

enter image description here

\$\endgroup\$
1

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.