Raycasting, чтобы найти mouseclick на Object в единстве 2d игры
Я пытаюсь удалить объект, на который нажата мышь. Я делаю 2D-игру, используя новый Unity3D 4.3. Вот код, который я использую
void Update () {
if (Input.GetMouseButtonDown(0))
{
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit))
{
isHit = false;
Destroy(GameObject.Find(hit.collider.gameObject.name));
}
}
}
Элемент управления не входит в внутренний цикл if. (isHit
не устанавливается как false).
Ответы
Ответ 1
Вы не можете использовать трехмерные физические функции на новом 2D-материале. Вместо этого используйте 2D-функции. Пример:
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero);
if(hit.collider != null)
{
Debug.Log ("Target Position: " + hit.collider.gameObject.transform.position);
}
Ответ 2
Этот вопрос немного стар, но я искал способ получить GameObject с щелчком мыши в единстве 2D, и ответ от Esa почти помог мне, но я не мог позволить ему работать, поэтому с небольшим количеством исследований я увидел, что Camera.main.ScreenToWorldPoint возвращал центр области экрана камеры, и он работает правильно. он должен был ввести разницу в позиции Z с камеры и ближайшего GameObject. Моя камера была установлена по умолчанию в -10, а мой GameObject был в 0, поэтому мне нужно было установить мой Input.mousePosition.z на 10. Так что если у вас возникла проблема с кодом Esa (например, me:() приведенный ниже код может помочь вам:
RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 10)), Vector2.zero);
if(hit.collider != null)
{
Debug.Log ("Target Position: " + hit.collider.gameObject.transform.position);
}
Ответ 3
Сначала вы должны привязать кошелек сетки (любой коллайдер) к вашему объекту, чтобы ввести внутреннее значение If. Тогда
Destroy(hit.collider.gameObject);
просто выполнит задание.
Здесь может быть другая работа.
void Update () {
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hit;
if(Physics.Raycast(ray,out hit))
{
if(Input.GetMouseButtonDown(0))
{
isHit = false;
Destroy(hit.collider.gameObject);
}
}
}
Ответ 4
Сначала присоедините любой тип 2D-коллайдера к вашему GameObject, затем выберите одно из этих решений;
1-й случай. Если над Game-объектом находится более 1 GameObject, и вы пытаетесь понять, что определенный GameObject щелкнут:
void Update ()
{
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit2D[] hits = Physics2D.GetRayIntersectionAll (ray, Mathf.Infinity);
foreach (var hit in hits) {
if (hit.collider.name == name) {
MyFunction ();
}
}
}
}
2-й случай. Если есть только 1 GameObject, и вы пытаетесь понять, если он щелкнут:
void Update ()
{
if (Input.GetMouseButtonDown (0)) {
Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);
RaycastHit2D hit = Physics2D.GetRayIntersection (ray, Mathf.Infinity);
if (hit.collider != null && hit.collider.name == name) {
MyFunction ();
}
}
}