Борьба с точкой захвата + смещение - PullRequest
0 голосов
/ 21 марта 2020

Я делаю простую игру в Unity в 2d. Итак, у меня есть плеер, и у меня есть грейферный пистолет. И когда я нажимаю правую кнопку мыши, и положение мыши находится в направлении любого объекта, он захватывает этот объект. Но мой вопрос в том, что у меня есть маленький круг (точка захвата), и очень трудно навести мышь на направление круга точки захвата в воздухе. поэтому я могу добавить любое смещение, например, когда мое направление мыши от игрока находится в 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;
        }
    }
}

Есть идеи? Спасибо

1 Ответ

0 голосов
/ 21 марта 2020

Похоже, вы должны просто увеличить свое столкновение на 2 единицы (если это сумма, которую вы хотите обмануть). А затем вместо того, чтобы использовать местоположение попадания трассировки лучей, используйте вместо этого местоположение объекта, которого вы ударили.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...