【发布时间】:2021-12-12 16:34:19
【问题描述】:
在我的游戏中,我有两种模式,步行和飞行。每个都有单独的相机行为(使用相同的相机)。更改模式时,我希望在相机位置之间平滑过渡。
飞行相机:
Vector3 moveCamTo = transform.position - transform.forward * 10.0f + Vector3.up * 5.0f;
float bias = 0.96f;
Camera.main.transform.position = Camera.main.transform.position * bias + moveCamTo * (1.0f - bias);
Camera.main.transform.LookAt(transform.position + transform.forward * 30.0f);
步行相机:
float smoothFactor = 0.5f;
float rotationSpeed = 13.0f;
Quaternion camTurnAngle = Quaternion.AngleAxis(Input.GetAxis("Mouse X") * rotationSpeed, Vector3.up);
_cameraOffset = camTurnAngle * _cameraOffset;
Vector3 newPos = transform.position + _cameraOffset;
Camera.main.transform.position = Vector3.Slerp(Camera.main.transform.position, newPos, smoothFactor);
Camera.main.transform.LookAt(transform.position);
我真的很难弄清楚。当模式发生变化时,我尝试调用一个方法(如下所示),我认为这可能是正确的......但它实际上不起作用,根本不会转换,因为下一帧(在FixedUpdate),它会查看模式是什么,并仅使用该相机位置。
void transitionCamera(Vector3 newPos) {
float transitionDuration = 2.5f;
float t = 0.0f;
Vector3 startingPos = Camera.main.transform.position;
while (t < 1.0f) {
t += Time.deltaTime * (Time.timeScale/transitionDuration);
Camera.main.transform.position = Vector3.Lerp(startingPos, newPos, t);
}
}
非常感谢任何建议/信息!
【问题讨论】: