我试图制作鼠标瞄准镜,水平和垂直旋转我的播放器,看看播放器并保持恒定的距离。 在那个版本它工作正常,但我也不能使它成为横向。 每个版本的相机都会冻结,我自己也会旋转我的播放器。 我是编程的新手,所以我可以通过正确的target.transform.eulerAngles.y分配给垂直但我不能这样做。
public class MouseAimCamera : MonoBehaviour {
public GameObject target;
public float rotateSpeed = 5;
Vector3 offset;
void Start() {
offset = target.transform.position - transform.position;
}
void LateUpdate() {
float horizontal = Input.GetAxis("Mouse X") * rotateSpeed;
target.transform.Rotate(0, horizontal, 0);
float desiredAngle = target.transform.eulerAngles.y;
Quaternion rotation = Quaternion.Euler(0, desiredAngle, 0);
transform.position = target.transform.position - (rotation * offset);
transform.LookAt(target.transform);
}
}
如果有人能帮助我,我很高兴。
答案 0 :(得分:2)
这将在世界空间中旋转,在某些角度可能会感觉不对,因为相机并不总是直接朝向。
public class MouseAimCamera : MonoBehaviour {
public GameObject target;
public float rotateSpeed = 5;
void Start() {
transform.parent = target.transform;
transform.LookAt(target.transform);
}
void LateUpdate() {
float horizontal = Input.GetAxis("Mouse X") * rotateSpeed;
float vertical = Input.GetAxis("Mouse Y") * rotateSpeed;
target.transform.RotateAround(target.transform.position, Vector3.up, horizontal);
target.transform.RotateAround(target.transform.position, Vector3.left, vertical);
}
}
这将在本地空间中旋转,并且可能会感觉更自然,具体取决于您尝试构建的内容。这与您原来的解决方案很接近,所以我猜测它并不是您想要的。
public class MouseAimCamera : MonoBehaviour {
public GameObject target;
public float rotateSpeed = 5;
void Start() {
transform.parent = target.transform;
transform.LookAt(target.transform);
}
void LateUpdate() {
float horizontal = Input.GetAxis("Mouse X") * rotateSpeed;
float vertical = Input.GetAxis("Mouse Y") * rotateSpeed;
target.transform.Rotate(vertical, horizontal, 0);
}
}