As I found this to be very difficult I thought I would post the final answer and hopefully would help someone else. My set up is to have the player's position located at an empty game object named cube Based off the last (initial explosion location) you can move the adjustment left right and add/drop based on players view direction and not world space. Any questions please feel free to message me. C# Code: Code (csharp): void adjustFire (string dir, string dist, string alt) { numberDir = (float)System.Convert.ToInt32(dir); //Converts our string left/right correction into a float numberDist = (float)System.Convert.ToInt32(dist); //Converts our string add/drop correction into a float tempVector = explosionVector; //Obtain last position of explosion explosionClone = Instantiate(explosion,explosionVector,Quaternion.identity) as GameObject; //Instantiate an explosion object explosionClone.name = "explode"; //Name is so we can delete later explosionClone.transform.parent = selectedCube.transform; //Parent to the OP so we can slew it left and right vectorDistance = Vector3.Distance (explosionVector, myCamera.transform.position); //Find the distance from last explosion to our OP OTFactor = vectorDistance / 1000; //Find the Observer to Target Factor (This helps us convert to an angle) if (OTFactor > 1) //If the OTFactor is greater then 1 we will devide it { myAngle = numberDir / OTFactor; //Converts our string left/right correction into a float } else { myAngle = numberDir * OTFactor; //If its less then 1 then we have to multiply or it gives us a bad number } if (leftRight) { myAngle = myAngle * -1; //Determine whether we are going left or right } if (addDrop) { numberDist = numberDist * -1; //Determine whether we are going to add or drop } myAngle = myAngle / 17.77777777777778f; //Convert from mils to degrees tempVector.x = 0; tempVector.y = myAngle; //Put our found angle into a vector so we can use it later tempVector.z = 0; selectedCube.transform.eulerAngles += tempVector; //Adjust our cubes rotation, use eulerangles based off of our given information tempVector.x = 0; tempVector.y = 0; tempVector.z = numberDist; //Put our distance adjustment into a vector so we can use it later explosionClone.transform.localPosition += tempVector; //Add our distance based off local position so as to add or subtract distance from our explosion tempVector = explosionClone.transform.position; //Find out what our new position is tempVector.y = Terrain.activeTerrain.SampleHeight(explosionClone.transform.position); //At our new position find the terrain height and store in the y value explosionClone.transform.position = tempVector; //reset our position including terrain elevation explosionVector = explosionClone.transform.position; //reset our last explosion place holder to the current explosion explosionCounter = true; //turn on count down until destroy explosion timeCounter = Time.time; //Set the timer }