Всем привет! Проблема с Raycast2D: он не всегда срабатывает. Точнее он временами проходит сквозь колайдер префаба. Код под катом ниже.
Код
using UnityEngine; using System.Collections;
public class DestroyTouch2D : MonoBehaviour { // Update is called once per frame void Update () { Vector3 pos = Camera.main.ScreenToWorldPoint (Input.mousePosition); RaycastHit2D hit = Physics2D.Raycast(pos, Vector2.zero); // Check what amount of screen touches were completed (0) and what event was done (TouchPhase.Began) if ((Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Began) || Input.GetButtonDown ("Fire1") && hit.collider!=null) { switch(hit.collider.gameObject.tag) { case "SmallBubbles": { Destroy(hit.collider.gameObject); break; } case "NormalBubbles": { Destroy(hit.collider.gameObject); break; } case "BigBubbles": { Destroy(hit.collider.gameObject); break; } } } } }
Сообщение отредактировал MegaEvgeniy - Пятница, 09 Мая 2014, 12:49
Вот что бы рейкаст не срабатывал - не встречал) Хотя вроде были случаи мне кажется, но не думал что в этом проблема. А rigidbody если имеет большую скорость, маленький коллайдер, да ещё и стандартное значение просчета коллайдеров в настройках rigidbody, то да, легко пролетает.
У тебя длина рейкаста нулевая, и без направления. Если ты хочешь обнаружить коллайдер по координатам нажатия на экран, используй GetRayIntersection. Луч для аргумента можно получить с помощью ScreenPointToRay. Когда-то тут будут ссылки на крутые проекты. Или нет.