我的寵物項目中有一個角色、背景和相機。我想讓背景跟隨相機,我做到了。但是背景移動得非常順利。我有兩個腳本:用於相機和背景。
public class CameraFollowScript : MonoBehaviour
{
[SerializeField]
public Transform player;
[SerializeField]
private float rightLimit;
[SerializeField]
private float leftLimit;
[SerializeField]
private float bottomLimit;
[SerializeField]
private float topLimit;
void FixedUpdate()
{
if (player)
{
var targetPos = new Vector3(player.position.x, player.position.y, transform.position.z);
Vector3 pos = Vector3.Lerp(transform.position, targetPos, 1f);
transform.position = targetPos;
}
transform.position = new Vector3(
Mathf.Clamp(transform.position.x, leftLimit, rightLimit),
Mathf.Clamp(transform.position.y, bottomLimit, topLimit),
transform.position.z);
}
private void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawLine(new Vector2(leftLimit, topLimit), new Vector2(rightLimit, topLimit));
Gizmos.DrawLine(new Vector2(leftLimit, bottomLimit), new Vector2(rightLimit, bottomLimit));
Gizmos.DrawLine(new Vector2(leftLimit, topLimit), new Vector2(leftLimit, bottomLimit));
Gizmos.DrawLine(new Vector2(rightLimit, topLimit), new Vector2(rightLimit, bottomLimit));
}
}
和背景
public class BackGroundScript : MonoBehaviour
{
[SerializeField] public Transform player;
void FixedUpdate()
{
if (player)
{
var targetPos = new Vector3(player.position.x, transform.position.y, transform.position.z);
Vector3 pos = Vector3.Lerp(transform.position, targetPos, 1f);
transform.position = pos;
}
}
}
我有一個關於我的問題的小 gif。點擊
它的 fps 很差,但我沒有任何變體。
你可以看到背景在從相機延遲移動,因此,當相機停止時,它會抽搐
我嘗試刪除 Lerp,但沒有幫助
首先,將 1f 的常量值分配為 lerp 最後一個參數是沒有用的。這個:
Vector3 pos = Vector3.Lerp(transform.position, targetPos, 1f);
等於:
Vector3 pos = targetPos
但這不是問題。問題是您使用了 FixedUpdate,它應該用於進行物理操作(計算力等)。它與幀速率不同步。因此,您會看到這種抖動。對於移動背景,您不需要物理。只需在與幀速率同步的 Update 中編寫您的代碼。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句