【发布时间】:2018-03-01 17:18:02
【问题描述】:
场景如下 - 用户可以点击一个角色,让主摄像头看到那个选定的角色,使用以下代码:
private void RotateTowardsCharacter() {
RaycastHit hit;
var cameraCenter = Camera.main.ScreenToWorldPoint(new Vector3(Screen.width / 2, Screen.height / 2, Camera.main.nearClipPlane));
if (Physics.Raycast(cameraCenter, transform.forward, out hit, 1000)) {
var obj = hit.transform.gameObject;
if (obj == _activeCharacter) {
return;
}
}
var relativePos = _activeCharacter.transform.position - transform.position;
var targetRotation = Quaternion.LookRotation(relativePos.normalized);
var rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.deltaTime);
transform.rotation = rotation;
}
我还想使用 WSAD(或箭头)键启用相机移动,所以我创建了以下代码:
private void MoveCamera() {
var x = Input.GetAxis("Horizontal") * Time.deltaTime * 20;
var z = Input.GetAxis("Vertical") * Time.deltaTime * 20;
if (x == 0 && z == 0) {
return;
}
transform.Translate(x, 0, z, Space.Self);
}
您可能已经看到了问题 - 如果相机在 X 轴上旋转,那么按下 W 键实际上会使相机放大它指向的任何东西。 现在,我想要实现的目标:
想象你走在街上,低着头,看着你的 iPhone - 即使你的头在 X 轴上旋转,你还是沿着人行道向前移动 - 没有靠近地面,这很奇怪: )。如果你绕着 Z 轴稍微倾斜你的头,你仍然会走直线,所以实际上影响你运动方向的一件事是你的身体绕 Y 轴的旋转。
这就是我想要实现的 - 我想在一个平面上移动相机,该平面位于其当前 Y 坐标的高度,向前或向后,向左或向右。
【问题讨论】: