我正在开发一款速降赛车,我想让相机抖动到不同程度,以传达玩家的速度越来越快。现在我有一个名为“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 的工作原理。我认为它会在支架内移动时随机移动相机,但它什么也没做。我应用这个错误还是逻辑错误?
答案 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