Попытка подобрать объект, который находится относительно позиции игрока, если он рядом с ним, с помощью raycast (2D) в Unity - PullRequest
0 голосов
/ 11 декабря 2019

Итак, я относительно новичок в C # и программировании в целом, я начал неделю назад. Я смотрю на лучевое вещание для 2D, и я хочу, чтобы объект был удален, если игрок находится рядом с ним, и я нажимаю клавишу «E», это будет, когда я подниму оружие.

Это работает нормально, однако, в основном, это работает, только если я наведу курсор мыши на объект. Я не хочу этого точно, я хочу, чтобы, если я нахожусь рядом с объектом, и я нажимаю «E», он его удалит. Что-то вроде диапазона.

Вот мой текущий сценарий:

    void Update()
    {

        Vector2 worldPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        RaycastHit2D hit = Physics2D.Raycast(worldPoint, Vector2.zero);

        if (hit.collider != null && Input.GetKey(KeyCode.E))
        {
            Debug.Log(hit.collider.name);
            Destroy(hit.collider.gameObject);
        }
    }
}

Любая помощь будет потрясающей, спасибо.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2019

В логике есть небольшая ошибка. Вот документы для функции Physics2D.Raycast.

Я собираюсь предположить, что вы пытаетесь определить направление мышью относительно игрока, чтобы код выглядел следующим образом:

var hit = Physics2D.Raycast(
     playerTransform.position,  // start raycasting from players position
     worldPoint - playerTransform.position  // in the direction of where the mouse is
     );

// some debugging code which will be excluded from build because of this condition 
# if UNITY_EDITOR
Debug.DrawLine(
     playerTransform.position, // start point same as ray
     (worldPoint - playerTransform.position) * 10 + playerTransform.position,  // end point = direction from start point * distance + start point
     Color.white,  // color of ray
     Time.deltaTime // duration
     );
#endif

Используйте Debug.DrawLine, чтобы увидеть, как осуществляется луч. Если он находится на объекте, но не сталкивается, проверьте Z-глубину и маску слоя. Может быть, стоит проверить и некоторые учебники .

0 голосов
/ 11 декабря 2019

Попробуйте изучить положение 2D-игрока, а не наложение лучей. Я знаю, что всякий раз, когда я делаю это, я использую коллайдер игроков и ставлю проверку, чтобы убедиться, что объект вошел в него.

Pseudo code could be something like this:
- Add collider set as trigger to your pickup
- Add some Pickup script to your pickup GameObject, it will hold the bullets count etc.
- When your player walks into a trigger, try to get pickup component from other object it collided with to see if it was a pickup.
- If it was, it has the Pickup component.
- Take the bullets count and add it to your player's weapon / bag / inventory
- Remove the pickup from scene
...