# Rect with Z instead of Y or similar alternatives

Hi there! I’m editing this question…

I came to understand that the Rect class has a very valuable Function called Contains, which I’d like to use.

My problem is that the matrix I use to build those Rects has X,Z coordinates, and when I pass them to a Rect my Zs become Ys.

I just need a Class that holds 4 Vector3s as vertices, without meshes or other stuff. I could build up my own one but that Cointains function would require me some extra work ( since my skills are halfway to acceptability).

Is there something else I can use to achieve this goal or maybe a way to build Rects with coordinates I want? Maybe inheriting from Rect/similar and then…? Thanks for the patience!

This is what I’ve got so far, if you’re interested in commenting ( I’d like some suggestions about the code because I’m a self taught “programmer” and I don’t know if my way is canon or utterly twisted):

``````using UnityEngine;
using System.Collections;
[System.Serializable]

public class RectZ{

//Do you like Rects? Would you like them to be X,Z and Y,Z too? Then you'll love this!

public float wMIn;						//minimum width... sort of base
public float wMAx;						//maximum width
public float hMIn;						//minimum height
public float hMAx;						//maximum height
public Vector3 center;					//the center of this RectZ
public Vector3 size;					//the size
public Vector3 extents;					//..........
public Vector3 worldCoordinates;		//.... pretty straightforward ain't it?

//SO...
//To build a new RectZ from another script, you pass these parameters inside its constructor...
public RectZ (float _UpMinVertex, float _UpMaxVertex, float _DownMinVertex, float _DownMaxVertex, int _1xy_2xz_3yz){

wMIn = _UpMinVertex;
wMAx = _UpMaxVertex;
hMIn = _DownMinVertex;
hMAx = _DownMaxVertex;

//I use an INT as a BOOL to understand which axes you want... this makes the call easier
if(_1xy_2xz_3yz == 1){
size = new Vector3(wMAx-wMIn,hMAx-hMIn,0);
extents = new Vector3(size.x/2,size.y/2,0);
center = new Vector3(size.x-extents.x,size.y-extents.y,0);
worldCoordinates = new Vector3(wMIn+center.x,hMIn+center.y,0);
}
if(_1xy_2xz_3yz == 2){
size = new Vector3(wMAx-wMIn,0,hMAx-hMIn);
extents = new Vector3(size.x/2,0,size.z/2);
center = new Vector3(size.x-extents.x,0,size.z-extents.z);
worldCoordinates = new Vector3(wMIn+center.x,0,hMIn+center.z);
}
if(_1xy_2xz_3yz == 3){
size = new Vector3(0,wMAx-wMIn,hMAx-hMIn);
extents = new Vector3(0,size.y/2,size.z/2);
center = new Vector3(0,size.y-extents.y,size.z-extents.z);
worldCoordinates = new Vector3(0,wMIn+center.y,hMIn+center.z);
}
}
}
``````

To call it I just type things like this:

``````RectZ cell = new RectZ(vertex.x,vertex.x+tileSize,vertex.z,vertex.z+tileSizeZ,2);
``````

I’ve skipped other functions of RectZ because I haven’t tested them yet, but I’ll update them as I progress.
This thing, called using my matrix X,Z, works!

There are a Bounds object in Unity that you may use if fit your needs:

Otherwise, you can write a custom class like this example:

public class foo
{
public vector3 vertices;

`````` public bool Contains(vector3 v)
{
..... implement contains logic here
}
``````

}