Менеджер проекта
ProjectManager
Пустой объект
Функция масштабирования
Циклы
Позиция. Координаты
Размещаем кубики
Инстанцирование
100 кубиков
Input Manager
Куда щелкнул пользователь?
Кубики по щелчку
Стреляем кубиками
1.24M
Category: programmingprogramming

ProjectManager

1. Менеджер проекта

Федорищев Л.А.

2. ProjectManager

Создайте новый скрипт ProjectManager.
Посчитаем, сколько в нашей сцене кубиков, у
которых есть скрипт MyCube (или другой скрипт,
который вы написали раньше). В функции Start
напишите код, как показано на слайде.

3. Пустой объект

В сцене создайте пустой
объект. Для этого нажмите в
панели объектов сцены правой
кнопкой мыши и выберите
“Create Empty”. Назовите его
«ProjectManager».
В панели свойств добавьте
ему компонент – наш новый
скрипт - ProjectManager.
Запустите сцену и посмотрите
в консоли, сколько нужных
кубиков насчитал наш
Менеджер.

4. Функция масштабирования

Откройте (или создайте) скрипт MyCube.
Очистите в нем функцию Update().
Добавьте новую функцию setScale(int scale);
Допишите эту функцию, чтобы она устанавливала
масштаб объекта по всем трем осям, используя параметр
scale. Примените для этого localScale, как в одном из
примеров, разобранных на Практике 1.

5. Циклы

Вернитесь в скрипт ProjectManager.
Отмасштабируем все кубики MyCube с
параметром 2. Для этого используем цикл for
и новую функцию setScale(), которую мы
создали только что для скрипта MyCube.

6. Позиция. Координаты

Координаты объекта определяют, где находится объект.
Координаты, как и масштаб, и поворот, можно задавать
программно.
Для этого у компонента transform есть поле position:
transform.position (Аналогично: transform.localScale)
Попробуйте в каком-нибудь скрипте программно задать координаты
объекта, например, в функции Start(). Укажите произвольные
целые координаты, например: 1,2,3:
transform.position = new Vector3(1, 2, 3);

7. Размещаем кубики

Задача. В скрипте ProjectManager с помощью цикла разместите в
ряд с каким-нибудь шагом по оси X все найденные кубики MyCube.
Добавьте на сцену в произвольных позициях 10 кубиков с
компонентов MyCube.
Запустите программу и убедитесь, что все кубики выстроились в
ряд.

8. Инстанцирование

В ProjectManager создадим параметр для префаба – cubePrefab.
В функции Start() создадим экземпляр этого префаба с помощью
функции Instantiate(cubePrefab);
И разместим новый созданный куб в координатах 3,3,3.
В сцене Менеджеру проектов укажите параметру cubePrefab
конкретное значение: перенесите в него любой объект со сцены,
либо из ассетов. Протестируйте.

9. 100 кубиков

С помощью инстанцирования и двойного цикла создайте на сцене
100 кубиков и расположите их в виде матрицы 10 на 10, как
показано на скриншоте.

10. Input Manager

Проверьте настройки
Input Manager

11. Куда щелкнул пользователь?

Допустим, мы хотим узнать, куда щелкнул мышкой пользователь. Для этого в функции Update в скрипте
ProjectManager напишите проверку, нажимал ли пользователь кнопку мыши:
if (Input.GetButtonDown("Fire1"))
Далее мы пустим «луч» из камеры cam (создайте такой параметр и не забудьте поместить в него объект
сцены MainCamera) в позицию мышки:
Ray ray = cam.ScreenPointToRay(Input.mousePosition);
if (Physics.Raycast(ray, out hit, 10000.0f))
В результате получим точку пересечения луча с каким-нибудь объектом сцены. Координаты этой точки
можно получить из параметра hit.point. Выведем в консоль координаты полученной точки.
Протестируйте.

12. Кубики по щелчку

Дополните предыдущий код так, чтобы в нажатой точке появлялся новый кубик.
Воспользуйтесь для этого разобранной ранее функцией инстанцирования
Instantiate()

13. Стреляем кубиками

Попробуем пострелять? Для этого:
1) Напишите условие выстрела – нажатие правой кнопки мыши:
if (Input.GetButtonDown("Fire2"))
2) Породите новую «пулю» – кубик.
3) Установите начальную позицию «пули» в позицию камеры
4) Укажите направление «пули» - туда, куда смотрит камера. Ну а раз это камера, значит, надо взять ее
направление из объекта cam:
cam.transform.TransformDirection(Vector3.forward);
5) Придайте физическую силу «пуле»:
cube.GetComponent<Rigidbody>().AddForce(dir * 500);
6) Протестируйте
English     Русский Rules