这是我试图在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);
}
}