I've been working on this for about a day or two, but I finally figured it out! It's pretty simple... Code (CSharp): transform.position = followObject.position + offset; transform.LookAt(lookObject); Vector3 finishedRotation = new Vector3(lookObject.eulerAngles.x, transform.eulerAngles.y, lookObject.eulerAngles.z); if(Physics.Linecast(raycastPoint.position, transform.position, out hit)) { transform.position = hit.point; print("collided with wall"); } The raycastpoint.position should be a transform near the player, but not touching it. If it doesn't work, that's because the transform is in the player, and the linecast is touching it, so move it out. I don't want credit, I was just showing this off. If you have any questions, just reply!