Выполнение какого-либо действия по нажатию мыши на объект - Unity

Суть такова: персонаж передвигается по NavMesh, управление происходит по нажатию правой кнопки мыши, мне нужно, чтобы при нажатии на определённый GameObject он сначала доходил до него, а потом при достижении позиции объекта, по которому мы кликнули, проигрывал определённую анимацию.


Ответы (2 шт):

Автор решения: Арман

На такие вопросы отвечали 65534 раз. Пусть этот будет 65535-ый, последний.


Если у вас UI объект прикрепите на него компонент Button. Пишите в скрипте:

using UnityEngine.UI;
...
public Button JustAButton;
...
private void Start()
{
    JustAButton.onClick.AddListener
    (
        delegate()
        {
            //Тут ваши действия
        }
    );
}

Если у вас 3D объект используйте Raycast:

if(Physics.Raycast(transform.position, transform.TransformDirection(Vector3.forward), 10)
{
    //Тут ваши действия
}
→ Ссылка
Автор решения: earthQuake

Upd: для правой кнопки тебе придется использовать Input.GetMouseButtonDown(1) и пускть луч из камеры в направлении курсора. Там уже будешь смотреть по какому коллайдеру ты попал. Тебе уже написали .

Ты можешь использовать OnMouseDown метод на объекте, по которому ты кликаешь.

Что-то типа такого:

    void OnMouseDown()
    {
        _agent.SetDestination(transform.position);
    }

    void Update()
    {
        if(_agent.pathStatus == NavMeshPathStatus.completed || Math.Approximately(agent.remainingDistance, 0)
        {
          // твоя анимация
        }
    }

Выше это если ты используешь NavMeshAgent. Если делаешь без него, то тогда путь будешь искать до своего объекта:

NavMesh.SamplePosition(transform.position, out var navMeshHit, searchRadius, _areaMask); // найдешь ближайшую точку на навмеше к объекту, по которому ты кликнул, на котором же будет висеть этот скрипт
далее найдешь массив векторов-вейпоинтов до найденной точки от точки старта
NavMesh.CalculatePath(startPoint, navMeshHit.position, _areaMask, _path); //_path это _path = new NavMeshPath(), который ты создашь заранее 
var waypoints = _path.GetCorners(); // получишь массив векторов. 

Далее по мере продвижения твоего объекта к цели, будешь смотреть достиг ли ты конечного вейпоинта, которым будет waypoints[waypoints.Length - 1]. Проверить достижение вейпоинта можно сравнивая квадрат расстояния от твоего объекта до текущего вейпоинта, к которому ты едешь . типа if(Vector3.SqrMagnitude(waypoints[currentWaypoint] - agent.position) < yourSqrDistThreshold).. Ну а как доедешь уже запустишь свою анимацию. Мне было лень писать весь код по-нормальному, но думаю дошло. Вот сюда еще зайди.

→ Ссылка