在 Unity 中移动相机抖动

时间:2021-01-19 15:04:20

标签: c# visual-studio unity3d

我正在开发一款速降赛车,我想让相机抖动到不同程度,以传达玩家的速度越来越快。现在我有一个名为“CameraHolder”的游戏对象,它是主摄像机的父级。

我有一个脚本附加到跟随玩家的支架上,另一个脚本附加到相机上,用于在该支架内摇晃它。

CameraHolder 跟随脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraFollow : MonoBehaviour
{
    public Camera cam;
    public Transform player;
    public Vector3 offset;
    public float speed = 2f;
    public Rigidbody rb; 
    public float startingFieldOfView = 60f;

    void FixedUpdate()
    {
        float interpolation = speed * Time.deltaTime;

        Vector3 cameraPosition = new Vector3(Mathf.Lerp(transform.position.x, player.position.x, interpolation), player.position.y + player.localScale.y + offset.y, player.position.z + -player.localScale.z + offset.z);
        
        // Change of camera FOV depending on the speed of the rigidbody
        transform.position = cameraPosition;
       
        cam.fieldOfView = Mathf.Lerp(cam.fieldOfView, startingFieldOfView + (rb.velocity.magnitude / 3), .1f);

CameraShake 脚本附加到子主摄像头

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CameraShake : MonoBehaviour
{
    public Rigidbody player;
    public float shakeThreshold;
    public float shakeMagnitude;

    private void Update()
    {
        float x = Random.Range(-shakeMagnitude, shakeMagnitude);
        float y = Random.Range(-shakeMagnitude, shakeMagnitude);
        if (player.velocity.magnitude >= shakeThreshold)
        {
            transform.localPosition = new Vector3(x, y, transform.position.z);
        }
    }
}

我想我可能误解了 localPosition 的工作原理。我认为它会在支架内移动时随机移动相机,但它什么也没做。我应用这个错误还是逻辑错误?

1 个答案:

答案 0 :(得分:1)

我认为使用电影机真的对你有帮助。

要替换您的 CameraFollow 脚本,您可以使用带有属性 Follow 的虚拟相机,有关更多信息,您可以去那里:https://docs.unity3d.com/Packages/com.unity.cinemachine@2.6/manual/CinemachineSetUpVCam.html

要替换您的相机抖动,您可以在此处检查噪声属性:https://docs.unity3d.com/Packages/com.unity.cinemachine@2.6/manual/CinemachineVirtualCameraNoise.html

有关电影机的更多信息,请查看此处的文档:https://docs.unity3d.com/Packages/com.unity.cinemachine@2.6/manual/CinemachineUsing.html