当我有一个平稳的相机跟着我时,我的角色很口吃,虽然这并不会让我烦恼。这让玩家们感到恼火。
那么有什么方法可以解决这个问题吗?平滑的相机看起来非常好,对其他人也是如此,但只有口吃需要修复,它看起来很棒。
相机脚本:
using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour {
public GameObject cameraTarget; // object to look at or follow
public GameObject player; // player object for moving
public float smoothTime = 0.1f; // time for dampen
public bool cameraFollowX = true; // camera follows on horizontal
public bool cameraFollowY = true; // camera follows on vertical
public bool cameraFollowHeight = true; // camera follow CameraTarget object height
public float cameraHeight = 2.5f; // height of camera adjustable
Vector2 velocity; // speed of camera movement
private Transform thisTransform; // camera Transform
// Use this for initialization
void Start()
{
thisTransform = transform;
}
// Update is called once per frame
void Update()
{
if (cameraFollowX)
{
thisTransform.position = new Vector3(Mathf.SmoothDamp(thisTransform.position.x, cameraTarget.transform.position.x, ref velocity.x, smoothTime), thisTransform.position.y, thisTransform.position.z);
}
if(cameraFollowY){
thisTransform.position = new Vector3(thisTransform.position.x, Mathf.SmoothDamp(thisTransform.position.y, cameraTarget.transform.position.y, ref velocity.y, smoothTime), thisTransform.position.z);
}
}
}
答案 0 :(得分:1)
我很确定这是因为试图在物理时间步长上平滑移动目标
我只需更改代码即可平滑相机的一小部分 - >带有公差的目标距离
e.g。
using UnityEngine;
using System.Collections;
public class CameraController : MonoBehaviour {
public GameObject cameraTarget; // object to look at or follow
public GameObject player; // player object for moving
public float smoothTime = 0.1f; // time for dampen
public bool cameraFollowX = true; // camera follows on horizontal
public bool cameraFollowY = true; // camera follows on vertical
public bool cameraFollowHeight = true; // camera follow CameraTarget object height
public float cameraHeight = 2.5f; // height of camera adjustable
Vector2 velocity; // speed of camera movement
private Transform thisTransform; // camera Transform
// Charleh - added these tweakable values - change as neccessary
private float threshold = 0.5f; // Threshold distance before camera follows
private float fraction = 0.7f; // Fractional distance to move camera by each frame (smooths out the movement)
// Use this for initialization
void Start()
{
thisTransform = transform;
}
// Update is called once per frame
void Update()
{
// Charleh - updated code here
if (cameraFollowX)
{
if(Math.abs(cameraTarget.transform.position.x - thisTransform.position.x) > threshold)
{
// target vector = (target.position - this.position)
// now multiply that by the fractional factor and your camera will
// move 70% of the distance (0.7f) towards the target. It will never
// actually reach the target hence the threshold value (but you probably don't
// want this as it can result in a noticeable SNAP if you try to put the camera
// on the target when it's beneath the threshold)
// Edit: oops, missing brackets which are quite important!
thisTransform.position.x = (cameraTarget.transform.position.x - thisTransform.position.x) * fraction;
}
}
// Repeat for Y
}
}