Powered by Invision Power Board
> Добро пожаловать, посетитель
Для публикации новостей на сайте, Вы должны зарегистрироваться

· Обзор новых сообщений

Ваше имя

Пароль



> Навигация сайта

> Скины
Выберите скин


Сейчас на сайте 1 человек:
0 пользователей и 1 гостей

> Последние обсуждения
DEXINDROVER @ 1.03.2016 - 18:40
Просмотров: 612   Комментариев: 1
DEXINDROVER @ 1.03.2016 - 00:18
Просмотров: 329   Комментариев: 0
DEXINDROVER @ 29.02.2016 - 22:06
Просмотров: 453   Комментариев: 0
DEXINDROVER @ 29.02.2016 - 21:58
Просмотров: 1,123   Комментариев: 0
DEXINDROVER @ 29.02.2016 - 21:24
Просмотров: 738   Комментариев: 1

 
 Простой таймер
Автор DEXINDROVER - 1.03.2016 - 18:40 - 1 комментариев
В данном уроке рассказывается как в Unit при помощи скриптов
создавать простой таймер, используя Time.deltaTime и переменную типа float.


Воспользуемся сценой из предыдущего урока (с пустым игровым объектом,
генерирующим экземпляры префаба, т.е. BouncyBox).

user posted image

Создадим С#-скрипт и назовем его Timer. Добавим переменную myTimer, и напишем следующий код.


public float myTimer = 5.0f;

void Update() {
//Time.delaTime - время (сек), которое требовалось для отрисовки последнего кадра (read only)
myTimer -= Time.deltaTime;
if (myTimer <= 0.0f) {
Debug.Log("GAME OVER");
}
}


Сохраняем скрипт и переключаемся назад в Unity. Добавим скрипт к объекту GameObject.


Напомню, т.к. myTimer объявлена открытой (public), то в Inspector View вы можете менять ее начальное значение.

Жмем Play. Как только значение myTimer упадет до нуля, в статус баре вы увидите строку GAME OVER. Значение переменной myTimer будет продолжать опускаться (это можно увидеть в Inspector View).


Для того, чтобы переменная myTimer не опускалась ниже нуля, добавим еще одно ветвление в функцию Update(), в итоге мы получаем следующий код:

void Update () {
if(myTimer > 0){
myTimer -= Time.deltaTime;
}else if(myTimer <= 0){
Debug.Log("GAME OVER");
}
}


Нажмем Play и проследим за поведением переменной myTimer. Когда ее значение будет достаточно близким к нулю, то оно перестанет изменяться.
Кол-во прочтений 612 - последний комментарий от gorniks   Print email

 Для чего префаб
Автор DEXINDROVER - 29.02.2016 - 22:06 - 0 комментариев
В Уроке рассказывается, как создавать префабы, и для чего они нужны.

Префаб (сборная конструкция) — это объект, содержащийся в вашем проекте, его можно клонировать и создавать множество его экземпляров, причем все экземпляры при копировании будут иметь те же компоненты те же компоненты. Создайте или загрузите сцену из Базового Урока 1. У нас на сцене присутствует куб, который падает и выдает сообщение в консоль при столкновении с объектами. Что если мы хотим создать множество таких же кубов (с уже добавленными компонентами)?
Создадим префаб, с помощью Create->Prefab в Project View.



В итоге получим серую иконку с названием New Prefab.



Переименуем ее в «BouncyBox». Теперь нам осталось лишь перетащить все что требуется в наш префаб. То есть Cube.
user posted image



Цвет иконки поменялся на синий и теперь, если вы выделите наш префаб, в Inspector View вы увидите что он имеет те же параметры, что были и у объекта Cube.
Если вы хотите создавать экземпляры префаба, то вам требуется перетащить его в сцену.



Нажмите Play и увидите, что добавленный куб ведет себя точно так же, как и оригинальный.
Префабы нужны в случае, если вам требуется создать много одинаковых объектов, которые содержат множество компонентов. К примеру, если вы разрабатываете игру и вам нужно добавить много врагов у которых одинаковое поведение, внешний вид и пр.
Кол-во прочтений 453 - написать комментарий   Print email

 Основы обнаружения столкновений
Автор DEXINDROVER - 29.02.2016 - 21:58 - 0 комментариев
Основы обнаружения столкновений.


В уроке рассказывается как обнаружить столкновения (collisions) между объектами используя скрипты.


Создайте сцену как в предыдущем уроке или загрузите уже имеющуюся. Добавьте к ней еще один куб, растяните его по горизонтали в 5-6ть раз и по вертикали в 2а раза.


В этом уроке важны названия объектов. Назовите плоскость Floor, а куб представляющий стену Wall (Ваш К.О.)

В Project View нажмите на Create и выберете С# Script. Назовите его boxdrop. Дважды кликнув на скрипт вы откроете его в вашем редакторе скриптов (как правило, по умолчанию это MonoDevelop. У автора статьи это Visual Studio 2010 под Windows или Textmate под MacOs).

Обратите внимание, что название класса всегда должно совпадать с названием скрипта(регистр букв тоже имеет значение):

//Важно! Названия основного класса всегда должно совпадать с названием файла скрипта
public class boxdrop : MonoBehaviour {


По умолчанию Unity создает каркас для C# скрипта. Удалите из тела класса boxdrop все содержимое и замените следующим:

// Метод вызываемый при столкновении объекта
void OnCollisionEnter() {
Debug.Log("Hit Something"); // Передаем сообщение в консоль Unity
}


Функция OnCollisionEnter определяет столкновение объекта с другими объектами. А статический метод Log класса Debug пишет сообщение в консоль Unity. После сохранения скрипта, добавьте его как компонент для падающего куба.
Теперь если вы нажмете Play, в момент когда куб коснется пола консоль выдаст соответствующее сообщение. Открыть окно консоли можно комбинацией ctrl + shift + c в Windows или cmd + shift + c в MacOs. Последнее консольное сообщение отображается в статус баре проекта (внизу окна).
user posted image


Причем сообщение будет выдаваться при каждом столкновении.
Для того, чтобы понять с каким именно объектом столкнулся наш куб, мы будем брать значение параметра класса Collision, которое будет принимать метод OnCollisionEnter:

// Теперь метод принимает объект класса Collision, с которым происходит столкновение
void OnCollisionEnter(Collision myCollision) {
// определение столкновения с двумя разноименными объектами
if (myCollision.gameObject.name == "Floor") {
// Обращаемся к имени объекта с которым столкнулись
Debug.Log("Hit the floor");
}
else if (myCollision.gameObject.name == "Wall") {
Debug.Log("Hit the wall");
}
}
}


Нажмите Play и после того как ваш куб коснется несколько раз стены и пола остановите игру и откройте консоль. Теперь при столкновении только со стеной или полом будет выдаваться соответствующие названию объекта сообщение.
Кол-во прочтений 1,123 - написать комментарий   Print email

 Простой AI
Автор DEXINDROVER - 29.02.2016 - 21:24 - 1 комментариев
Начинаем делать заготовки.
Для начала нам понадобится создать пустой проект, как это было описано в предыдущем уроке.
Создадим в окне Project четыре папки: Scripts, Prefabs, Scenes и Materials.
Создаем в папке Scripts два скрипта с названиями Player, Enemy.
В папке Prefabs создаем два пустых префаба с такими же именами (Player, Enemy).
В папке Materials создадим два материала PlayerMaterial и EnemyMaterial и дадим им зеленый и оранжевый цвет соответственно.
В папку Scenes сохраняем текущую сцену под названием Game.


user posted image

Мы сначала реализуем поведение игрока, потом сделаем заготовку для поведения врага.
Итак, переходим в выбранный вами редактор кода (в моем случае Visual Studio) двойным щелчком по скрипту «Player» и помещаем в него следующий код:

using UnityEngine;

public class Player : MonoBehaviour
{
// скорость ходьбы и скорость поворота в секунду
public float moveSpeed = 2;
public float turnSpeed = 90;

private CharacterController _controller;
private Transform _thisTransform;

public void Start()
{
// Получаем контроллер
_controller = GetComponent<CharacterController>();

// Получаем компонент трансформации объекта, к которому привязан данный компонент
_thisTransform = transform;
}


public void FixedUpdate()
{
// Рассчитываем позицию
_controller.Move(_thisTransform.forward * moveSpeed * Time.deltaTime * Input.GetAxis("Vertical") +
Vector3.down * 10.0f * Time.deltaTime);

// Рассчитываем поворот
Quaternion rot = Quaternion.AngleAxis(
turnSpeed * Time.deltaTime * Input.GetAxis("Horizontal"), Vector3.up);
_thisTransform.rotation *= rot;
}
}



То же самое делаем со скриптом «Enemy»:

using UnityEngine;

public class Enemy : MonoBehaviour
{
// скорость ходьбы и скорость поворота в секунду
public float moveSpeed = 2;
public float turnSpeed = 90;

private CharacterController _controller;
private Transform _thisTransform;
private Transform _playerTransform;

public void Start()
{
// Получаем контроллер
_controller = GetComponent<CharacterController>();

// Получаем компонент трансформации объекта, к которому привязан данный компонент
_thisTransform = transform;

// Получаем компонент трансформации игрока
Player player = (Player)FindObjectOfType(typeof(Player));
_playerTransform = player.transform;
}

// Все что связано с физикой выполняем в FixedUpdate
public void FixedUpdate()
{
// направление на игрока
Vector3 playerDirection = (_playerTransform.position - _thisTransform.position).normalized;

// угол поворота на игрока
float angle = Vector3.Angle(_thisTransform.forward, playerDirection);

// максимальный угол поворота на текущем кадре
float maxAngle = turnSpeed * Time.deltaTime;

// Вычисляем прямой поворот на игрока
Quaternion rot = Quaternion.LookRotation(_playerTransform.position - _thisTransform.position);

// поворачиваем врага на игрока с учетом скорости поворота
if (maxAngle < angle)
{
_thisTransform.rotation = Quaternion.Slerp(_thisTransform.rotation, rot, maxAngle / angle);
}
else
{
_thisTransform.rotation = rot;
}

// если дистанция до игрока больше трех метров
if (Vector3.Distance(_playerTransform.position, _thisTransform.position) > 3.0f)
{
// двигаемся к игроку
_controller.Move(_thisTransform.forward * moveSpeed * Time.deltaTime);
}
else // если меньше или равна трем метрам
{
// здесь например стреляем в игрока
}

// гравитация
_controller.Move(Vector3.down * 10.0f * Time.deltaTime);
}
}



Подготавливаем сцену
На данном этапе Вы уже должны понимать, как работают скрипты поведения каждого из трех объектов, назначение каждого из используемых окон среды. Если что-то осталось непонятно, то попробуйте перечитать эту статью или вернуться к предыдущей статье.
Возвращаемся в среду Unity3d и создаем три игровых объекта в сцене: два кубика и план.
У кубиков удаляем Box Collider и добавляем компонент Character Controller, с помощью которого будем управлять игроком и врагами.
Назначаем кубикам материалы перетаскиванием.
Зададим плану масштаб(Scale) (100,1,100) для того, чтобы он принял размеры, требуемые по заданию (по умолчанию он размером 10х10) и поместим его в ноль координат, если он был создан не в нуле. На нем по умолчанию установлен компонент Mesh Collider, который позволит нашим кубикам не проваливаться.
Выбираем первый кубик и добавляем ему компонент Player. Перетаскиваем этот кубик на префаб с названием Player.
Выбираем второй кубик и добавляем ему компонент Enemy. Перетаскиваем этот кубик на префаб с названием Enemy.
Переименовываем объекты в сцене в соответствии с их назначением.
Вы должны уже были заметить, что после создания из объекта префаба – его название в сцене становится синего цвета.
Расставляем наши объекты в сцене, так как нужно, создав заранее еще два экземпляра префаба Enemy просто перетащив его в сцену.
Переименуем врагов так как в задании)).

user posted image
Сохранить и Запустить.
Кол-во прочтений 738 - последний комментарий от Hellotar   Print email