-I have set up a script that shoots a ray at the terrain.
-An object follows the hit.point
-The object rotates towards the hit.normal
-The object is able to be rotated along its local Y axis - this is where I am stuck since Y is not always “up”
Manually I can achieve what I want by rotating the Y axis of the object locally in the scene view while paused but I would like to achieve this through script.
Prior to adding in the hit.normal rotation this script worked how I would like minus the following of the hit.normal.
I know I am missing a step and I probably need to store the FromToRotation somewhere and add desired rotation, but I am a little lost on how to achieve it since I cannot just rotate the y axis alone.
Thanks
RaycastHit hit;
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
if (Physics.Raycast (ray, out hit, Mathf.Infinity, canBuildLayers)) {
spawnpoint = hit.point;
}
Vector3 rotateNeg = new Vector3 ( thingToPlace.transform.localEulerAngles.x, thingToPlace.transform.localEulerAngles.y - 22.50000f, thingToPlace.transform.localEulerAngles.z);
Vector3 rotatePos = new Vector3 ( thingToPlace.transform.localEulerAngles.x, thingToPlace.transform.localEulerAngles.y + 22.50000f, thingToPlace.transform.localEulerAngles.z);
Vector3 slightRotateNeg = new Vector3 (thingToPlace.transform.localEulerAngles.x, thingToPlace.transform.localEulerAngles.y - 5.00000f, thingToPlace.transform.localEulerAngles.z);
Vector3 slightRotatePos = new Vector3 (thingToPlace.transform.localEulerAngles.x, thingToPlace.transform.localEulerAngles.y + 5.00000f, thingToPlace.transform.localEulerAngles.z);
if (Input.GetAxis ("Mouse ScrollWheel") < 0) {
if(Input.GetKey (KeyCode.LeftAlt)){
thingToPlace.transform.eulerAngles = slightRotateNeg;
}else{
thingToPlace.transform.eulerAngles = rotateNeg;
}
} else if (Input.GetAxis ("Mouse ScrollWheel") > 0) {
if(Input.GetKey (KeyCode.LeftAlt)){
thingToPlace.transform.eulerAngles = slightRotatePos;
}else{
thingToPlace.transform.eulerAngles = rotatePos;
}
}
thingToPlace.transform.position = spawnpoint;
thingToPlace.transform.rotation = Quaternion.FromToRotation(Vector3.up, hit.normal); // TODO newly added to align to terrain. follows terrain but does not allow rotation