// события мыши private void UpdateInput() { ray = mainCamera.ScreenPointToRay(Input.mousePosition); // посылаем луч из камеры по направлению к курсору, маска по уровню Plane if (Physics.Raycast(ray, out hit, 500f, 1 << 8)) { cursorPosition = hit.point; } // если нажата левая клавиша мыши if (Input.GetMouseButtonDown(0)) { // посылаем луч из камеры по направлению к курсору, маска по уровню Backpack if (Physics.Raycast(ray, out hit, 500f, 1 << 9)) { // проверяем интерфейс рюкзака backpack = hit.collider.GetComponent <IBackpack>(); if (backpack != null) { // показать UI рюкзака backpack.SetActiveUI(true); } // посылаем луч из камеры по направлению к курсору } else if (Physics.Raycast(ray, out hit)) { // проверяем интерфейс фигуры figure = hit.collider.GetComponent <IFigure>(); if (figure != null) { figure.StartMove(); } } } // если держим фигуру и отпустили клавишу мыши if (Input.GetMouseButtonUp(0)) { if (figure != null) { figure.EndMove(); } // посылаем луч из камеры по направлению к курсору, маска по уровню Backpack if (Physics.Raycast(ray, out hit, 500f, 1 << 9)) { // проверяем интерфейс рюкзака IBackpack backpack = hit.collider.GetComponent <IBackpack>(); if (backpack != null) { if (figure != null) { // кладем фигуру в рюкзак backpack.PutFigure(figure); // посылаем луч из камеры по направлению к курсору } else if (Physics.Raycast(ray, out hit, 500f)) { // проверяем интерфейс фигуры figure = hit.collider.GetComponent <IFigure>(); if (figure != null) { backpack.GetFigure(figure); } } } } if (backpack != null) { // скрыть UI рюкзака backpack.SetActiveUI(false); } backpack = null; figure = null; } }