【问题标题】:Transition between two camera positions两个摄像机位置之间的过渡
【发布时间】: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);
  }
}

非常感谢任何建议/信息!

【问题讨论】:

    标签: c# unity3d camera


    【解决方案1】:

    您的方法transitionCamera 全部在一个帧内执行!

    您宁愿将其转换为Coroutine,例如

    IEnumerator transitionCamera(Vector3 newPos) 
    {
        var transitionDuration = 2.5f;
        var startingPos = Camera.main.transform.position;
        for (var t = 0f; t < 1.0f; t += Time.deltaTime / transitionDuration) 
        {
            Camera.main.transform.position = Vector3.Lerp(startingPos, newPos, t);
    
            yield return null;
        }
    
        Camera.main.transform.position = newPos;
    }
    

    您可以使用StartCoroutine而不是直接调用它

    StartCorouine (transitionCamera(newPosition));
    

    【讨论】:

      猜你喜欢
      • 2021-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-05
      相关资源
      最近更新 更多