@nika09

Как сделать подбор предметов Unity?

Пишу скрипт для сбора предметов, был вариант с помощью векторов но не всегда он работал корректно, пробую с помощью рейкастов, все замечательно если не одно но....При уменьшении объекта он перестает исчезать. Подскажите пожалуйста как исправить это недоразумение или как лучше сделать так что бы предметы собирались(исчезали)???
Фрагмент кода с рейкастами :
using System.Collections;
using UnityEngine;

public class RaycastExample : MonoBehaviour {


	void Start () {
		
	}
	

	void Update () {
		if (Input.GetMouseButtonDown (0)) {
			Ray ray = Camera.main.ScreenPointToRay (new Vector3 (Input.mousePosition.x, Input.mousePosition.y, 1));
			RaycastHit _hit;
				if (Physics.Raycast (ray, out _hit, Mathf.Infinity)) {
				if (_hit.transform.tag == "PickUp") {
					Destroy (_hit.transform.gameObject);
				}
			}
		}
	}
}
  • Вопрос задан
  • 8585 просмотров
Решения вопроса 1
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Несколько замечаний, во-первых, нет нужды создавать отдельный вектор для положения мышки, можно сразу передавать Input.mousePosition. Во-вторых, по умолчанию maxDistance у Physics.Raycast это float.PositiveInfinity, ваш Mathf.Infinity можно убрать. В-третьих, для проверки тэгов лучше использовать CompareTag, он работает чуть быстрее.
using UnityEngine;

public class RaycastExample : MonoBehaviour
{
    private void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            RaycastHit hit;
            if (Physics.Raycast(ray, out hit))
            {
                if (hit.transform.CompareTag("PickUp"))
                {
                    Destroy(hit.transform.gameObject);
                }
            }
        }
    }
}

Касаемо вашей проблемы, я бы предложил вам подключиться дебаггером и проверить, что рейкасты попадают в объект, возможно, у вас слишком маленький коллайдер и луч банально по нему не попадает. Если это так, то вам надо либо увеличить коллайдер, либо использовать Physics.SphereCast.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы