我在一个2d平台游戏中工作,我应用了cinemachine相机和视差脚本来获得良好的效果,但是视差正在摇晃和震动,我发现cinamchine是原因,因为相机摇晃,当我禁用cinemachine时,它工作得很顺利
这里是视差代码private float startpos;
private GameObject cam;
[SerializeField] private float parallax;
[SerializeField] private float speed = 0.1f;
// Start is called before the first frame update
void Start()
{
cam = GameObject.Find("Main Camera");
startpos = transform.position.x;
}
// Update is called once per frame
void Update()
{
float distance = (cam.transform.position.x * parallax);
transform.position = new Vector3(startpos + distance, transform.position.y, transform.position.z);
}
和MC vcam1的设置输入图片描述
我找不到任何解决那个问题的方法你可以尝试将CinemachineBrain的更新方法设置为Manual update,然后在另一个脚本中调用ManualUpdate()。
using UnityEngine;
using Cinemachine;
public class ManualBrainUpdate : MonoBehaviour
{
public CinemachineBrain cineBrain;
public float smoothTime;
private void Start()
{
cineBrain = GetComponent<CinemachineBrain>();
}
void Update()
{
cineBrain.ManualUpdate();
}
}
为了避免Unity中的任何抖动(就像相机在抖动时添加到distance
),请使用各种SmoothDamp
功能,例如https://docs.unity3d.com/ScriptReference/Vector3.SmoothDamp.html:
public float smoothTime = 0.3f; // adjust this to taste
private float distance;
private Vector3 velocity = Vector3.zero;
private Vector3 targetPos
void Update()
{
distance = cam.transform.position.x * parallax;
targetPos = new Vector3(startpos + distance, transform.position.y, transform.position.z)
transform.position = Vector3.SmoothDamp(transform.position, targetPos, ref velocity, smoothTime);
}