Similar presentations:
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) Протестируйте
programming