C# 抓斗到抓斗点+;抵消

C# 抓斗到抓斗点+;抵消,c#,unity3d,C#,Unity3d,我正在制作一个简单的2d统一游戏。所以我有一个球员和一把抓斗枪。当我按下鼠标右键,鼠标位置在任何物体的方向上时,它会抓住这个物体。但我的问题是,我有一个小圆圈(抓取点),很难将鼠标放在空中的抓取点圆圈方向。因此,我可以添加任何偏移量f.e。当我的鼠标方向与抓取器点圆的距离为2个单位时,它仍然会抓取器,但抓取器线会自动与抓取器点圆连接。这是我的抓取器代码: using System.Collections; using System.Collections.Generic; using Unity

我正在制作一个简单的2d统一游戏。所以我有一个球员和一把抓斗枪。当我按下鼠标右键,鼠标位置在任何物体的方向上时,它会抓住这个物体。但我的问题是,我有一个小圆圈(抓取点),很难将鼠标放在空中的抓取点圆圈方向。因此,我可以添加任何偏移量f.e。当我的鼠标方向与抓取器点圆的距离为2个单位时,它仍然会抓取器,但抓取器线会自动与抓取器点圆连接。这是我的抓取器代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Grappler: MonoBehaviour
{
    public LineRenderer Line;
    DistanceJoint2D Joint;
    Vector3 TargetPos;
    RaycastHit2D Hit;
    public float Distance = 10f;
    public LayerMask Mask;
    public float Step = 0f;

    void Start()
    {
        Joint = GetComponent<DistanceJoint2D>();
        Joint.enabled = false;
        Line.enabled = false;
    }
    void Update()
    {
        if(Joint.distance > 1f)
        {
            Joint.distance -= Step;
        }else
        {
            Line.enabled = false;
            Joint.enabled = false;
        }


        if(Input.GetMouseButtonDown(1))
        {
            TargetPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            TargetPos.z = 0;

            Hit = Physics2D.Raycast(transform.position, TargetPos - transform.position, Distance, Mask);

            if (Hit.collider != null && Hit.collider.gameObject.GetComponent<Rigidbody2D>() != null)
            {
                Joint.enabled = true;
                Joint.connectedBody = Hit.collider.gameObject.GetComponent<Rigidbody2D>();
                Joint.distance = Vector3.Distance(transform.position, Hit.point);

                Line.enabled = true;
                Line.SetPosition(0, transform.position);
                Line.SetPosition(1, Hit.point);
            }
        }

        if (Input.GetMouseButton(1))
        {
            Line.SetPosition(0, transform.position);
        }

        if (Input.GetMouseButtonUp(1))
        {
            Joint.enabled = false;
            Line.enabled = false;
        }
    }
}

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类格斗者:单一行为
{
公共线路;
距离关节2d关节;
向量3-TargetPos;
雷卡斯特2D命中;
公共浮动距离=10f;
公众层面具;
公共浮动步长=0f;
void Start()
{
Joint=GetComponent();
Joint.enabled=false;
Line.enabled=false;
}
无效更新()
{
如果(接头距离>1f)
{
关节距离-=步长;
}否则
{
Line.enabled=false;
Joint.enabled=false;
}
if(Input.GetMouseButtonDown(1))
{
TargetPos=Camera.main.ScreenToWorldPoint(Input.mousePosition);
TargetPos.z=0;
Hit=Physics2D.Raycast(transform.position,TargetPos-transform.position,Distance,Mask);
if(Hit.collider!=null&&Hit.collider.gameObject.GetComponent()!=null)
{
Joint.enabled=true;
Joint.connectedBody=Hit.collider.gameObject.GetComponent();
关节距离=矢量3.距离(变换位置、击中点);
Line.enabled=true;
行设置位置(0,变换位置);
线路设置位置(1,命中点);
}
}
if(输入。GetMouseButton(1))
{
行设置位置(0,变换位置);
}
if(Input.GetMouseButtonUp(1))
{
Joint.enabled=false;
Line.enabled=false;
}
}
}

有什么想法吗??谢谢

听起来你应该简单地将你的碰撞放大2个单位(如果这是你想要欺骗的数量)。然后,不要使用光线跟踪命中位置,而是使用命中对象的位置。

您的问题是关于UnityScript还是C#?我的脚本在C#中,问题是我已经删除了UnityScript标记(因为它是C#的单独编程语言)。