Как правильно рейкастить тач на 2д объект?

Привет комьюнити, прошу помощи.
С мышкой все работает и все понятно, а с тачем вообще никак не могу разобраться
Делаю кроссплатформенную демку(пока только PC и андр.).
Нужно по тачу определить игровой объект по которому тапает юзер
объект - это 2д спрайт с 2д коллайдером
Нужен рабочий код

P.S.вчера весь вечер RTFM так ничего и не нашел подходящего, сегодня с утра тоже вообще никак.
  • Вопрос задан
  • 970 просмотров
Решения вопроса 1
@vari0us Автор вопроса
Оказывается мой код был таки работающим.Три дня искал баг но он оказался в другом месте.
Не претендую на правильность решения, у меня это работает так.
void OnGUI () {//Код проверялся в FixedUpdate, Update, OnGUI.OnGUI чтобы можно было проверить работу на устройстве, я не нашел как включить в плеере юнити эмуляцию тачей
		
		if (Input.touchCount > 0) {

			for(int i = 0; i < Input.touchCount; i++){
				//if (Input.touches [i].phase == TouchPhase.Stationary) {//Здесь можно выбрать фазу
				GUI.Label (new Rect(10,50,150,100), "Touch.pos.x=" + Input.touches [i].position.x.ToString());
				GUI.Label (new Rect(150,50,150,100), "Touch.pos.y=" +  ((float)Screen.height - Input.touches [i].position.y).ToString());//Ось Y перевернута "вверх ногами", решение (float)Screen.height - Input.touches [i].position.y

					Vector2 rayPos = new Vector2 (Camera.main.ScreenToWorldPoint (new Vector3(Input.touches [i].position.x, Input.touches [i].position.y, 0f)).x,Camera.main.ScreenToWorldPoint (new Vector3(Input.touches [i].position.x, Input.touches [i].position.y, 0f)).y);
					RaycastHit2D hit = Physics2D.Raycast (rayPos, Vector2.zero, 0f);
					if (hit) {
						//if(hit.transform.tag == "tag"){//Тег объекта по которому совершен тап
							transform.position = new Vector3(transform.position.x,transform.position.y+0.1f,transform.position.z);
							Debug.Log (hit.collider.name);
							GUI.Label (new Rect(10,30,100,100),hit.collider.name);
						//}
					}
				//}
			}

		}
	}
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
MrMureno
@MrMureno Куратор тега Unity
VR for all
А теперь по делу.
Простой рейкаст - работает с 3d коллайдерами.
Для 2D есть своя физика и рейкасты. что-то вроде :

var worldTouch = Camera.main.ScreenToWorldPoint(touch.Position);
var hit : RaycastHit2D;
hit = Physics2D.Raycast (Vector2(worldTouch.x,worldTouch.y),Vector2.zero, Mathf.Infinity);

почитайте чуток документацию ;)
Ответ написан
BasmanovDaniil
@BasmanovDaniil
Геймдизайнер-телепат
Вычисляете мировые координаты пальца с помощью Camera.ScreenToWorldPoint, передаёте в Physics2D.OverlapPoint, получаете Collider2D.
Ответ написан
Ваш ответ на вопрос

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

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