C# 我有关于线段的所有信息,如何计算线段上的点 void OnMouseDrag() { float Distance tocenter=Vector2.距离(NatPos、Camera.main.ScreenToWorldPoint(Input.mousePosition)); 如果(isLaunched==false)机械(bkz.line_15) { if(距离中心

C# 我有关于线段的所有信息,如何计算线段上的点 void OnMouseDrag() { float Distance tocenter=Vector2.距离(NatPos、Camera.main.ScreenToWorldPoint(Input.mousePosition)); 如果(isLaunched==false)机械(bkz.line_15) { if(距离中心,c#,unity3d,C#,Unity3d,因此,这允许我在角色离其繁殖点不远时移动角色,但当鼠标超出范围时,也会导致角色停止移动。 我想让它在限制范围内朝我的老鼠飞去。 发生这种情况是因为一旦distance-to-center

因此,这允许我在角色离其繁殖点不远时移动角色,但当鼠标超出范围时,也会导致角色停止移动。 我想让它在限制范围内朝我的老鼠飞去。
发生这种情况是因为一旦
distance-to-center
的计算结果为false,就不会计算新位置


但这似乎有点不对劲。。您可以尝试使用圆形碰撞器,让玩家的游戏对象跟随鼠标位置。

您可以通过首先测试鼠标是否足够近(就像您已经做的那样)来完成此操作。如果是,请将角色的位置设置为鼠标的位置。如果不是,则将角色的位置设置为鼠标方向上距中心的最大距离。可通过以下代码实现:

void OnMouseDrag()
    {
        float DistanceToCenter = Vector2.Distance(NatPos, Camera.main.ScreenToWorldPoint(Input.mousePosition));

        if (isLaunched == false)mechanic (bkz. line_15)
        {
            if(DistanceToCenter < LimitToDistance)
            {
                Vector3 newPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                transform.position = new Vector3(newPosition.x, newPosition.y, 0);
            }
            else
            {

            }
        }
    }

如果我放一个圆对撞机,它只会出故障,没错?使用连续碰撞检测非常感谢,这是我第一次在这里发表文章。谢谢
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
float distanceToCenter = Vector2.Distance(NatPos, mousePos);

if(distanceToCenter < LimitToDistance){
    transform.position = mousePos;
}
else{
    Vector2 directionFromCenter = (mousePos - NatPos).normalized;

    Vector2 newPosition = NatPos + directionFromCenter * LimitToDistance;
    transform.position = newPosition;
}
Camera mainCam; //Use this variable instead of Camera.main

void Start()
{
    mainCam = Camera.main;
}