Если разрабатывать проект под Андроид, то приходится взаимодействовать с объектами сцены. В случае с элементами интерфейса (например UI Button) уже всё встроено и мы легко можем обработать событие нажатия на кнопку с помощью заполнения поля OnClick() в Инспекторе:
Однако для других объектов такого функционала нет. Придётся писать свои скрипты для отслеживания нажатия на экран устройства и определять, совпали ли эти координаты с координатами объекта.
1. Поместим на сцену объекты (у меня это цилиндр, куб и шар):
2. К каждому из этих объектов добавим скрипт ObjectAction.cs:
using UnityEngine;
public class ObjectAction : MonoBehaviour
{
private Color baseColor;
private void Start()
{
baseColor = gameObject.GetComponent<Renderer>().material.color;
}
public void ChangeColor()
{
gameObject.GetComponent<Renderer>().material.SetColor("_Color", Color.yellow);
}
public void Reset()
{
gameObject.GetComponent<Renderer>().material.color = baseColor;
}
}
3. На камеру добавим скрипт SelectObject.cs:
using UnityEngine;
public class SelectObject : MonoBehaviour
{
void Update()
{
if ((Input.touchCount > 0) && (Input.touches[0].phase == TouchPhase.Began))
{
Ray ray = Camera.main.ScreenPointToRay(Input.touches[0].position);
RaycastHit hit;
if (Physics.Raycast(ray, out hit))
{
if (hit.collider != null)
{
hit.collider.GetComponent<ObjectAction>().ChangeColor();
}
}
}
}
}
Нам нужно определить, было ли хоть одно касание (тач), поэтому мы используем такое условие:
(Input.touchCount > 0)
Поскольку мы находимся в цикле метода Update, то нас интересует момент самого первого срабатывания, а не все возможные. Для этого мы ограничиваем условие:
(Input.touches[0].phase == TouchPhase.Began)
Далее создаётся «луч», который выходит из камеры и направлен на сцену в сторону координат прикосновения к экрану:
Ray ray = Camera.main.ScreenPointToRay(Input.touches[0].position);
Если этот луч «попадает» в объект с коллайдером, то мы меняем цвет объекта:
if (hit.collider != null)
{
hit.collider.GetComponent<ObjectAction>().ChangeColor();
}
После запуска приложения на смартфоне можно будет поменять цвет каждого объекта, просто нажав на него:
- Не приходит СМС для авторизации на сайте Госуслуги - 01.11.2024
- VSCode: Найти и удалить элементы xml - 29.10.2024
- WordPress: Ошибка в плагине WpDiscuz - 08.10.2024