JS access spherecast position

In this 2d concept im trying to make a bacteria colony produce spores. So i make it look in a random direction around itself and if it casts a sphere in that direction without hitting any other spores, then it grows a spore there. But, im not sure how to re-access the spherecast’s position once iv used it. here is my code:

#pragma strict
var growthCount = 0;
var growthCountMax: int;
var newSpore: GameObject;
var randomDir: Vector3;
var hit: RaycastHit;
var spawnDistMaster: float;
var spawnDist: float;
var spawnDistNoise: float;
var newSporePos: Vector3;

function Start () 
{

}

function Update () 
{
	
}

function incGrowthCount(num:int)
{
	growthCount = num-1;
}

function lookForGrowSpot()
{
	spawnDist = spawnDistMaster + Random.Range(-spawnDistNoise, spawnDistNoise);
	randomDir = Vector3(Random.Range(-359,359),0,Random.Range(-359,359));
	Debug.DrawRay(transform.position, randomDir, Color.cyan);
	
	if(!Physics.SphereCast(transform.position, .3, randomDir, hit, spawnDist))
	{
		Debug.Log("Hit Nothing");
		//store the spherecasts ending position in "newSporePos"
		//newSporePos = ?;
		grow();
		return true;
	}
	Debug.Log("hit somthing");
	return false;
}

function grow()
{
	//make spore at newSporePos
}

also as a bonus question: is there a better way to make a random direction in 2d than what i did? what i have now just feels wrong.

The last will be first: you can generate a vector pointing in a random direction inside the plane XZ with a code like this:

randomDir = Quaternion.Euler(0, Random.Range(0, 360), 0) * Vector3.forward;

It generates a random rotation from 0 to 359 and applies it to a unit vector that originally pointed in the Z axis direction.

About the SphereCast: you should calculate the position by adding the random direction vector to the origin - but make sure that the vector length is equal to the distance to the new spore - it will be easy if randomDir is generated like above, because it has unit length: just multiply it by the desired distance. The code could be like this:

...
function lookForGrowSpot()
{
    // generate unit vector pointing in a random direction:
    randomDir = Quaternion.Euler(0, Random.Range(0, 360), 0) * Vector3.forward;
    Debug.DrawRay(transform.position, randomDir, Color.cyan);
    // if position free...
    if(!Physics.SphereCast(transform.position, .3, randomDir, hit, spawnDist))
    {  // calculate the position:
       newSporePos = transform.position + spawnDist * randomDir;
       grow();
       return true;
    }
    return false;
}

NOTE: The spores must have colliders in order to be detected by SphereCast.