# Stretch a Quad from one object to another

I am wondering what a good efficient way to Instantiate a simple textured Quad between two objects. (Think of a lightning arc reaching from GO to enemy GO;

I have a basic setup like in:
http://docs.unity3d.com/Manual/DirectionDistanceFromOneObjectToAnother.html

But am curious how I would get the prefab(quad) to stretch the distance of the magnitude, bonus if I can get the angle to be more precise, and flatten the rotation so the quad is flat almost parallel the ground.

``````void OnTriggerEnter(Collider hit)
{
if (hit.gameObject.tag == "enemy") {
Debug.Log("lightning orb hit enemy");
my_enemy_hit = hit.gameObject;
assign_target(my_enemy_hit);

// TURN TOWARDS
Vector3 targetDir = my_target_transform.position - transform.position;
float turn = 10 * Time.deltaTime;
Vector3 newDir = Vector3.RotateTowards(transform.forward, targetDir, turn, 0.0F);
//Debug.DrawRay(transform.position, newDir, Color.red);
transform.rotation = Quaternion.LookRotation(newDir);
// create fx
//Vector3 newdir = transform.position - my_target_transform.position;
//newdir.x = 0;
//var magni = newdir.magnitude;

Quaternion newquat = Quaternion.LookRotation(newDir);
//Vector3.MoveTowards(transform, my_target_transform, 1.0f);

Instantiate(lightning_fx01_src, transform.position, newquat);
hit_lightning_orb(my_enemy_hit, 1);
rigidbody.velocity = Vector3.zero;
}

}
``````

This could be a starting point; no scaling, it directly moves the vertices.

``````//assign these variables yourself, depending on how you want your quad to stretch
Vector3 startPos1;
Vector3 startPos2;
Vector3 endPos1;
Vector3 endPos2;

Mesh mesh = GetComponent<MeshFilter>().mesh;
Vector3[] vertices = mesh.vertices;
//switch around where the start and end positions go, just try it out until all four vertices go to the right positions
vertices[0] = new Vector3(startPos1);
vertices[1] = new Vector3(startPos2);
vertices[2] = new Vector3(endPos1);
vertices[3] = new Vector3(endPos2);
mesh.vertices = vertices;
``````

This re-positions a quad using two Vertor3’s. As long as the Vector3’s have the same Y value, it results in a quad that’s facing up and parallel to the ground.

``````private void stretchQuad(GameObject quad, Vector3 start, Vector3 end, float lineWidth = 0.3f)
{
quad.transform.position = Vector3.Lerp(start, end, 0.5f);
quad.transform.LookAt(end);
quad.transform.Rotate(90, 0, 0);
quad.transform.localScale = new Vector3(lineWidth, Vector3.Distance(start, end), 1);
}
``````