消除因将摄像机重新放置在定义范围内而引起的摄像机抖动

时间:2019-01-31 22:28:14

标签: unity3d

enter image description here

这是我试图在3D空间中实现的图像。我希望物体在绿色区域中跟随我的手指,但是如果我将手指移到绿色区域的边缘,则该对象将停留在绿色区域的边缘。我已经用下面的代码实现了这一点,但是当我的手指在红色区域周围移动时,由于对象不断在其范围内弹回,因此会发生很多抖动和削波。当我的手指在玩家圈外的红色区域内握住时,会引起抖动。玩家没有继续被卡在边界内,而是试图继续然后被定位在边界内,从而引起抖动。我正在寻找一种方法来限制玩家在范围内的移动而不必重置其位置。我的主摄像机安装在运动物体上,因此消除抖动非常重要。如何解决这个问题?

public class Player : MonoBehaviour
{
    public Camera movementCam;
    readonly float radius = 0.45f;
    readonly float speed = 3f;
    Ray firstTouchPos;
    Vector2 playerPos;
    [SerializeField] Vector3 targetPosition;
    readonly float followDelay = 20f;

    void Update()
    {
        if (Input.GetMouseButtonDown(0)) 
        {
            firstTouchPos = movementCam.ScreenPointToRay(Input.mousePosition);
            playerPos = transform.position;
        }

        if (Input.GetMouseButton(0)) 
        {
            Ray currentTouchPos = movementCam.ScreenPointToRay(Input.mousePosition);
            Vector2 direction = currentTouchPos.origin - firstTouchPos.origin;
            float distance = Vector3.Distance(transform.position, Vector3.zero);
            targetPosition = distance >= radius ? (Vector3) . (direction.normalized * radius) : (Vector3)(playerPos + direction * speed);
        }

        transform.position = Vector3.Lerp(transform.position, targetPosition, followDelay);
    }
}

0 个答案:

没有答案