Advertisement
Krubbs

Untitled

Dec 11th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.50 KB | None | 0 0
  1. using UnityEngine;
  2. using System.Collections;
  3.  
  4. public class CursorController : MonoBehaviour
  5. {
  6.     // Объект в сцене, который будем перемещать вслед за рейкастом. Курсор в сцене
  7.     public GameObject cursor;
  8.  
  9.     // Не путать с GameObject. Здесь - любой объект или компонент, на который наведен курсор
  10.     public Object hoveredObject;
  11.     // Тот же тип, допускает указание на любой компонент в игре. В эту переменную запоминаем выбранного юнита
  12.     public Object selectedObject;
  13.    
  14.     // Вызывается в каждом кадре
  15.     void Update ()
  16.     {
  17.         // Перед началом кадра обнуляем объект, на который мог быть наведен курсор.
  18.         // Сделано для того, чтобы в случае, когда курсор "уйдет" с объекта, переменная это отобразила путем обнуления
  19.         hoveredObject = null;
  20.  
  21.         // Переменная для запоминания информации о пуске луча
  22.         RaycastHit hitInfo;
  23.         // Луч, запущенный из основной камеры по координатам мыши
  24.         Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
  25.  
  26.         // Пускаем рейкаст, используя луч, описанный с строке 24
  27.         if(Physics.Raycast( ray, out hitInfo))
  28.         {
  29.             // Перемещаем "объект-курсор" в координаты попадания луча
  30.             cursor.transform.position = hitInfo.point;
  31.  
  32.             // Проверяем наличие компонента EnemyScript2 у объекта, по которому попал луч
  33.             if (hitInfo.transform.GetComponent<EnemyScript2>())
  34.             {
  35.                 // Если компонент EnemyScript2 найден, записываем его в переменную hoveredObject
  36.                 hoveredObject = hitInfo.transform.GetComponent<EnemyScript2>();
  37.             }
  38.  
  39.             // Если хоть что-то есть в hoveredObject (курсор мыши наведен на подходящий объект) и нажимаем левую кнопку мыши,...
  40.             if (hoveredObject != null && Input.GetMouseButtonDown(0))
  41.                 selectedObject = hoveredObject;     // Записываем в selectedObject то, что было в hoveredObject. То есть по ЛКМ мы "выбираем" юнита    
  42.  
  43.             // Однако, если курсор не наведен ни на один из подходящих объектов, и нажимается левая кнопка мыши...
  44.             if (hoveredObject == null && Input.GetMouseButtonDown(0))
  45.                 selectedObject = null;              // Очищаем "выбранного" юнита. То есть сбрасываем выделение, если оно было
  46.  
  47.             // Если есть выбранный объект и нажимаем правую кнопку мыши...
  48.             if (selectedObject != null && Input.GetMouseButtonDown(1))
  49.             {
  50.                 //Проверка типа выбранного объекта. Проверяем, является ли объект типа EnemyScript2
  51.                 if (selectedObject.GetType() == typeof(EnemyScript2))
  52.                 {
  53.                     // В случае успешной проверки, объявляем временную переменную EnemyScript2, в которую заводим переведенный в тип EnemyScript2 переменную selectedObject.
  54.                     // То есть, это работает аналогично округлению дробных чисел. Только более сложный сценарий использования, нежели простое округление "int result = (int)4.23f;"
  55.                     EnemyScript2 enemy = (EnemyScript2)selectedObject;
  56.  
  57.                     // Так как в 48 строке мы проверили и нажатие на ПКМ, отдаем приказ юниту проследовать в позицию курсора. Это публичная функция, написанная в EnemyScript2, строка 96
  58.                     enemy.SetDestination(hitInfo.point);
  59.  
  60.                     // Обнуляем переменную myEnemy у выбранного юнита, дабы отменить приказ атаковать цель, если такой приказ был
  61.                     enemy.myEnemy = null;
  62.  
  63.                     // Если курсор наведен на какой-нибудь объект, а тип объекта == EnemyScript2,...
  64.                     if (hoveredObject != null && hoveredObject.GetType() == typeof(EnemyScript2))
  65.                     {
  66.                         // Указываем нашему выбранному юниту соперника, которого необходимо атаковать. Т.е. отдаем приказ атаковать цель, см. код скрипта EnemyScript2
  67.                         enemy.myEnemy = (EnemyScript2)hoveredObject;
  68.                     }
  69.                 }
  70.             }
  71.         }
  72.     }
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement