Главная » Статьи » Space Shooter Unity3D

Ограничение движения и выстрел.

Всё, написали движение нашего шаттла, теперь запустив игру, вы заметите один небольшой косяк – шаттл может улететь за пределы нашей камеры. Сегодня будем исправлять это. Давайте сначала найдем крайние точки, точки которые нельзя пересечь. Вот теперь-то нам очень сильно поможет плоскость.

Переместите шаттл в самый правый верхний угол плоскости и запишите его положение по осям X,  Z. Ось Y нам не нужна т.к. относительно этой оси шаттл не движется.

Заметьте, что при движении вниз положение относительно Х не меняется, значит, нам нужно записать положение по оси Z в самой верхней точке и нижний точках. Это и справедливо и для оси Х при движении влево, вправо относительно оси Z положение не меняется, значит, вы должны записать положение по оси Х только с крайних сторон нашей плоскости. Запишите их в скрипте в виде комментария, лично у меня получилось так.

Z в самой верхней точке -  171.3223.

Z в самой нижней точке  -194.9023.

X справа  301.0099.

X слева -287.6962.

Теперь добавляем условие

if(transform.position.z >= 171.3223)

{

}

Дело, в том, что transform.position.x/.y/.z возвращает на значение типа double, а для перемещения нам нужен тип float.

Чтобы исправить эту проблему объявляем 3 переменные типа float:

private float x;

private float y;

private float z;

в них, естественно, будут заносится положения по осям.

Теперь объявим метод ConvertingExpressions. Он будет конвертировать  transform.position.x в тип float и занесет выходные данные в переменную х, то же самое и с у и z.

Вот код:

void ConvertingExpressions()

{

float.TryParse(transform.position.x.ToString(), out x);

float.TryParse(transform.position.y.ToString(), out y);

float.TryParse(transform.position.z.ToString(), out z);

}

Думаю здесь всё ясно.

Теперь в метод Update:

if(transform.position.z >= 171.3223)

{

ConvertingExpressions();

transform.position = new Vector3(x, y, 171.3223f);

}

if(transform.position.z <= -194.9023)

{

ConvertingExpressions();

transform.position = new Vector3(x, y, -194.9023f);

}

if(transform.position.x >= 301.0099)

{

ConvertingExpressions();

transform.position = new Vector3(301.0099f, y, z);

}

if(transform.position.x <= -287.6962)

{

ConvertingExpressions();

transform.position = new Vector3(-287.6962f, y, z);

}

Вместо моих чисел подставьте свои. Вы, наверно обратили внимание, что метод ConvertingExpressions мы вызываем во всех случаях, почему? Попробуйте ответить сами, не мне же всё расписывать.

Давайте попробуем пострелять.

Создайте GameObject сферу, для этого GameObject -> Create Other -> Shpere. Назовите его Bullet. Увеличьте его размеры так, чтобы он был чуть меньше «носика» шаттла.Можете убрать его в сторонку, чтобы мы не видели его прямо в игре.

Создайте Empty GameObject -> Create Empty. Назовите его Turret, расположите его на одной высоте с шаттлом и вот так:

Обратите внимание на иерархию, Turret дочерний объект Шаттла.

Выделите Bullet и сделайте его Rigidbody, для этого Component -> Physics -> Rigidbody, появиться группа свойств Rigidbody в котором вы должны отключиться гравитацию(снимаем галку с Use Gravity).

Откройте скрипт SpaceActions:

public GameObject bullet;

public GameObject shootTurrel;

public int bulletSpeed;

private float timeShoots = 0;

в bullet мы занесем наш буллет, shootTurrel нашу турель, и bulletSpeed показывает нам скорость нашего буллета.

Создадим новый метод:

void BulletShoot()

{

if(Time.time > timeShoots)

{

timeShoots = Time.time + 0.3f;

GameObject bulletClone;

bulletClone = Instantiate(bullet, shootTurrel.transform.position, shootTurrel.transform.rotation) as GameObject;

Physics.IgnoreCollision(collider, bulletClone.collider);

bulletClone.rigidbody.velocity = new Vector3(-bulletSpeed,0,0);

Destroy(bulletClone, 5.0f);

}

}

Теперь в метод Update добавляем новое условие:

if(Input.GetKey(KeyCode.Space))

                BulletShoot();

То есть при каждом нажатии клавиши Space мы вызываем метод BulletShoot.

Следующим вы должны сделать шаттл объектом, который сможет взаимодействовать с другими телами, для этого выделите шаттл и Component -> Physics -> Box Collider. Вокруг шаттла должна появится зеленая призма.

Теперь в инспекторе шаттла всё должно быть вот так:

Обязательно напишите, если у вас что-то не получилось, на этом всё спасибо за внимание.

 


Категория: Space Shooter Unity3D | Добавил: Шаке (07.01.2012)
Просмотров: 7880 | Теги: parent, Script, bullet, rigidbody, gameobject, Shoot, Unity3d, C#
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
/>meta http-equiv=